細節決定成敗,服務器的安全也是這樣!隱藏或者修改nginx的信息,不是什麼炫酷的技能,只是nginx設置中的一個小小的細節。php
查看http請求的response裏面的header咱們會發現有server這個參數,它表示服務端使用的是什麼web服務器。nginx
例如web
新浪網:shell
Server: nginx
開源中國:segmentfault
Server: Tengine
segmentfault甚至都沒有返回server!安全
不少網站不止返回了nginx並且還帶了版本號,而像版本號這種東西徹底不必暴露給用戶,咱們能夠經過設置server_tokens off隱藏掉版本號:服務器
http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; server_tokens off; ##隱藏版本號
即便把server_tokens設爲了off,也並不表明nginx的版本號是徹底不可見的~app
經過上圖咱們能夠看到雖然http返回的header裏面已經沒有了版本號,可是php裏面仍是能夠獲取到nginx的版本號的,若是要對PHP也隱藏掉版本號就須要修改fastcgi.conf這個文件了:網站
去掉後面的 /$nginx_version 或者 直接註釋掉這一行!spa
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
若是我但願nginx也不顯示呢?或者修改nginx爲Tengine呢?
這個時候就要修改nginx源碼文件src/core/nginx.h,例如我把nginx修改問tengine:
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGINX_H_INCLUDED_ #define _NGINX_H_INCLUDED_ #define nginx_version 1009005 /* #define NGINX_VERSION "1.9.5" #define NGINX_VER "nginx/" NGINX_VERSION */ #define NGINX_VERSION "2.1.1" #define NGINX_VER "Tengine/" NGINX_VERSION #ifdef NGX_BUILD #define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")" #else #define NGINX_VER_BUILD NGINX_VER #endif #define NGINX_VAR "NGINX" #define NGX_OLDPID_EXT ".oldbin" #endif /* _NGINX_H_INCLUDED_ */
也能夠把NGINX_VER 賦值爲空,這樣Http 返回的header裏面的server也爲空了!
須要注意的是,若是server_tokens設置爲off,即便源碼NGINX_VER 賦值爲空或者改爲其餘值,返回的server仍是nginx,只是不顯示版本號!