高并发环境下的Nginx该如何优化,让用户再也不会说卡
生活随笔
收集整理的這篇文章主要介紹了
高并发环境下的Nginx该如何优化,让用户再也不会说卡
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Nginx相關(guān)性能優(yōu)化
- 一、考慮方面:
- 二、壓力測試工具 ab ——評估服務(wù)能承載的并發(fā)
- 三、系統(tǒng)性能優(yōu)化
- 1、文件句柄
- 2、文件句柄的設(shè)置方式:
- ①、系統(tǒng)全局設(shè)置(針對root用戶)
- ②、用戶局部修改(針對有所用戶)
- ③、進程局部性修改(核心模塊,針對nginx進程:在nginx配置文件中添加[/etc/nginx/nginx.conf])
- ④、調(diào)整內(nèi)核參數(shù):讓time_wait狀態(tài)重用
- 四、代理服務(wù)優(yōu)化
- 1、可加項:
- 2、Keepalive_requests
- 3、Keepalive_timeout
- 五、靜態(tài)資源優(yōu)化
- 5.1、靜態(tài)資源緩存
- ①、開啟瀏覽器緩存:
- ②、關(guān)閉瀏覽器緩存:
- 5.2、靜態(tài)資源高效讀取
- ①、sendfile(默認開啟)
- ②、tcp_nopush(默認關(guān)閉)
- ③、提高網(wǎng)絡(luò)的實時性,需要開啟keepalive
- 5.3、靜態(tài)資源壓縮
- 5.4、防止資源盜鏈
- 5.5、允許跨域訪問(多路復(fù)用)
- ①、什么是跨域訪問?
- ②、Nginx允許跨站訪問與瀏覽器的關(guān)系:
- 5.6、CPU親和配置
- Nginx安全與優(yōu)化總結(jié)
一、考慮方面:
- 【1】硬件方面:CPU、磁盤、IO、內(nèi)存(負載、內(nèi)存、系統(tǒng)穩(wěn)定性、使用率、是否有損壞)
- 【2】網(wǎng)絡(luò)方面:網(wǎng)絡(luò)流量是否有延遲、是否丟包
- 【3】系統(tǒng)方面:文件描述符(文件句柄)【默認讀取文件的時候都會占用文件描述符,系統(tǒng)默認是1024個,可進行調(diào)整】
- 【4】應(yīng)用方面:保持長鏈接http協(xié)議和time_wait
- 【5】服務(wù)方面:靜態(tài)資源服務(wù)優(yōu)化
二、壓力測試工具 ab ——評估服務(wù)能承載的并發(fā)
ab -n 1000 -c 100 https://www.lucien.com/ -n為指定總共發(fā)送多少個請求 -c指定每次發(fā)送多少個請求三、系統(tǒng)性能優(yōu)化
1、文件句柄
- linux中一切皆文件,文件句柄就像是數(shù)據(jù)庫中的索引一樣,會隨著我們進程的調(diào)用頻繁增加,默認是有上限的,不能讓一個進程無限制使用,所以我們需要限制每個進程和服務(wù)的最大文件句柄數(shù)量。
2、文件句柄的設(shè)置方式:
①、系統(tǒng)全局設(shè)置(針對root用戶)
root soft nofile 25535 root hard nofile 65535②、用戶局部修改(針對有所用戶)
* soft nofile 65535 * hard nofile 65535③、進程局部性修改(核心模塊,針對nginx進程:在nginx配置文件中添加[/etc/nginx/nginx.conf])
worker_rlimit_nofile 65535ulimit -n 可進行查看文件句柄數(shù) Vim /etc/security/limits.conf 有個 nofile -----》即為文件句柄數(shù)當文件句柄不足時,系統(tǒng)會進行提示:Too many open files④、調(diào)整內(nèi)核參數(shù):讓time_wait狀態(tài)重用
vim /etc/sysctl.conf #如果沒有啟用,則只有等到time_wait狀態(tài)端口釋放后,才能重新使用 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_timestamps = 1 (時間戳)[root@node1 ~]# sysctl -p 進行查看我們自己添加的參數(shù) [root@node1 ~]# sysctl -a 查看所有的內(nèi)核參數(shù)四、代理服務(wù)優(yōu)化
- 通常nginx作為代理服務(wù),負責轉(zhuǎn)發(fā)用戶請求,那么在轉(zhuǎn)發(fā)的過程中建議開啟HTTP長連接,用于減少握手次數(shù),降低服務(wù)器消耗。
1、可加項:
#設(shè)置連接web超時時間 proxy_connect_timeout 30s;#代理等待web響應(yīng)超時時間 proxy_read_timeout 30s;#web回傳數(shù)據(jù)至代理超時時間 proxy_send_timeout 30s;#開啟代理緩沖區(qū),web回傳數(shù)據(jù)至緩沖區(qū),代理邊收邊傳返回給客戶端 proxy_buffering on;#代理接收web響應(yīng)的頭信息的緩沖區(qū)大小 proxy_buffer_size 32k;#緩沖代理接收單個長連接內(nèi)包含的web響應(yīng)的數(shù)量和大小 proxy_buffers 4 128k;2、Keepalive_requests
- Keepalive_requests設(shè)置通過一個keepalive連接提供的最大請求數(shù),在發(fā)出最大請求后,將關(guān)閉連接
3、Keepalive_timeout
- Keepalive_timeout設(shè)置超時時間,在此期間與代理服務(wù)器的空閑keepalive連接將保持打開狀態(tài)
五、靜態(tài)資源優(yōu)化
- Nginx作為靜態(tài)資源web服務(wù)器,用于靜態(tài)資源處理,傳輸很高效
| 瀏覽器渲染 | HTML、CSS、JS |
| 圖片文件 | JPEG、GIF、PNG |
| 視頻文件 | FLV、Mp4、AVI |
| 其他文件 | TXT、DOC、PDC |
5.1、靜態(tài)資源緩存
①、開啟瀏覽器緩存:
server { Listen 80; server_name www.lucien.com; Location ~ .*\.(jpg|gif|png)$ { expires 7d; } }②、關(guān)閉瀏覽器緩存:
Location ~ .*\.(jpg|gif|png)$ { add_header Cache-Control no-store; add_header Pragma no-cache; }5.2、靜態(tài)資源高效讀取
①、sendfile(默認開啟)
- 傳統(tǒng)文件讀取過程:
file --> 內(nèi)核空間調(diào)取 --> 應(yīng)用程序(用戶空間) --> 程序用戶空間 -->內(nèi)核空間 --> socket服務(wù) - Sendfile讀取方式:
file --> 內(nèi)核空間調(diào)取 --> socket服務(wù)
②、tcp_nopush(默認關(guān)閉)
- 將多個包一次發(fā)送,用于提升網(wǎng)絡(luò)傳輸效率,大文件推薦打開,需要開啟sendfile才能使用(就像送快遞一樣,大量的同地區(qū)的快遞,可進行一起運輸,達到高效送貨目的)
③、提高網(wǎng)絡(luò)的實時性,需要開啟keepalive
- 就像宅急送一樣,你不能像送其他外賣一樣,順路接了其他單子再送我的外賣,而是拿到我的外賣就直接給我送過來,這就是實時性。
5.3、靜態(tài)資源壓縮
- Nginx將響應(yīng)報文發(fā)送至客戶端之間啟用壓縮功能,然后進行傳輸,這能夠有效的節(jié)約帶寬,并提高響應(yīng)至客戶端的速度。
- ①、gzip傳輸壓縮,傳輸前壓縮,傳輸后解壓
- ②、gzip壓縮哪些類型的文件
- 可在nginx目錄下的mime.types 里查找你需要壓縮的類型,然后在nginx.conf配置文件進行添加
- ③、gzip壓縮比率,加快傳輸,但壓縮本身比較耗費服務(wù)端性能
- ④、gzip壓縮協(xié)議版本,壓縮使用在http哪個協(xié)議,主流1.1版本
5.4、防止資源盜鏈
- 防盜鏈,指的是防止資源被其他網(wǎng)站惡意盜用。
- 基礎(chǔ)防盜鏈設(shè)置思路:針對客戶端請求中攜帶的header信息來驗證請求的合法性,比如客戶端請求中攜帶referer信息。
- 優(yōu)點是:規(guī)則簡單,配置和使用都很方便。
- 缺點是:防盜鏈所依賴的referer驗證信息是可以偽造的,所以通過referer信息防盜鏈并非100%可靠,但是能限制大部分盜鏈情況。
5.5、允許跨域訪問(多路復(fù)用)
①、什么是跨域訪問?
- 當我們通過瀏覽器訪問a網(wǎng)站時,同時會利用到ajax或其他方式,同時也請求b網(wǎng)站,這樣就出現(xiàn)了請求一個界面,使用了2個域名,這種方式對瀏覽器來說默認是禁止。
②、Nginx允許跨站訪問與瀏覽器的關(guān)系:
- 瀏覽器會讀取Access-Control-Origin的頭信息,如果服務(wù)端允許,則瀏覽器不會進行攔截。
5.6、CPU親和配置
- CPU親和:減少進程之間不斷的頻繁切換,減少性能的損耗,其實現(xiàn)原理是將CPU核心和Nginx工作進程綁定方式,把每個worker進程固定對應(yīng)的cpu上執(zhí)行,減少切換cpu的cache miss,獲得更好的性能。
- ①、查看CPU物理狀態(tài):lscpu,進行建議查看
- ②、將Nginx worker進程綁定不同核心(官方建議與cpu核心保持一致)
- 方式一:
worker_processes 24;
worker_cpu_affinity 000000000001 000000000002 000000000003 000000000004; - 方式二:(使用較少)
worker_processes 2;
worker_cpu_affinity 101010101010 010101010101; - 方式三:(最佳綁定方式)
worker_processes auto;
worker_cpu_affinity auto;
- 方式一:
- ③、查看nginx worker 進程綁定至對應(yīng)cpu
ps -eo pid,args,psr | grep [n]ginx
Nginx安全與優(yōu)化總結(jié)
- 【1】、cpu親和、worker進程數(shù)、調(diào)整每個worker進程打開的文件數(shù)
- 【2】、使用epoll網(wǎng)絡(luò)模型、調(diào)整每個worker進程的最大連接數(shù)
- 【3】、文件的高效讀取sendfile、nopush
- 【4】、文件的傳輸實時性、nodealy
- 【5】、開啟tcp長連接/以及長連接超時時間keepalived
- 【6】、開啟文件傳輸壓縮
- 【7】、開啟靜態(tài)文件expires緩存
- 【8】、隱藏nginx版本號
- 【9】、禁止通過ip地址訪問,禁止惡意域名解析,只允許域名訪問
- 【10】、配置防盜鏈以及跨域訪問
- 【11】、防DDOS、CC攻擊,限制單IP并發(fā)連接以及http請求
- 【12】、優(yōu)雅限制nginx錯誤頁面
- 【13】、Nginx加密傳輸https優(yōu)化
- 【14】、Nginx proxy_cache、fastcgi_cache、uwsgi_cache緩存
總結(jié)
以上是生活随笔為你收集整理的高并发环境下的Nginx该如何优化,让用户再也不会说卡的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存频率3200MHz,让你的电脑秒变飞
- 下一篇: Nginx —— 检查配置文件ngi