1. 程式人生 > >nginx常見優化

nginx常見優化

1,自定義報錯頁面
1)配置
[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
error_page 404 /404.html; //自定義錯誤頁面
.. ..
[[email protected] ~]# vim /usr/local/nginx/html/40x.html //生成錯誤頁面
Oops,No NO no page …
[[email protected] ~]# nginx -s reload
2)測試
[[email protected] ~]# firefox http://192.168.4.5/xxxxx //訪問一個不存在的頁面

2,檢視伺服器狀態資訊
1)編譯安裝時使用--with-http_stub_status_module開啟狀態頁面模組
[[email protected] ~]# yum -y install gcc pcre-devel openssl-devel //安裝常見依賴包
[[email protected] ~]# tar -zxvf nginx-1.12.2.tar.gz
[[email protected] ~]# cd nginx-1.12.2
[[email protected] nginx-1.12.2]# ./configure \

--with-http_ssl_module //開啟SSL加密功能
--with-stream //開啟TCP/UDP代理模組
--with-http_stub_status_module //開啟status狀態頁面
[

[email protected] nginx-1.12.2]# make && make install //編譯並安裝

2)修改配置檔案
[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
… …
location /status {         #設定在根下輸入status就可以檢視nginx狀態資訊
stub_status on; #開啟狀態頁面
# allow IP地址;
# deny IP地址(all);
}
… …
[[email protected] ~]# /usr/local/sbin/nginx #開啟nginx

3)檢視nginx狀態資訊
[[email protected] ~]#firefox http://192.168.4.5/status
Active connections: 1
server accepts handled requests
10 10 3
Reading: 0 Writing: 1 Waiting: 0
Active connections:當前活動的連線數量。
Accepts:已經接受客戶端的連線總數量。
Handled:已經處理客戶端的連線總數量。
(一般與accepts一致,除非伺服器限制了連線數量)。
Requests:客戶端傳送的請求數量。
Reading:當前伺服器正在讀取客戶端請求頭的數量。
Writing:當前伺服器正在寫響應資訊的數量。
Waiting:當前多少客戶端在等待伺服器的響應。

3,優化nginx併發量
1)優化前使用ab高併發測試
[[email protected] ~]# ab -n 2000 -c 2000 http://192.168.4.5/
Benchmarking 192.168.4.5 (be patient)
socket: Too many open files (24) //提示開啟檔案數量過多
2)修改Nginx配置檔案,增加併發量
[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes 2; //設定程序數,與CPU核心數量一致      
events {
worker_connections 65535; //每個worker最大併發連線數,儘量寫大一點
use epoll;
}
.. ..
[[email protected] ~]# nginx -s reload    //重新整理配置檔案
3)優化linux核心引數(最大檔案數量)
[[email protected] ~]#ulimit -a //檢視所有屬性值
[[email protected] ~]#ulimit -Hn 100000 //設定硬限制(臨時規則)
[[email protected] ~]#ulimit -Sn 100000 //設定軟限制(臨時規則)
[[email protected] ~]#vim /etc/security/limits.conf #修改配置檔案.永久設定
.. ..
 *   soft nofile 100000 
 *   soft nofile 100000
4)優化後測試伺服器併發量(因為客戶端沒調核心引數,所以在proxy測試)
[[email protected] ~]# ab -n 2000 -c 2000 http://192.168.4.5/   #正常顯示頁面

4,優化Nginx資料包頭快取
1)優化前,使用指令碼測試長頭部請求是否能獲得響應
[[email protected] ~]# cat lnmp_soft/buffer.sh
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL //經過5000次迴圈後,生成一個長的URL位址列
[[email protected] ~]# ./buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center> //提示頭部資訊過大
2)修改Nginx配置檔案,增加資料包頭部快取大小
[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
  client_header_buffer_size 1k; //預設請求包頭資訊的快取
  large_client_header_buffers 4 1m; //大請求包頭部資訊的快取個數與容量,生產環境設定 4 4k  就夠用了 
.. ..
}
[[email protected] ~]# nginx -s reload
3)優化後,使用指令碼測試長頭部請求是否能獲得響應
[[email protected] ~]#cat cat buffer.sh
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL
[[email protected] ~]# ./buffer.sh

5,設定瀏覽器本地快取靜態資料
1)修改Nginx配置檔案,定義對靜態頁面的快取時間
[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; //定義客戶端快取時間為30天
}
}
[[email protected] ~]# cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html
[[email protected] ~]# nginx -s reload
2)優化後,使用Firefox瀏覽器訪問圖片,再次檢視快取資訊
[[email protected] ~]# firefox http://192.168.4.5/day.jpg
在Firefox位址列內輸入about:cache,檢視本地快取資料,檢視是否有圖片以及過期時間是否正確。

6,nginx日誌切割
思路:

  1. 把舊的日誌重新命名
    2.kill USR1 PID(nginx的程序PID號)
    1)手動執行
    備註:/usr/local/nginx/logs/nginx.pid檔案中存放的是nginx的程序PID號。
    [[email protected] ~]#mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access2.log
    [[email protected] ~]#kill -USR1 $(cat /usr/local/logs/nginx.pid) #檢查日誌檔案,重新生成access.log/error.log檔案
    2)自動完成
    設定每週6的03點03分自動執行指令碼完成日誌切割工作。
    [[email protected] ~]# vim /usr/local/nginx/logbak.sh //編寫指令碼
    #!/bin/bash
    date=$(date +%Y%m%d)
    logpath=/usr/local/nginx/logs
    mv $(logpath)/access.log $(logpath)/access-$(date).log
    mv $(logppath)/error.log $(logpath)/error-$(date).log
    kill -USR1 $(cat $logpath/nginx.pid)
    [[email protected] ~]# crontab -e #對當前使用者書寫計劃任務(一般是管理員)
    03 03 6 /usr/local/nginx/logbak.sh

7,對頁面進行壓縮處理
提示:對多媒體檔案不要壓縮,一般應用於圖片,樣式,js等
1)修改nginx配置檔案
[[email protected] ~]# cat /usr/local/nginx/conf/nginx.conf
http {
.. ..
gzip on; //開啟壓縮
gzip_min_lenght 1000; //當返回內容大於此值時才會使用gzip進行壓縮,以K為單位,當值為0時,所有頁面都進行壓縮
gzip_comp_level 4; //壓縮比率(1-9),數字越高,花費時間越多,壓縮效率越好,一般選中間
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
//對特定檔案壓縮,型別參考mime.types,位置:/usr/local/nginx/conf/mime.types
.. ..
}

8,伺服器記憶體快取
如果需要處理大量靜態檔案,可以將檔案快取在記憶體,下次訪問會更快。
#vim /usr/local/nginx/conf/nginc.conf
http{
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off; //關閉快取過期報錯

//設定伺服器最大快取2000個檔案控制代碼,關閉20秒內無請求的檔案控制代碼

//檔案控制代碼的有效時間是60秒,60秒後過期
//只有訪問次數超過5次會被快取
}