1. 程式人生 > >apache隱藏版本資訊及設定網頁快取

apache隱藏版本資訊及設定網頁快取

實戰:原始碼編譯安裝apache及調優技巧

實戰環境:

生產環境中,部署了apache之後,我們應該從安全還是效能角度,在apache服務上線之前,對其做諸多的優化除錯才行。

技巧1:

安裝apache遮蔽apache版本等敏感資訊

檢視apache版本資訊:

[root@localhost ~]# curl -I www.baidu.com

。。。

X-Powered-By: HPHP

Server: bfe/1.0.8.18

X-UA-Compatible: IE=Edge,chrome=1

BDPAGETYPE: 1

BDQID: 0xcfd31d8200026e11

BDUSERID: 0

 

測試自己的網站看是什麼版本?有沒有相應的漏洞

 

[root@localhost  ~]# curl -I www.taobao.com

HTTP/1.1 302 Found

Server: Tengine  基於nginx做了二次開發

Date: Tue, 17 Nov 2015 02:22:06 GMT

Content-Type: text/html

Content-Length: 258

Connection: keep-alive

Location: https://www.taobao.com/

 

徹底讓版本等敏感資訊消失

要徹底將版本之類的資訊進行改頭換面,需要在編譯之前修改原始碼包下include/ap_release.h檔案

[root@localhost  httpd-2.2.25]# pwd

/usr/local/src

 [root@localhost  src]# tar zxf httpd-2.2.31.tar.gz

[root@localhost  src]# cd httpd-2.2.31

[root@localhost  httpd-2.2.25]# vim include/ap_release.h  #修改原始碼中的版本資訊為自己公司的相關資訊,隱藏真實版本資訊

改:

42 #define AP_SERVER_BASEVENDOR "Apache Software Foundation"

 43 #define AP_SERVER_BASEPROJECT "Apache HTTP Server"

 44 #define AP_SERVER_BASEPRODUCT "Apache"

 45

 46 #define AP_SERVER_MAJORVERSION_NUMBER 2

 47 #define AP_SERVER_MINORVERSION_NUMBER 2

 48 #define AP_SERVER_PATCHLEVEL_NUMBER   25

 49 #define AP_SERVER_DEVBUILD_BOOLEAN    0

為:

#define AP_SERVER_BASEVENDOR "xuegod"

#define AP_SERVER_BASEPROJECT " web server"

#define AP_SERVER_BASEPRODUCT " xuegod web server"

 

#define AP_SERVER_MAJORVERSION_NUMBER 8

#define AP_SERVER_MINORVERSION_NUMBER 1

#define AP_SERVER_PATCHLEVEL_NUMBER   2

#define AP_SERVER_DEVBUILD_BOOLEAN    3

註釋:

#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服務的供應商名稱

#define AP_SERVER_BASEPROJECT "Apache HTTP Server"  #服務的專案名稱

#define AP_SERVER_BASEPRODUCT "Apache"        #服務的產品名

#define AP_SERVER_MAJORVERSION_NUMBER 2  #主要版本號

#define AP_SERVER_MINORVERSION_NUMBER 4  #小版本號

#define AP_SERVER_PATCHLEVEL_NUMBER  6  #補丁級別

#define AP_SERVER_DEVBUILD_BOOLEAN  0  #

注:上述列出的行,大家可以修改成自己想要的,然後編譯安裝之後,再對httpd-default.conf檔案進行修改,對方就徹底不知道你的版本號了。

原始碼編譯安裝apache

[root@localhost  httpd-2.2.11]# yum install openssl*

[root@localhost httpd-2.2.25]# ./configure --prefix=/usr/local/apache2.2-xuegod --enable-so --enable-rewrite --enable-ssl   --enable-deflate  --enable-expires   #檢查安裝環境並生成Makefile檔案

配置引數用途:

--prefix=/usr/local/apache2.2   #指定安裝路徑

--enable-so  # 支援動態載入模

--enable-rewrite  #支援網站地址重寫

--enable-ssl  # 支援ssl加密

--enable-deflate  #支援頁面傳輸前進行壓縮

--enable-expires  #支援設定網頁快取的時間

 

配置引數用途:

--prefix=:指定安裝目錄

--enable-so:支援動態載入模組

--enable-rewrite :支援網站地址重寫

--enable-cgi:支援CGI程式指令碼

--enable-ssl:支援SSL加密

--enable-charset-lite:支援多語言編碼

 

編譯:

[root@localhost  httpd-2.2.25]# make -j  4  #把原始碼編譯成可執行的二進位制檔案。 

-j  4  #以4個程序同時編譯。 以4核CPU同時編譯,快

-j 4 聽:1  沒有:2

安裝:

[root@localhost  httpd-2.2.25]# make install

啟動apache:

