1. 程式人生 > >nginx隱藏版本資訊

nginx隱藏版本資訊

1.原始碼編譯安裝一份nginx
tar xzf nginx-1.11.9.tar.gz
cd nginx-1.11.9
./configure --prefix=/usr/local/nginx
make && make install

2.啟動nginx
/usr/local/nginx/sbin/nginx

3.檢視nginx的版本資訊
curl -I 192.168.146.134 #ip改為你自己的
如果nginx安裝正確,並正常啟動會看到下面的資訊:
HTTP/1.1 200 OK
Server: nginx/1.11.9
Date: Sun, 05 Feb 2017 07:51:01 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 05 Feb 2017 07:48:23 GMT
Connection: keep-alive
ETag: "5896d8c7-264"
Accept-Ranges: bytes

斜體字部分標明瞭你所用的WEB伺服器的名稱和版本資訊,在生產環境中暴露這些資訊是不安全的。通過兩種方式對上述資訊進行隱藏:
一是在配置檔案中加入server_tokens off;引數禁止版本資訊洩漏:
再次檢視web server版本資訊
HTTP/1.1 200 OK
Server: nginx

Date: Sun, 05 Feb 2017 08:05:33 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 05 Feb 2017 07:48:23 GMT
Connection: keep-alive
ETag: "5896d8c7-264"
Accept-Ranges: bytes

這種情況下只能隱藏版本,不能隱藏檔名。
第二種辦法是在編譯的時候把原始檔裡的版本資訊更改一下,編譯完後顯示的是你修改的內容。
修改原始碼包裡的三個檔案:
1.src/core下的nginx.h檔案
#define nginx_version 100011
#define NGINX_VERSION "7.89"
#define NGINX_VER "GWS/" NGINX_VERSION
2.src/http下的ngx_http_header_filter_module.c檔案
static char ngx_http_server_string[] = "Server: GWS" CRLF;
3.src/http下的ngx_http_special_response.c檔案
static u_char ngx_http_error_tail[] =
"<hr><center>GWS</center>" CRLF

重新編譯nginx:
make clean
./configure --prefix=/usr/local/nginx
make && make install

重新啟動nginx後再次檢視一下
HTTP/1.1 200 OK
Server: GWS

Date: Sun, 05 Feb 2017 08:33:58 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 05 Feb 2017 08:24:02 GMT
Connection: keep-alive
ETag: "5896e122-264"
Accept-Ranges: bytes

server的輸出內容變成了我自己改的名稱。