一、隱藏nginx header內版本號信息
由于一些特定的系統及服務漏洞一般都和特定的軟件及版本號有關,我們應盡量隱藏服務器的敏感信息(軟件名稱及版本等信息),在一定程度確保web服務器的安全
1、利用curl查看隱藏前header內的web版本信息
[root@node1 ~]# curl -I http://10.100.100.111
HTTP/1.1 200 OK
# Server: nginx/1.10.2
Date: Wed, 06 Dec 2017 20:56:43 GMT
Content-Type: text/html
Content-Length: 3698
Last-Modified: Mon, 31 Oct 2016 12:37:31 GMT
Connection: keep-alive
ETag: "58173b0b-e72"
Accept-Ranges: bytes
2、隱藏版本號
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off; (添加這個即可)
3、測試
[root@node1 ~]# service nginx reload
Reloading nginx: [ OK ]
[root@node1 ~]# curl -I http://10.100.100.111
HTTP/1.1 200 OK
Server: nginx
二、更改掉nginx的默認用戶及用戶組nobody
1、nginx服務啟動,使用默認用戶nobody
[root@node1 ~]# grep "user" /etc/nginx/nginx.conf.default
#user nobody; (默認為nobody)
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '"$http_user_agent" "$http_x_forwarded_for"';
2、更改配置文件/etc/nginx/nginx.conf
#user nobody更改為user nginx
或者在編譯的時候指定 --user=nginx --group=nginx
3、查看
[root@node1 ~]# ps -ef|grep nginx
root 1442 1 0 04:56 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 1478 1442 0 05:02 ? 00:00:00 nginx: worker process
root 1485 1335 0 05:08 pts/0 00:00:00 grep nginx
三、配置nginx worker進程個數
worker_processes 定義了nginx對外提供web服務時的worker進程數。最優值取決于許多因素,包括(但不限于)CPU核的數量、存儲數據的硬盤數量及負載模式。不能確定的時候,將其設置為可用的CPU內核數將是一個好的開始(設置為“auto”將嘗試自動檢測它)
新版本的nginx,worker_processes 都為auto咯
如果要設置,一般設置為服務器cpu核心數-1,假如8核CPU,那么設置
worker_processes 6
查看物理cpu的方法
[root@node1 ~]# grep "physical id" /proc/cpuinfo
physical id : 0
2、worker_rlimit_nofile 更改worker進程的最大打開文件數限制。如果沒設置的話,這個值為操作系統的限制。設置后你的操作系統和Nginx可以處理比“ulimit -a”更多的文件,所以把這個值設高,這樣nginx就不會有“too many open files”問題了。
work_rlimit_nofile 65535;
文件資源限制的配置可以在/etc/security/limits.conf設置,針對root/user等各個用戶或者*代表所有用戶來設置。
* soft nofile 65535
* hard nofile 65535
用戶重新登錄生效(ulimit -n)
3、worker_connections 設置可由一個worker進程同時打開的最大連接數。如果設置了上面提到的worker_rlimit_nofile,我們可以將這個值設得很高。
4、multi_accept 告訴nginx收到一個新連接通知后接受盡可能多的連接。
四、根據CPU核數進行nginx進程優化
默認情況nginx的多個進程可能跑到一顆CPU上,我們要將不同的進程分配到不同的cpu上
假如四核的CPU
worker_cpu_affinity 0001 0010 0100 1000
假如八核CPU
worker_cpu_affinity 000000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
五、HTTP上下文配置優化
(1)、sendfile 指向 sendfile()函數。sendfile() 在磁盤和 TCP 端口(或者任意兩個文件描述符)之間復制數據。不要在意這些細節,說了這么多,只是想說,開著就好。
(2)、tcp_nopush 配置 nginx 在一個包中發送全部的頭文件,而不是一個一個發送。
(3)、tcp_nodelay 配置 nginx 不要緩存數據,應該快速的發送小數據——這僅僅應該用于頻繁發送小的碎片信息而無需立刻獲取響應的、需要實時傳遞數據的應用中。
(4)、keepalive_timeout 指定了與客戶端的 keep-alive 鏈接的超時時間。服務器會在這個時間后關閉鏈接。我們可以降低這個值,以避免讓 worker 過長時間的忙碌。(可以改的低點,比如15)
六、連接超時時間
主要目的是保護服務器資源,CPU,內存,控制連接數,因為建立連接也是需要消耗資源的
1) keepalived_timeout客戶端連接保持會話超時時間,超過這個時間,服務器斷開這個鏈接
keepalive_timeout 60;
2)客戶端請求頭部的緩沖區大小,這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過 1k,不過由于一般系統分頁都要大于1k,所以這里設置為分頁大小
client_header_buffer_size 4k;
3)open_file_cache max=102400 inactive=20s;
這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數量,建議和打開文件
數一致,inactive 是指經過多長時間文件沒被請求后刪除緩存。
open_file_cache_valid 30s;
這個是指多長時間檢查一次緩存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive 參數時間內文件的最少使用次數,如果超過這個數字,文
件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive 時間內一次沒被使用,它將被移除。
4)client_header_timeout設置請求頭的超時時間。我們也可以把這個設置低些,如果超過這個時間沒有發送任何數據,nginx將返回request time out的錯誤
client_body_timeout設置請求體的超時時間。我們也可以把這個設置低些,超過這個時間沒有發送任何數據,和上面一樣的錯誤提示
5)send_timeout響應客戶端超時時間,這個超時時間僅限于兩個活動之間的時間,如果超過這個時間,客戶端沒有任何活動,nginx關閉連接
6)client_max_body_size上傳文件大小限制
7)open_file_cache max=102400 inactive=20s;
這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數量,建議和打開文件
數一致,inactive 是指經過多長時間文件沒被請求后刪除緩存。
open_file_cache_valid 30s;
這個是指多長時間檢查一次緩存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive 參數時間內文件的最少使用次數,如果超過這個數字,文
件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive 時間內一次沒被使用,它將被移除。
- 第一部分:Nginx Web服務
- 第一章: Nginx的初探
- 第二章:Nginx的安裝部署
- 第一節:在centos6上通過Yum安裝Nginx
- 第二節:在Centos7上通過Yum安裝nginx
- 第三節:編譯安裝Nginx服務
- 第四節: Nginx編譯參數詳解
- 第五節: Nginx的啟動腳本
- 第六節:Nginx的shell腳本安裝
- 第七節:nginx服務的平滑升級
- 第三章:Nginx服務基礎配置
- 第一節: 配置運行nginx服務器用戶
- 第二節:配置運行生成的worker processes進程數
- 第三節:配置Nginx進程PID存放路徑
- 第四節:定義MIME類型
- 第五節:自定義nginx的訪問日志
- 第六節:主配置段(main)常用的配置
- 第七節:http段(核心)常用的配置命令
- 第八節:配置nginx中的location段
- 第九節: 基于IP的訪問控制
- 第十節:基于用戶的訪問控制
- 第十一節:Nginx定義status狀態頁
- 第十二節:Nginx服務器Rewrite重寫
- 第十三節:Nginx服務配置防盜鏈
- 第十四節:nginx軟件的優點
- 第四章:Nginx服務器的優化配置
- 第一節:nginx.conf配置文件基本參數優化
- 第二節:fastcgi調優
- 第三節:Gzip調優
- 第四節:expires緩存調優
- 第五節:內核參數優化
- 第六節: Nginx之——413 修改上傳文件大小限制
- 第五章:Nginx虛擬主機的配置
- 第一節:基于名稱的虛擬主機
- 第二節:通過shell腳本添加虛擬主機
- 第六章:Nginx常用模塊指令詳解
- 第一節:ngx_http_realip_module
- 第二節:http_image_filter_module
- 第三節:tengine中配置consistent hash module
- 第四節:ngx_http_userid_module
- 第七章:Nginx服務器配置HTTPS訪問
- 第八章: Nginx服務器日志切割
- 第二部分:Nginx負載均衡反向代理服務
- 第一章:Nginx進階參數詳解
- 第一節:proxy_module參數詳解
- 第二節:upstream_module參數詳解
- 第四章:Nginx反向代理服務
- 第一節:Nginx反向代理配置參數詳解
- 第二節:Nginx反向代理服務配置案例
- 第三節:Nginx緩存
- 第四節: Nginx中fastcgi模塊
- 第五節:nginx+fastcgi實現動靜分離架構
- 第五章:Nginx負載均衡
- 第一節:ngx_http_upstream_module常見指令
- 第二節:調度方法
- 第三節:健康狀態檢查