一、配置nginx隱藏版本號
在生產環境中,需要隱藏nginx的版本號,以避免安全漏洞的泄露
查看方法
- 使用fiddler工具在Windows客戶端查看nginx版本號
- 在centos系統中使用"curl -I 網址" 命令查看
nginx隱藏版本號的方法 - 修改配置文件法
- 修改源碼法
1、修改配置文件法
(1)nginx的配置文件中server_tokens選項的值設置爲off[root@nginx ~]# curl -I http://192.168.150.213 Server: nginx/1.12.2 [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf server_tokens off;
(2)重啓服務,訪問網站使用curl -I 命令檢測
[root@nginx ~]# service nginx restart [root@nginx ~]# curl -I http://192.168.150.213 Server: nginx
2、修改源碼法
(1)nginx源碼文件nginx-1.12.2/src/core/nginx.h 包含了版本信息,可以隨意設置[root@nginx ~]# cd /opt/nginx-1.12.2/src/core/ [root@nginx core]# vim nginx.h #define NGINX_VERSION "1.1.1" #將1.12.2版本號改爲1.1.1
(2)重新編譯安裝,隱藏版本信息
(3)重啓服務,訪問網站使用curl -I 命令檢測[root@nginx ~]# service nginx restart [root@nginx ~]# curl -I http://192.168.150.213 Server: nginx/1.1.1
二、修改nginx用戶與組
Nginx運行時進程需要有用戶與組的支持,以實現對網站文件讀取時進行訪問控制
Nginx默認使用nobody用戶賬號與組賬號,一般也要進行修改
修改的方法
- 編譯安裝時指定用戶與組
- 修改配置文件指定用戶與組
1、編譯安裝時指定
(1)創建用戶賬號與組賬號,如nginx
(2)在編譯安裝時–user與–group指定Nginx服務的運行用戶與組賬號
2、修改配置文件指定
(1)修改主配置文件user選項,指定用戶賬號[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf user nginx nginx;
(2)重啓nginx服務,使配置生效
(3)使用ps aux命令查看nginx的進程信息,驗證運行用戶賬號改變效果
三、配置nginx網頁緩存時間
當Nginx將網頁數據返回給客戶端後,可設置緩存的時間,以方便在日後進行相同內容的請求時直接返回,避免重複請求,加快了訪問速度
一般針對靜態網頁設置,對動態網頁不設置緩存時間
可在Windows客戶端中使用fiddler查看網頁緩存時間
設置方法 - 可修改配置文件,在http段、或者server段、或者location段加入對特定內容的過期參數
示例 - 修改nginx的配置文件,在location段加入expires參數
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf location ~ \.(gif|jepg|jpg|ico|bmp|png)$ { root html; expires 1d; }
四、實現nginx的日誌切割
隨着Nginx運行時間增加,日誌也會增加,爲了方便掌握Nginx運行狀態,需要時刻關注Nginx日誌文件
太大的日誌文件對監控是一個大災難 - 定期進行日誌文件的切割
Nginx自身不具備日誌分割處理的功能,但可以通過Nginx信號控制功能的腳本實現日誌的自動切割,並通過Linux的計劃任務週期性地進行日誌切割
編寫腳本進行日誌切割的思路 - 設置時間變量
- 設置保存日誌路徑
- 將目前的日誌文件進行重命名
- 刪除時間過長的日誌文件
- 設置cron任務,定期執行腳本自動進行日誌分割
[root@nginx opt]# vim feng.sh #!/bin/bash #Filename:feng.sh d=$(date -d "-1 day" "+%Y%m%d") logs_path="/var/log/nginx" pid_path="/usr/local/nginx/logs/nginx.pid" [ -d $logs_path ] || mkdir -p $logs_path mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d kill -USR1 $(cat $pid_path) find $logs_path -mtime +30 | xargs rm -rf [root@nginx opt]# chmod +x feng.sh
五、配置nginx實現連接超時
在企業網站中,爲了避免同一個客戶長時間佔用連接,造成資源浪費,可設置相應的連接超時參數,實現控制連接訪問時間
使用Fiddler工具查看connection參數
超時參數講解 - Keepalive_timeout
設置連接保持超時時間,一般可只設置該參數,默認爲75秒,可根據網站的情況設置,或者關閉,可在http段、 server段、 或者location段設置 - Client_header_timeout
指定等待客戶端發送請求頭的超時時間 - Client_body_timeout
設置請求體讀超時時間[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf keepalive_timeout 65 180; client_header_timeout 80; client_body_timeout 80;
六、更改nginx運行進程數
在高併發場景,需要啓動更多的Nginx進程以保證快速響應,以處理用戶的請求,避免造成阻塞
可以使用ps aux命令查看Nginx運行進程的個數
更改進程數的配置方法 - 修改配置文件,修改進程配置參數
修改配置文件的worker_processes參數 - 一般設爲CPU的個數或者核數
- 在高併發情況下可設置爲CPU個數或者核數的2倍
運行進程數多-些,響應訪問請求時,Nginx就不會臨時啓動新的進程提供服務,減少了系統的開銷,提升了服務速度
使用ps aux查看運行進程數的變化情況
默認情況,Nginx的多個進程可能跑在一個CPU上, 可以分配不同的進程給不同的CPU處理,充分利用硬件多核多CPU
在一臺2核物理服務器,可進行以下配置,將進程進行分配[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf worker_processes 2; worker_cpu_affinity 01 10;
七、配置nginx實現網頁壓縮功能
Nginx的ngx_http_gzip_module壓縮模塊提供對文件內容壓縮的功能
允許Nginx服務器將輸出內容在發送客戶端之前進行壓縮,以節約網站帶寬,提升用戶的訪問體驗,默認已經安裝
可在配置文件中加入相應的壓縮功能參數對壓縮性能進行優化
壓縮功能參數詳解 - gzip on:開啓gzip壓縮輸出
- gzip_min_length 1k:用於設置允許壓縮的頁面最小字節數
- gzip_buffers 416k:表示申請4個單位爲1 6k的內存作爲壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果
- zip_http_version 1.0:用於設置識別http協議版本,默認是1.1,目前大部分瀏覽器已經支持gzip解壓,但處理最慢,也比較消耗服務器CPU資源
- gzip_comp_level 2:用來指定gzip壓縮比,1壓縮比最小,處理速度最快; 9壓縮比最大,傳輸速度快,但處理速度最慢,使用默認即可
- gzip_types text/plain:壓縮類型,是就對哪些網頁文檔啓用壓縮功能
- gzip_vary on:選項可以讓前端的緩存服務器緩存經過gzip壓縮的頁面
將以上的壓縮功能參數加入到主配置文件httpd配置中段[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json; gzip_disable "MSIE [1-6]\."; gzip_vary on; [root@nginx ~]# service nginx restart [root@nginx ~]# systemctl stop firewalld.service [root@nginx ~]# setenforce 0