Nginx优化方案
目錄
一、Nginx返回錯誤頁面
1、HTTP常見狀態代碼列表
二、Nginx狀態頁面
1、安裝status模塊
2、激活status
三、優化并發連接數
1、壓力測試軟件ab(http-tools)
2、優化并發連接數
2.1、修改nginx并發數
2.2、修改內核最大文件數量
四、Nginx日志分割
五、開啟gzip壓縮
六、開啟文件緩存
一、Nginx返回錯誤頁面
1、HTTP常見狀態代碼列表
| 返回碼 | 描述 |
| 200 | 一切正常? ? ? ? ? ?? |
| 400 | 請求語法錯誤 |
| 401 | 訪問被拒絕(賬號或密碼錯誤) |
| 403 | 資源不可用,通常由于服務器上文件或目錄的權限設置導致 |
| 403 | 禁止訪問:如客戶端的IP地址被拒絕,無法驗證密碼 |
| 404 | 無法找到指定位置的資源(Not found) |
| 414 | 請求URL頭部太長 |
| 500 | 服務器內部錯誤 |
| 502 | 服務器作為網關或者代理時,為了完成請求訪問下一個服務器,但該服務器返回了非法的應答(Bad Gatwway) |
2、自定義錯誤返回頁面
vim /usr/local/nginx/conf/nginx.conf默認nginx.conf的server下面都有個注釋的error_page配置,取消注釋,更改為自定義頁面或圖片就行了:
server {
? ? ? ? listen ? ? ? 80;
? ? ? ? server_name ?localhost;
? ? ? ? #charset koi8-r;
? ? ? ? #access_log ?logs/host.access.log ?main;
? ? ? ? location / {
? ? ? ? ? ? root ? html;
? ? ? ? ? ? index ?index.html index.htm;
? ? ? ? }
? ? ? ? error_page ?404 ? ? ? ? ? ? ?/my404.html;? ? #html可以自定義,但要實際存在
? ? ? ? #error_page ?404 ? ? ? ? ? ? ?/my404.jpg;? ? ?#也可以顯示圖片,選用一個即可
? ? ? ? # redirect server error pages to the static page /50x.html
? ? ? ? #
? ? ? ? error_page ? 500 502 503 504 ?/50x.html;
? ? ? ? location = /50x.html {
? ? ? ? ? ? root ? html;
? ? ? ? }
... ...
}
【注】:上面的my404.html和my404.jpg文件前面的“/”不是系統的跟目錄,而是nginx的html的根目錄,即/usr/local/nginx/html/下
/usr/local/nginx/sbin/nginx -s reload客戶端測試:訪問一個不存在的地址:
?返回圖片:
二、Nginx狀態頁面
1、安裝status模塊
nginx編譯安裝時./confiugre后面需要添加--with-http_stub_status_module開啟模塊功能,該模塊可以查看Nginx連接數等信息
Nginx安裝參考:Nginx安裝、升級與基礎配置_桂安俊@kylinOS的博客-CSDN博客
2、激活status
vim /usr/local/nginx/conf/nginx.conf新增一個location,用于訪問status:
server {
? ? ? ? listen ? ? ? 80;
? ? ? ? server_name ?localhost;
? ? ? ??
? ? ? ? location /status {
? ? ? ? ? ? stub_status on;
? ? ? ? ? ? #allow? IP;? ? ?#可設置限制訪問
? ? ? ? ? ? #deny all;
? ? ? ? }
? ? ? ? location / {
? ? ? ? ? ? root ? html;
? ? ? ? ? ? index ?index.html index.htm;
? ? ? ? }
客戶端測試:瀏覽器訪問192.168.1.20/status
【參數說明】:
Active connections:當前活動的連接數量,實時并發量
Accepts:已經接受客戶端的連接總數量,三次握手建立
Handled:已經處理客戶端的連接總數量,一般與accepts一致,除非服務器限制了連接數量
Requests:客戶端發送的請求數量
Reading:當前服務器正在讀取的客戶端請求頭的數量
Writing:當前服務器正在寫響應信息的數量
Waiting:當前多少客戶端在等待服務器的響應
三、優化并發連接數
1、壓力測試軟件ab(http-tools)
yum -y install httpd-tools#-c后面代表總人數,-n后面代表總訪問量,如下即模擬100個人共訪問100次,即平均一人訪問一次 #所以-c的值必須要大于等于-n的值,不然會報語法錯誤,且網址最后面必須以“/”斜線結尾,否則也會報語法錯誤 ab -c 100 -n 100 http://192.168.1.20/ab -c 2000 -n 2000 http://192.168.1.20/測試:
100人100次模擬訪問:
ab -c 100 -n 100 http://192.168.1.20/2000人2000次模擬訪問:
ab -c 2000 -n 2000 http://192.168.1.20/?如上可以看到2000人2000次訪問報錯了,這時候就需要優化Nginx,以滿足更高并發量。
2、優化并發連接數
2.1、修改nginx并發數
vim /usr/local/nginx/conf/nginx.confworker_processes? 2;? ? ? ? ? ? ? ? ? ? #啟動多少個nginx worker進程,需要與CPU核心數量一致
events {
? ? worker_connections? 50000;? ? ?#每個nginx worker進程能夠支持的最大并發連接數量
}
2.2、修改內核最大文件數量
除此以外還要修改內核參數,修改最大文件數量:
ulimit -a?可以看到默認最大文件打開數是1024。
a、臨時修改:
ulimit -n 100000 #臨時修改最大文件打開數,重啟系統失效b、永久修改:
vim /etc/security/limits.conf #永久修改,需重啟生效新增如下內容:
*? ? ? ? ? ?soft? ? ? ? nofile? ? ? ?100000
*? ? ? ? ? ?hard? ? ? ?nofile? ? ? ?100000
#格式說明:用戶或組? ?軟限制或硬限制? ?項目? ? 值
#其中soft軟限制是可以突破的,hard硬限制是不可以突破的,nofile代表最大文件打開數量
再次客戶端高并發測試,可以完成2000并發:
ab -c 2000 -n 2000 http://192.168.1.20/四、Nginx日志分割
腳本日志切割
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 $logpath/error.log $logpath/error-$date.log kill -USR1 $(cat $logpath/nginx.pid) #這里的kill不是殺死進程,是生成新的日志文件設置定時任務,比如每周五03點03分自動執行腳本完成日志切割:
crontab -e 03 03 * * 5 /usr/local/nginx/logbak.sh五、開啟gzip壓縮
如果是訪問很多圖片內容網站,如果不壓縮,直接不壓縮傳遞,就會占用很多流量并且傳輸很慢。
開啟壓縮功能:
http {... ...gzip? on;? ? ? ? #開啟壓縮gzip_min_length 1000;? ? ? ? #小文件不壓縮,如滿足1000字節之后才壓縮,小文件越壓縮反而越大gzip_comp_level? ?4;? ? ? ? ? ?#壓縮比率,壓縮比率太大會導致壓縮時間長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... ...}【注】mime.types說明,后面是文件格式類型,前面為對應gzip_types,填寫前面的:
【說明】這里是壓縮,解壓得話是瀏覽器完成,幾乎所有得瀏覽器都支持自動解壓。
六、開啟文件緩存
使用內存緩存磁盤中的文件,html頁面是存放在/usr/local/nginx/html目錄下的,這是存放在硬盤上的,如果把用戶經常訪問的html頁面緩存到內存中,那訪問速度可以更快。
修改如下,開啟文件緩存:
vim /usr/local/nginx/conf/nginx.conf http {... ...open_file_cache max=2000 inactive=20s; #設置服務器內存中最大緩存2000個句柄,關閉20秒內無請求的文件句柄,從內存中清除open_file_cache_valid 60s; #文件句柄的最長有效時間是60秒,60秒后過期,不管是不是一直被訪問,這樣防止硬盤html修改了內容,但是一直緩存在內存中的html沒有更新,導致用戶訪問的頁面一直沒更新open_file_cache_min_uses 5; #只有訪問次數超過5次會被緩存open_file_cache_errors off; #內存緩存html過期,用戶訪問內存html找不到會報錯,但是硬盤html是有的,這里是關閉緩存文件錯誤... ... }總結
- 上一篇: LightningChart-3D图表特
- 下一篇: Nginx 优化与防盗链