1. 调整工作进程与连接数
worker_processes:设置为CPU核心数或auto(自动适配核心数),充分利用多核CPU资源。worker_connections:每个工作进程允许的最大并发连接数,需结合服务器内存调整(如worker_connections 65535;)。worker_rlimit_nofile:增加单个进程可打开的最大文件数(如worker_rlimit_nofile 65535;),避免“too many open files”错误。2. 优化事件处理模型
events模块中,使用epoll(Linux高并发首选模型),并开启multi_accept(一次性接受多个新连接),提升并发处理能力。events {
use epoll;
worker_connections 65535;
multi_accept on;
}
3. 启用高效传输与压缩
sendfile on:使用sendfile系统调用直接传输文件,减少内核空间与用户空间的数据拷贝。tcp_nopush on:配合sendfile使用,在数据包填满时才发送,提升传输效率。gzip on:启用Gzip压缩(针对text/plain、text/css、application/json等静态资源),减少网络传输量(建议设置gzip_min_length 1k,避免小文件压缩反而增加开销)。1. 静态文件缓存
expires头(如expires 30d;),告知浏览器缓存文件,减少后续请求的服务器负载。add_header Cache-Control "public",允许公共缓存(如CDN节点缓存)。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public";
}
2. 静态资源别名与路径优化
alias指令指定静态文件的真实路径(区别于root,alias会替换location匹配的部分):location /static/ {
alias /var/www/static_files/;
}
try_files指令尝试按顺序查找文件(如先找$uri,再找$uri/,最后返回404),避免不必要的if判断:location / {
try_files $uri $uri/ =404;
}
1. PHP请求处理
location ~ \.php$块配置PHP-FPM交互,关键参数:
fastcgi_pass:指向PHP-FPM监听地址(如127.0.0.1:9000或Unix socketunix:/run/php/php8.2-fpm.sock)。fastcgi_param SCRIPT_FILENAME:设置脚本文件路径($document_root$fastcgi_script_name),确保Nginx能找到并执行PHP文件。location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
2. 避免动态内容直接暴露
1. 使用upstream模块分发请求
proxy_pass将请求分发至组内服务器。round-robin(默认,轮询):均匀分配请求。least_conn(最少连接):将请求分发给当前连接数最少的服务器。ip_hash(IP哈希):根据客户端IP分配,保证同一IP的请求始终到达同一服务器(适用于有状态应用,如会话保持)。upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com backup; # 备用服务器
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2. 健康检查(可选)
ngx_http_health_check_module等第三方模块,定期检查后端服务器的健康状态,自动剔除故障节点。1. 启用HTTP/2
listen指令中添加http2,提升多路复用性能(减少连接开销):server {
listen 443 ssl http2;
# SSL证书配置...
}
2. 优化加密配置
TLSv1.2及以上):ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5:!RC4:!3DES;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
3. 证书管理
certbot工具自动续期),避免证书过期导致的连接错误。1. 日志分级与缓冲
location ~* \.(jpg|jpeg|png|gif)$ {
access_log off;
}
buffer和flush参数),批量写入磁盘:access_log /var/log/nginx/access.log combined buffer=32k flush=300s;
2. 日志格式优化
combined格式(包含客户端IP、请求时间、响应状态、Referer等信息),便于后续分析(如通过AWK、ELK提取关键指标)。1. 限制请求频率
limit_req_zone和limit_req指令,防止恶意请求(如DDoS、爬虫):limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=10r/s;
location /api/ {
limit_req zone=req_per_ip burst=20 nodelay;
proxy_pass http://backend;
}
2. 隐藏Nginx版本信息
http、server或location块中添加server_tokens off;,避免泄露Nginx版本号(减少针对性攻击)。3. 限制访问来源
allow/deny指令限制特定IP访问敏感路径(如后台管理页面):location /admin/ {
allow 192.168.1.0/24;
deny all;
}
4. 禁用危险指令
if语句(影响性能且易引发安全问题),用try_files、return等替代。1. 配置文件验证
nginx -t命令检查语法是否正确(避免因语法错误导致服务中断)。2. 平滑重载配置
nginx -s reload命令重新加载配置(无需重启服务,保持现有连接不中断)。3. 备份配置文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak),便于故障恢复。以上技巧覆盖了LNMP环境下Nginx配置的核心场景,可根据实际业务需求(如流量规模、应用类型)调整参数,提升Web服务的性能、稳定性与安全性。