日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

高并发环境下的Nginx该如何优化,让用户再也不会说卡

發(fā)布時間:2024/2/28 Nginx 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高并发环境下的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ù)器消耗。
vim /usr/local/nginx/conf/nginx.conf http {#配置負載均衡的服務(wù)器列表upstream tomcat_server {server 192.168.184.60:8080 ;Keepalive 16; #長連接}#配置Nginx處理動態(tài)頁面請求,將 .jsp文件請求轉(zhuǎn)發(fā)到Tomcat 服務(wù)器處理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;#設(shè)置后端的Web服務(wù)器可以獲取遠程客戶端的真實IP#設(shè)定后端的Web服務(wù)器接收到的請求訪問的主機名(域名或IP、端口),默認host的值為proxy_pass指令設(shè)置的主機名proxy_set_header HOST $host;#把$remote_addr賦值給X-Real-IP,來獲取源IPproxy_set_header X-Real-IP $remote_addr;#在nginx 作為代理服務(wù)器時,設(shè)置的IP列表,會把經(jīng)過的機器ip,代理機器ip都記錄下來proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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)資源處理,傳輸很高效
靜態(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。