查看nginx版本信息:html
[root@nginx conf]# curl -I 192.168.200.102 HTTP/1.1 200 OK Server: nginx/1.8.1 #這裏顯示了nginx的版本號即軟件名稱; Date: Fri, 31 Aug 2018 09:20:47 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Fri, 31 Aug 2018 08:41:19 GMT Connection: keep-alive ETag: "5b88ff2f-264" Accept-Ranges: bytes
隱藏nginx版本號只須要在nginx.conf文件中的http標籤段內加入「server_tokens off」參數便可。nginx
server_tokens參數的官方說明以下:安全
syntax: server_tokens on | off; #此行爲參數語法,on爲開啓狀態,off爲關閉狀態; default: server_tokens on; #此行意思是不配置改參數,軟件默認狀況的結果; context: http,server,location #此行爲server_tokens參數能夠放置的位置; 參數做用:激活或禁止nginx的版本信息顯示在報錯信息和server的響應首部位置中; Enables or disables emitting of nginx version in error messages and inter"Server" response header field. #此行是參數的原文做用;
官方資料地址:架構
操做以下:app
[root@nginx conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server_tokens off; #加入這一行便可; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
再次查看,nginx的版本信息就隱藏了:curl
[root@nginx conf]# systemctl reload nginx [root@nginx conf]# curl -I 192.168.200.102 HTTP/1.1 200 OK Server: nginx Date: Fri, 31 Aug 2018 09:34:16 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Fri, 31 Aug 2018 08:41:19 GMT Connection: keep-alive ETag: "5b88ff2f-264" Accept-Ranges: bytes
建議在編譯安裝前修改,安裝後修改軟件名,須要從新編譯。優化
第一步:依次修改3個nginx源碼文件:ui
修改nginx.h文件 路徑爲:nginx源碼包下面的 src/core/nginx.h 修改後以下: ... #define NGINX_VERSION "1.0" #define NGINX_VER "Web" NGINX_VERSION ... #define NGINX_VAR "Web" ... 修改ngx_http_header_filter_module.c文件 路徑爲:nginx源碼包下面的 src/http/ngx_http_header_filter_module.c 修改第49行,修改後以下: static char ngx_http_server_string[] = "Server: Web" CRLF; 也能夠 經過sed替換修改,命令以下: sed -i '49 $#nginx#Web#g' ngx_http_header_filter_module.c 修改ngx_http_header_filter_module.c文件 路徑爲:nginx源碼包下面的 src/http/ngx_http_header_filter_module.c 修改後以下: 第22行:"<hr><center>Web</center>" CRLF 第29行:"<hr><center>Web</center>" CRLF
第二步:修改後編譯軟件使其生效(若是是已經安裝好的,須要從新編譯。)url
systemctl stop nginx ./configure --user=www --group=www --prefix=/application/nginx-1.8.1 --with-http_stub_status_module --with-http_ssl_module make && make install systemctl start nginx [root@nginx nginx-1.8.1]# curl -I 192.168.200.102 HTTP/1.1 200 OK Server: Web #服務名稱和版本號已隱藏; Date: Fri, 31 Aug 2018 15:00:46 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Fri, 31 Aug 2018 08:41:19 GMT Connection: keep-alive ETag: "5b88ff2f-264" Accept-Ranges: bytes
查看nginx服務對應的默認用戶,通常狀況下,nginx服務啓動後,默認使用的用戶是nobody,查看默認的配置文件,以下:spa
[root@nginx conf]# grep '#user' nginx.conf.default #user nobody;
更改nginx的默認用戶,操做以下:
1、爲nginx服務創建新用戶 [root@nginx conf]# useradd www -s /sbin/nologin -M [root@nginx conf]# id www uid=1002(www) gid=1002(www) 組=1002(www) 2、配置nginx服務,讓其使用剛創建的nginx用戶 第一種爲直接更改配置文件參數,將默認的#user nobody;改成以下內容: user nginx nginx 第二種方法爲直接在編譯nginx軟件是指定編譯的用戶和組,命令以下: ./configure --user=www --group=www --prefix=/application/nginx-1.8.1 --with-http_stub_status_module --with-http_ssl_module 3、檢查更改用戶的效果 [root@nginx conf]# ps -ef |grep nginx|grep -v frep root 7360 1 0 23:00 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx www 7362 7360 0 23:00 ? 00:00:00 nginx: worker process root 7416 1271 0 23:16 pts/0 00:00:00 grep --color=auto nginx
經過查看更改後的nginx進程,能夠看到worker processes進程對應的用戶都變成了nginx。固然,nginx的主進程仍是以root身份運行的,後面的文章中會有更改root主進程服務用戶的深度安全優化與架構技巧。