配置apache 可以開機啟動並且可以使用service 命令啟動apache伺服器

[root@localhost  httpd-2.2.25]# cp /usr/local/apache2.2-xuegod/bin/apachectl /etc/init.d/apachectl-xuegod

 

啟動apache:

[root@localhost  httpd-2.2.25]#  /etc/init.d/apachectl-xuegod start

測試:

 

測試:隱藏apache版本資訊

[root@localhost  ~]# curl -I 192.168.1.63   #看不到apache版本相關內容了

HTTP/1.1 200 OK

Date: Sat, 29 Aug 2015 09:43:44 GMT

Server: xuegod web server/8.1.2-dev (Unix) mod_ssl/8.1.2-dev OpenSSL/1.0.0-fips

Last-Modified: Sat, 29 Aug 2015 09:37:36 GMT

ETag: "6d086-3a-51e6ff35dba19"

Accept-Ranges: bytes

Content-Length: 58

Content-Type: text/html

 

再次隱藏版本號和系統型別

接下來再次修改:

[root@localhost  ~]#  vim /usr/local/apache2.2-xuegod/conf/httpd.conf

405 #Include conf/extra/httpd-default.conf

為:

Include conf/extra/httpd-default.conf

 

2)開啟httpd-default.conf檔案,修改如下兩個地方

[root@localhost ~]#  vim /usr/local/apache2.2-xuegod/conf/extra/httpd-default.conf 

改:

55 ServerTokens Full

65 ServerSignature On    signature 簽名

為:

ServerTokens Prod   #不顯示伺服器作業系統型別

ServerSignature Off   #不顯示web伺服器版本號

 

 

讓apache配置檔案生效的方法:

方法1:重啟服務: restart   #會中斷正在進行的連線

方法2:不重啟服務,重新載入配置檔案

reload是nginx

[root@localhost ~]# /etc/init.d/apachectl-xuegod graceful     優雅的

測試:

[root@localhost ~]# curl -I 192.168.1.63

HTTP/1.1 200 OK

Date: Thu, 14 Jan 2016 02:31:24 GMT

Server: xuegod web server

 

優化技巧2:2mod_expires: 設定網頁快取時間

平時,我們大多數的圖片,flash在釋出之後都是不需要經常修改的,因此做了快取之後,遊覽器第一次從伺服器下載之後,就不需要再從伺服器下載這些檔案而是直接從遊覽器快取中讀取了。這樣客戶訪問頁面的速度就會大大加快,企業的頻寬壓力也得到了緩解。

實戰: 對圖片,flash快取12個月

[root@localhost  ~]# vim /usr/local/apache2.2-xuegod/conf/httpd.conf  #在最後新增以下內容:

在57 <IfModule !mpm_netware_module>

58 <IfModule !mpm_winnt_module>

 

<IfModule mod_expires.c> 

ExpiresActive on

    ExpiresDefault "access plus 12 month"

    ExpiresByType text/html "access plus 12 months"

    ExpiresByType text/css "access plus 12 months"

    ExpiresByType image/gif "access plus 12 months"

    ExpiresByType image/jpeg "access plus  12 months"

    ExpiresByType image/jpg "access plus 12 months"

    ExpiresByType image/png "access plus 12 months"

    EXpiresByType application/x-shockwave-flash "access plus 12 months"

    EXpiresByType application/x-javascript "access plus 12 months"

ExpiresByType video/x-flv "access plus 12 months"

</IfModule>

重啟服務:

[root@localhost  ~]# /etc/init.d/apachectl-xuegod restart

測試:

上傳一張圖片a.jpg 到/usr/local/apache2.2-xuegod/htdocs下:

[root@localhost  ~]# cp a.jpg /usr/local/apache2.2-xuegod/htdocs

 

訪問:http://192.168.1.63/a.jpg

使用YSlow外掛進行快取效果檢視。

 

 

快取優化對企業來說是至關重要了的,不同的業務型別,對於快取的型別和時間又各不相同,大傢俱體可以用YSlow對淘寶,京東,新浪,谷歌等站點進行測試,看看他們的快取時間是多少,並思考下為什麼那樣設定。

檢視天貓快取時間:

注:天貓解決被快取檔案及時更新的方法:對快取的物件改名

 

雖然快取的設定有如下優點

1.縮短服務的響應時間

2.減輕伺服器負擔

3.減少網路頻寬使用量,降低企業成本

但是他的缺點也是顯而易見的,由於使用了快取設定,導致被快取的內容更新了,但是客戶看到的卻還是舊的。

 

第一種:縮短快取時間例如:1天,不徹底犧牲效能

第二種:對快取的物件改名。

 

總結:

優化1 : 隱藏apache版本號,讓黑客找不漏洞

優化2:開啟快取功能,節省伺服器開銷

 

apache一共有32處調優