nginx性能優化

nginx性能優化的一些方面

一、顯示版本號:不安全

curl -I    http://192.168.4.60,查看版本信息,

修改配置文件:

     http {

            server_tokens off;    //把nginx版本信息關掉了

二、併發量,linux系統內核和nginx配置文件

在nginx配置文件和系統內核中,對併發做了限制,現在來修改:

nginx配置文件:

         worker_processes  1;     //進程數,和CPU的內核相關

          events {

                       worker_connections  80000;

                  }


系統內核:(限制文件,進程,用戶數量)  ss -ntup | grep nginx   //查看實時併發數,最大支持2W

ulimit -a    //查看各限制的參數


ulimit  -Hn  100000        ulimit -Sn  100000      //在命令行修改

-s //軟限制 (普通用戶可以修改)n  最大文件數量

-H //硬限制  (普通用戶不可修改) n 最大文件數量

當前有效,重啓服務器後失效,要永久更改   vim /etc/security/limits.conf

      *              soft       nofile        100000    

      *              hard     nofile         100000

三、解決頭部信息過長,出現錯誤提示:414,緩存不夠

client_header_buffer_size     1k;             //默認請求包頭信息的緩存

large_client_header_buffers   4   1m;     //大請求包頭部信息的緩存個數與容量

四、nginx壓縮(速度,流量)

gzip on;           //開啓壓縮功能,所以瀏覽器都支持

gzip_min_length 1000;    //至少1000個字節才壓縮

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;    

 //對什麼格式的文件壓縮,一般選擇文檔壓縮:doc,html,css,php,pdf,xls

 mime.types     //支持文件壓縮格式的文件,可以在裏面查找相應的選項

五、用戶的瀏覽器緩存數據

nginx告訴瀏覽器,把所有的照片緩存30天,不會變化的數據,mp3,mp4,jpg

修改配置文件:

location / {

           root   html;

           index  index.html index.htm;

              }

       location     ~ \.(gpg|png)$      {

        expires  300d;                //自定義緩存300天

          }

六、自定義報錯頁面


charset UTF-8;                                     //   更改字符集

error_page   404              /error.html;   //自定義頁面

七、優化 Linux 內核參數

/etc/sysctl.conf是一個允許你改變正在運行中的Linux系統的接口。

它包含一些TCP/IP堆棧和虛擬內存系統的高級選項,可用來控制Linux網絡配置,

由於/proc/sys/net目錄內容的臨時性,建議把TCPIP參數的修改添加到/etc/sysctl.conf文件, 

然後保存文件,使用命令“/sbin/sysctl –p”使之立即生效。具體修改方案參照上文:


fs.file-max = 999999
#表示單個進程最大可以打開的句柄數;

net.ipv4.tcp_tw_reuse = 1
#參數設置爲 1 ,表示允許將TIME_WAIT狀態的socket重新用於新的TCP鏈接,

這對於服務器來說意義重大,因爲總有大量TIME_WAIT狀態的鏈接存在;

ner.ipv4.tcp_keepalive_time = 600
#當keepalive啓動時,TCP發送keepalive消息的頻度;

默認是2小時,將其設置爲10分鐘,可以更快的清理無效鏈接。

net.ipv4.tcp_fin_timeout = 30  
#當服務器主動關閉鏈接時,socket保持在FIN_WAIT_2狀態的最大時間

net.ipv4.tcp_max_tw_buckets = 5000
#這個參數表示操作系統允許TIME_WAIT套接字數量的最大值,

如果超過這個數字,TIME_WAIT套接字將立刻被清除並打印警告信息。
#該參數默認爲180000,過多的TIME_WAIT套接字會使Web服務器變慢。

net.ipv4.ip_local_port_range = 1024 65000  
#定義UDP和TCP鏈接的本地端口的取值範圍。

net.ipv4.tcp_rmem = 10240 87380 12582912  
#定義了TCP接受緩存的最小值、默認值、最大值。

net.ipv4.tcp_wmem = 10240 87380 12582912  
#定義TCP發送緩存的最小值、默認值、最大值。
net.core.netdev_max_backlog = 8096  
#當網卡接收數據包的速度大於內核處理速度時,

會有一個列隊保存這些數據包。這個參數表示該列隊的最大值。

net.core.rmem_default = 6291456  
#表示內核套接字接受緩存區默認大小。

net.core.wmem_default = 6291456  
#表示內核套接字發送緩存區默認大小。

net.core.rmem_max = 12582912  
#表示內核套接字接受緩存區最大大小。

net.core.wmem_max = 12582912 
#表示內核套接字發送緩存區最大大小。

注意:以上的四個參數,需要根據業務邏輯和實際的硬件成本來綜合考慮;

net.ipv4.tcp_syncookies = 1
#與性能無關。用於解決TCP的SYN***。

net.ipv4.tcp_max_syn_backlog = 8192
#這個參數表示TCP三次握手建立階段

接受SYN請求列隊的最大長度,默認1024,將其設置的大一些可以

使出現Nginx繁忙來不及accept新連接的情況時,Linux不至於丟失客戶端發起的鏈接請求。

net.ipv4.tcp_tw_recycle = 1  
#這個參數用於設置啓用timewait快速回收。

net.core.somaxconn=262114 
# 選項默認值是128,這個參數用於調節系統同時發起的TCP連接數,

在高併發的請求中,默認的值可能會導致鏈接超時或者重傳,因此需要結合高併發請求數來調節此值。

net.ipv4.tcp_max_orphans=262114  
#選項用於設定系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。

如果超過這個數字,孤立鏈接將立即被複位並輸出警告信息。

這個限制指示爲了防止簡單的DOS***,不用過分依靠這個限制甚至認爲的減小這個值,更多的情況是增加這個值。




























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章