Nginx既可作為web server,也可作為反向proxy,這裡先討論作為web server的一般性優化要點。
常用優化要點
nginx使用的是固定數量的workers, 每個worker都處理進入的請求。最佳實踐是每個CPU內核配置一個worker.
如何知道您的系統有幾個CPU?
- $ grep ^processor /proc/cpuinfo | wc -l
對於一個四核處理器,配置文件類似:
# One worker per CPU-core.
- worker_processes 4;
- events {
- worker_connections 8096;
- multi_accept on;
- use epoll;
- }
- worker_rlimit_nofile 40000;
- http {
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 15;
- # Your content here ..
- }
這裡我們提高了 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_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
- gzip_disable "MSIE [1-6]\.";
上面配置,只對文件大於10k的文本文件進行壓縮。
客戶端緩存
如果客戶端(一般是浏覽器)認為已經保存了要下載的最新內容,就不會向nginx服務器再發請求。
這需要做一些緩存設置。最簡單的辦法是將所有的圖片,js等靜態內容設置一個固定的時間長度:
- location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
- access_log off;
- log_not_found off;
- &nb