天天看點

nginx管理配置優化

nginx優化

優化思路

nginx管理配置優化

基本優化

1、調整參數隐藏nginx軟體版本号資訊

server_tokens off;
           

2、更改nginx服務預設使用者

user nginx nginx;
           

3、優化nginx服務的worker程序個數

worker_processes cpu*核數;
           

4、優化綁定不同的nginx程序到不同的cpu上

worker_cpu_affinit 0001 0010 0100 1000 0001 0010 0100 1000;
           

5、nginx時間處理模型優化

use epoll
           

6、調整單程序最大連接配接數,每 個 程序 允許 的最 多連 接 數, 理論 上每 台 nginx 服 務 器的 最大 連接配接 數為

worker_processes*worker_connections

worker_connections 20480;
           

7、nginx work程序最大打開檔案數,這個指令是指當一個 nginx 程序打開的最多檔案描述符數目,理論值應該是最多打開檔案數(

ulimit -n

)與

nginx

程序數相除,但是 nginx 配置設定請求并不是那麼均勻,是以最好與

ulimit -n

的值保持一緻。

worker_rlimit_nofile 65535;
           

8、開啟高效檔案傳輸模式

用于開啟檔案的高效傳輸模式,同時将tcp_nopush和tcp_nodelay兩個指令設定為on,可以防止網絡及磁盤I/O阻塞,提升nginx工作效率。

9、優化連接配接逾時時間

10、fastCGI優化

11、配置nginx gzip壓縮實作性能優化

gzip on;
gzip_min_length k;
gzip_buffers  k;
gzip_comp_level ;
gzip_vary on;
           

12、配置nginx expires緩存實作性能優化

nginx expires 3650d;
           

13、nginx日志相關優化與安全

14、根據拓展名限制程式和檔案通路。

dell all;
allow all;
           

15、防盜鍊

16、用戶端請求頭部的緩沖區大小,這個可以根據你的系統分頁大小來設定,一般一個請求頭的大小不會超過 1k,不過由于一般系統分頁都要大于 1k,是以這裡設定為分頁大小。分頁大小可以用指令

getconf PAGESIZE

取得。

[root@k8s-node01 local]# getconf PAGESIZE


client_header_buffer_size k; 
           

17、打開檔案指定緩存,預設是沒有啟用的,max 指定緩存數量,建議和打開檔案數一緻,inactive 是指經過多長時間檔案沒被請求後删除緩存。

18、多長時間檢查一次緩存的有效資訊,open_file_cache 指令中的 inactive 參數時間内檔案的最少使用次數,如果超過這個數字,檔案描述符一直是在緩存中打開的,如上例,如果有一個檔案在 inactive 時間内一次沒被使用,它将被移除。

open_file_cache_min_uses 1; 
           

系統層面優化

1、系統層面優化

echo  > /proc/sys/net/core/somaxconn   //web 應用中 listen 函數的 backlog 預設會給我們核心參數的 net.core.somaxconn 限制到,而 nginx 定義的 NGX_LISTEN_BACKLOG 預設為 ,是以有必要調整這個值。 
net.core.netdev_max_backlog =  
echo  > /proc/sys/net/ipv4/tcp_tw_recycle  //加快tcp回收
echo  > /proc/sys/net/ipv4/tcp_tw_reuse    //空的tcp允許回收利用
echo  > /proc/sys/net/ipv4/tcp_syncookies  //關閉洪水抵禦
           

優化timewait數量,預設是 180000。

net.ipv4.tcp_max_tw_buckets =  
           

允許系統打開的端口範圍

net.ipv4.ip_local_port_range =      
           

啟用 timewait 快速回收

net.ipv4.tcp_tw_recycle =  
           

開啟 SYN Cookies,當出現 SYN 等待隊列溢出時,啟用 cookies 來處理

net.ipv4.tcp_syncookies =  
           

開啟重用。允許将 TIME-WAIT sockets 重新用于新的 TCP 連接配接

net.ipv4.tcp_tw_reuse =  
           

每個網絡接口接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目

net.ipv4.tcp_max_orphans =  
           

記錄的那些尚未收到用戶端确認資訊的連接配接請求的最大值。對于有 128M 記憶體的系統而

言,預設值是 1024,小記憶體的系統則是 128。

net.ipv4.tcp_max_syn_backlog =  
           

2、nginx&php-fpm優化配置

nginx将請求轉發給php-fpm處理,當nginx轉發很多請求時,php-fpm程序不夠用,就會生成子程序。

然而生成子程序需要核心來排程,比較耗時。

如果網站并發比較大,可以用靜态方式一次性生成多個子程序,保持的記憶體中。

修改phjp-fpm.conf

pm=static //讓php-fpm程序始終保持,不需要動态生成
pm.max_children= 始終保持的子程序數量
           

3、php&mysql優化

核心層面:加大連接配接數,加快tcp回收

mysql層面:增大連接配接數

php層面:用長連接配接,節省連接配接數

用記憶體緩存(

memcached

),減輕mysql壓力

注意

記憶體緩存适用于緩存複雜的sql查詢。因為

php

memcached

也要建立tcp連接配接,是以簡單的sql查詢不需要用緩存。