一般來說要隱藏 nginx 版本號的方法只需要在設定檔案中加入下段設定即可:
server_tokens off;
但是我們透過一般 Client 去詢問伺服器時,還是會回傳 Server : nginx 的資訊:
$ curl -s -D - http://127.0.0.1 -o /dev/null
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 27 Nov 2015 16:42:59 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
....下略
這部份是 nginx 寫死的,如果要真正隱藏 nginx 的 Header 的話,作法如下:
- 下載 nginx 原始碼並解壓縮
$ wget http://nginx.org/download/nginx-1.9.7.tar.gz $ tar -zxvf nginx-1.9.7.tar.gz $ cd nginx-1.9.7
- 編輯 ngx_http_header_filter_module.c
$ vim src/http/ngx_http_header_filter_module.c
- 修改第 48 以及 49 行,將他們都改成其他的字串
static char ngx_http_server_string[] = "Server: HaHaHa" CRLF; static char ngx_http_server_full_string[] = "Server: HaHaHa" CRLF;
- 產生 Makefile 檔案(注意路徑)
$ ./configure \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_ssl_module \ --with-http_v2_module
- 編譯並重新安裝
$ sudo make && make install
- 重新啟動 nginx
$ sudo service nginx restart
- 理論上 Server 的欄位應該會被更改,但是如果中間有 cache 如瀏覽器或是網路設備的話,就會是原來的,此時可以用 curl 去驗證。
$ curl -s -D - http://127.0.0.1 -o /dev/null HTTP/1.1 200 OK Server: HaHaHa Date: Fri, 27 Nov 2015 16:50:59 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive ....下略