Nginx 作為web server 的優化要點

2021-09-24 11:34:15 字數 2936 閱讀 5222

2019獨角獸企業重金招聘python工程師標準》

nginx使用的是固定數量的workers, 每個worker都處理進入的請求。最佳實踐是每個cpu核心配置乙個worker.

如何知道您的系統有幾個cpu?

$ grep ^processor /proc/cpuinfo | wc -l
對於乙個四核處理器,配置檔案類似:

這裡我們提高了worker_connections 設定,定義了每個worker程序能處理多少連線。伺服器的最大連線數量是:

worker_processes * worker_connections (= 32384 本例中)
這裡啟用了multi_accept,該配置項使nginx能盡快接收盡可能多的請求,減少客戶端的連線初始化時間。

最後,本例中使用了epoll的事件模型,這也是最佳實踐建議。

很多使用者會啟用 gzip壓縮模組,使得返回客戶端的內容更簡短,傳輸更快。

但是壓縮會消耗使用者伺服器資源,通過監控cpu使用率(可採用開源hyperic),如果過高,可以考慮禁用壓縮。

通常只壓縮大檔案,避免壓縮那些壓縮效果不好的檔案,例如,可執行檔案等二進位制檔案。

gzip  on;

gzip_vary on;

gzip_min_length 10240;

gzip_proxied expired no-cache no-store private auth;

gzip_disable "msie [1-6]\.";

上面配置,只對檔案大於10k的文字檔案進行壓縮。

這需要做一些快取設定。最簡單的辦法是將所有的,js等靜態內容設定乙個固定的時間長度:

location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$
這裡我們也禁用了**檔案的日誌,將一些檔案字尾檔案的過期時間設定為30天。

如果需要處理大量靜態檔案,需要保持這些檔案控制代碼為開啟狀態,避免後續再次開啟。

下面示例,既可放在nginx配置的 server 部分,也可放在主 http 塊中。:

open_file_cache          max=2000 inactive=20s;

open_file_cache_valid    60s;

open_file_cache_min_uses 5;

open_file_cache_errors   off;

這裡設定伺服器最大快取2000個開啟的檔案控制代碼,關閉20秒內無請求的檔案控制代碼,控制代碼的有效時間是60秒,並且只有訪問次數超過5次的才會被快取。這樣只快取頻繁訪問的檔案,降低檔案系統的訪問。

很多站點使用了php,例如drupal, wordpress。

由於nginx沒有自己的mod_php,推薦的方式是使用 php-fpm,需要將請求**,例如:

# execute all .php files via php-fpm

location ~ .php$ 

注意這裡使用了 unix domain-socket 連線 fpm, 所以需要修改/etc/php5/fpm/pool.d/www.conf 如下:

listen = /var/run/php5-fpm.sock
這保證fpm監聽乙個domain socket,而不是預設的( "listen=127.0.0.1:9000").

預設的php-fpm將啟動一些專用的worker,每個執行乙個php例項。如果記憶體足夠,可以增加worker數量來提公升併發吞吐量。

編輯檔案/etc/php5/fpm/pool.d/www.conf,改變量量,例如:

; set a fixed number of php workers

pm = static

; start up 12 php processes

pm.max_children = 12

該值需要根據實際環境調整。調整的依據是使用監控工具所採集的資料。

最後可配置php-fpm自動重啟。如果出現問題,例如下面的配置是,在1分鐘內十個子程序死掉,就重啟,允許程序有十秒失去控制。

下面是/etc/php5/fpm/php-fpm.conf 中的全域性配置:

emergency_restart_threshold 10

emergency_restart_interval 1m

process_control_timeout 10s

優化配置的效果需要實踐檢驗,建議部署乙個監控工具,監控的內容應包括:

nginx:開源版提供的監控指標,僅有如下6個:

從作業系統的角度:應包括nginx程序的cpu使用率,記憶體占用,整體cpu使用率,交換區使用率等指標。

如果是在虛擬機器上執行,還應關注 作業系統的 st( steal time)指標,判斷是否有超賣,過載等現象;

這裡推薦乙個免費開源工具, hyperic 

Nginx之 Nginx作為TCP負載均衡

這兩天考慮mysql的集群,考慮負載均衡,了解nginx在版本1.9.0以後支援tcp的負載均衡,具體可以參照官網關於模組ngx stream core module的敘述 nginx從1.9.0後引入模組ngx stream core module,模組是沒有編譯的,需要用到編譯需新增 with ...

利用Tomcat建立多個Web Server的方法

以下內容為網上收集後整理而成,如有錯誤或描述不準確的地方或是別的請多指教.當你使用tomcat作為web server的時候,是不是會想過這樣的乙個問題 如何利用tomcat建立多個web應用 呢?要實現這一點是很簡單的,也有多種方法。以下說明使用 tomcat home 代表tomcat安裝目錄 ...

利用Tomcat建立多個Web Server的方法

以下內容為網上收集後整理而成,如有錯誤或描述不準確的地方或是別的請多指教.當你使用tomcat作為web server的時候,是不是會想過這樣的乙個問題 如何利用tomcat建立多個web應用 呢?要實現這一點是很簡單的,也有多種方法。以下說明使用 tomcat home 代表tomcat安裝目錄 ...