一般來說要隱藏 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 的話,作法如下:

  1. 下載 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
  2. 編輯 ngx_http_header_filter_module.c

     

    $ vim src/http/ngx_http_header_filter_module.c
  3. 修改第 48 以及 49 行,將他們都改成其他的字串
    static char ngx_http_server_string[] = "Server: HaHaHa" CRLF;
    static char ngx_http_server_full_string[] = "Server: HaHaHa" CRLF;
  4. 產生 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
  5. 編譯並重新安裝
    $ sudo make && make install
  6. 重新啟動 nginx
    $ sudo service nginx restart
  7. 理論上 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
    ....下略

Share Your Thought