# Nginx服務器怎么優化
## 前言
Nginx作為高性能的Web服務器和反向代理服務器,在現代互聯網架構中扮演著重要角色。隨著業務量的增長,合理的優化配置可以顯著提升服務器性能、降低資源消耗并增強安全性。本文將系統性地介紹Nginx服務器的優化策略,涵蓋配置調優、性能優化、安全加固等方面。
---
## 一、基礎配置優化
### 1. 調整工作進程和工作連接
```nginx
worker_processes auto; # 自動匹配CPU核心數
worker_rlimit_nofile 100000; # 每個worker能打開的文件描述符上限
events {
worker_connections 4096; # 每個worker的最大連接數
use epoll; # Linux系統推薦使用epoll模型
multi_accept on; # 一次性接受所有新連接
}
優化說明:
- worker_processes
建議設為CPU核心數(可通過nproc
查詢)
- 文件描述符限制需大于worker_connections × worker_processes
http {
sendfile on; # 啟用零拷貝傳輸
tcp_nopush on; # 僅在sendfile開啟時有效,優化數據包發送
tcp_nodelay on; # 禁用Nagle算法,提升實時性
}
keepalive_timeout 65; # 長連接保持時間
keepalive_requests 1000; # 單個長連接最大請求數
client_header_timeout 15s; # 請求頭讀取超時
client_body_timeout 15s; # 請求體讀取超時
send_timeout 10s; # 響應發送超時
server {
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d; # 緩存有效期
access_log off; # 關閉日志記錄
add_header Cache-Control "public";
}
}
gzip on;
gzip_min_length 1k; # 最小壓縮文件大小
gzip_comp_level 6; # 壓縮級別(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_vary on; # 根據Accept-Encoding頭返回不同內容
upstream backend {
least_conn; # 最少連接算法
server 192.168.1.1:8080 weight=5;
server 192.168.1.2:8080;
keepalive 32; # 保持的長連接數
}
server {
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
aio threads; # 異步文件IO
directio 4m; # 大于4M的文件使用直接IO
open_file_cache max=10000 inactive=30s; # 文件描述符緩存
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
server_tokens off; # 響應頭中隱藏版本號
limit_except GET POST PUT DELETE {
deny all;
}
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time"';
access_log /var/log/nginx/access.log main buffer=32k flush=1m;
建議: - 生產環境建議日志輪轉(使用logrotate) - 高并發場景可考慮關閉access_log
load_module modules/ngx_http_brotli_filter_module.so; # 示例:Brotli壓縮模塊
# 添加到/etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_tw_reuse = 1
server {
request_pool_size 4k; # 每個請求內存池大小
output_buffers 4 32k; # 輸出緩沖區配置
}
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.0/24;
deny all;
}
輸出示例:
Active connections: 3
server accepts handled requests
100 100 200
Reading: 0 Writing: 1 Waiting: 2
perf record -p <nginx_worker_pid>
nginx -t
tail -f /var/log/nginx/error.log
可能原因: 后端服務超時
解決方案:
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
解決方案:
server {
listen 80 reuseport; # Linux 3.9+支持
}
優化方向:
- 檢查worker_connections
是否足夠
- 增加worker_processes
- 考慮啟用zone
共享內存
通過本文介紹的優化措施,您可以使Nginx服務器達到最佳性能狀態。實際優化時需要根據具體業務場景進行測試和調整,建議每次只修改一個參數并通過壓測工具(如wrk、ab)驗證效果。持續的監控和適時的調整是保持服務器高性能的關鍵。
推薦進一步優化工具: - JMeter:全面性能測試 - WebPageTest:前端性能分析 - Varnish:專業級緩存加速
注:所有配置修改后需執行
nginx -s reload
生效 “`
該文章共計約4150字,完整覆蓋了Nginx優化的核心要點。實際部署時建議根據服務器硬件配置和業務特點進行針對性調整。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。