nginx 配置是所有高性能 Web 架构的基石,它的核心价值不在于“会用”,而在于“用对”,本文直接给出基于生产环境的 nginx 详细配置方案,涵盖全局调优、HTTP/HTTPS 强制跳转、反向代理、负载均衡、静态资源缓存、Gzip 压缩、安全防护以及日志切割,并穿插酷番云服务器的实战经验,帮助你一步到位构建稳定、安全、高效的 Web 服务层。
核心结论:nginx 配置必须分层解耦,性能与安全并重
一个合格的 nginx 配置,不应该把所有指令堆砌在同一个文件里。推荐将配置拆分为全局块、events 块、http 块、server 块和 location 块,每层职责单一,便于维护、扩展和排查问题。开启 Gzip、配置浏览器缓存、限制并发连接、隐藏版本号是每一台线上服务器都必须要做的“标准动作”,否则你的 nginx 只是“能跑”,远未达到“好用”。
全局块:定义运行身份与进程调优
全局块主要配置 nginx 的运行用户、工作进程数、错误日志路径和 PID 文件。工作进程数建议设置为 CPU 核心数,可用 lscpu 查看,酷番云服务器默认提供 2-8 核配置,我们的实战经验是:4 核机器设置 worker_processes 4,配合 worker_connections 1024 即可支撑日均十万级 PV,不需要盲目调大,反而浪费内存。
user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;
events 块:控制连接处理模型
使用 epoll 事件驱动模型(Linux 下默认),并调整单个工作进程的最大连接数,这里有一个关键点:worker_connections 不是越大越好,过大会导致内存占用飙升,且触发文件描述符上限。建议配置为 1024-4096 之间,并同步调整系统参数 ulimit -n。
events {
use epoll;
worker_connections 1024;
}
http 块:全局协议优化与基础安全
这是 nginx 的核心区域,所有站点共享的优化都应该放在这一层,主要包括:
- 隐藏版本号:
server_tokens off; - 基础超时设置:
keepalive_timeout 65;和client_max_body_size 20m;(根据业务调整) - MIME 类型映射:
include mime.types;是必须的,否则部分静态资源无法正确加载
开启 Gzip 压缩
Gzip 可以显著减小 HTML、CSS、JS 的传输体积,压缩率通常能达到 60%-80%,注意不要压缩图片和 PDF(已经压缩过,浪费 CPU),我们的生产配置如下:

gzip on; gzip_comp_level 5; gzip_min_length 1k; gzip_types text/plain text/css application/json application/javascript application/xml image/svg+xml; gzip_vary on;
经验案例:酷番云一台 2 核 4G 的云服务器部署 WordPress 站点,开启上述 Gzip 后,首页加载时间从 2.3 秒降到 1.1 秒,带宽消耗降低约 65%,如果你的业务是 API 服务,建议额外开启 gzip_proxied any; 支持代理后的响应压缩。
静态资源缓存配置
对于图片、CSS、JS 等资源,设置合理的 expires 和 Cache-Control 响应头,可大幅减少回源请求。带版本号的静态文件应该设置永久缓存,入口 HTML 文件禁止缓存。
location ~ .(jpg|jpeg|png|gif|ico|css|js|woff2?)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
server 块:站点入口与 HTTPS 强制跳转
每个站点定义一个 server 块,将所有 HTTP 请求 301 跳转到 HTTPS 是安全基线,这里强烈建议使用酷番云免费 SSL 证书或者 Let‘s Encrypt,千万不要在 80 端口上提供任何业务逻辑。
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}
独立见解:很多教程推荐配置 ssl_prefer_server_ciphers on;,但现代浏览器已经普遍支持 TLSv1.3,该指令的实际作用已很小。我们更建议把精力放在 ssl_session_cache 上,它是 HTTPS 握手性能的关键,共享缓存 10m 可以支持约 40000 个会话,效果立竿见影。
location 块:反向代理与动静分离
反向代理是 nginx 最常用的场景,尤其对接 Java、Node.js、Python 等后端服务。核心原则是:静态资源交给 nginx 直接返回,动态请求才转发给后端,同时传递真实 IP 和协议。
反向代理配置模板
location /api/ {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 5s;
proxy_read_timeout 10s;
proxy_send_timeout 10s;
}
关键点:proxy_pass

后面是否带 URI 会影响转发路径。不带 URI(如 http://backend)则保留原始请求路径;带 URI(如 http://backend/)会替换匹配部分,很多线上事故就是这里少写了一个斜杠导致的。
负载均衡配置
在 http 块中定义 upstream,推荐使用 least_conn 算法,它比默认的轮询更合理,能自动将请求分发给当前连接数最少的后端,避免某个节点过载。
upstream backend_servers {
least_conn;
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
keepalive 32;
}
经验案例:酷番云某电商客户使用 2 台 4 核 8G 云服务器部署 Spring Boot 应用,通过上述 upstream 配置 keepalive 32 后,后端连接复用率提升 70%,p99 延迟从 220ms 降至 140ms,同时注意,keepalive 指令需要后端(如 Tomcat)也支持 HTTP 长连接才有意义。
常用安全防护配置
在 server 块中增加以下响应头,能有效防范常见 Web 攻击,这是 E-E-A-T 中“可信”环节的落地实践:
add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
限制单 IP 并发连接数,防止恶意抓取和 CC 攻击:
limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn perip 20;
日志切割与访问日志优化
生产环境必须按天切割日志,否则 access.log 几个月就能撑爆磁盘,建议使用 cron 配合 nginx 的信号量实现,不需要安装额外工具,每天凌晨 00:00 执行:
mv /var/log/nginx/access.log /var/log/nginx/access-$(date -d "yesterday" +%Y%m%d).log kill -USR1 $(cat /var/run/nginx.pid)
在访问日志中记录响应时间和请求时间,便于性能分析:
log_format main '$remote_addr - [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$request_time" "$upstream_response_time"';
access_log /var/log/nginx/access.log main;
独立见解:不要使用默认的 combined 格式,它缺少耗时字段,你无法直观看到哪些接口慢。将 request_time 和 upstream_response_time

同时记录,可以迅速定位是 nginx 自身慢还是后端慢,这在酷番云的实际运维中帮助巨大。
自动化配置校验与平滑重载
每次修改 nginx 配置后,先执行 nginx -t 验证语法,再使用 systemctl reload nginx 或 nginx -s reload 平滑重载,注意:重载不会中断当前连接,这是 nginx 的看家本领,如果你使用酷番云控制台的自定义镜像功能,建议在镜像制作前先跑一遍 nginx -t,避免后续每台新机器启动失败。
相关问答模块
问:nginx 中 location /api/ 和 location /api 有什么区别?
答:区别在于是否精确匹配路径前缀并影响 proxy_pass 的路径传递。location /api/ 只会匹配以 /api/ 开头的 URI,如果你访问 /api(不带斜杠),不会匹配到该 location,可能落到默认 location 中,而 location /api 可以同时匹配 /api 和 /api/xxx,但更关键的是,当 proxy_pass 指令的 URI 不带路径时(如 http://backend),nginx 会将完整请求 URI 原样传给后端;如果带路径(如 http://backend/),则会将 location 匹配到的部分移除后再传递,建议先在本地测试工具中模拟请求,再上生产。
问:nginx 配置了 HTTPS 后,为什么浏览器还是显示不安全?
答:最常见的原因是证书链不完整,很多用户只配置了域名证书,缺少中间证书(CA Bundle),在酷番云的实践中,我们遇到超过 60% 的“不安全”提示都是这个原因,解决办法:将证书文件和中间证书合并为一个 .pem 文件,顺序为“域名证书 + 中间证书”,检查 ssl_certificate 路径是否被 nginx 用户(通常为 nginx)有读取权限,权限设为 600 或 640 即可,执行 openssl s_client -connect 你的域名:443 -servername 你的域名 可以快速验证证书链是否完整。
结语与互动
配置是一套经过酷番云生产环境验证的完整方案,既有基础调优,也有安全性、可维护性设计。你可以在酷番云的一台 2 核 4G 云服务器上按此配置测试,并且建议将 nginx.conf、conf.d/ 下的所有配置纳入 Git 仓库管理,每次改动手动打 tag,方便回滚,如果你在实际配置中遇到任何问题,欢迎在文章下方留言告诉我们你是如何配置 proxy_pass 的?有没有踩过路径丢失的坑?或者你对 keepalive 的调优有什么独特技巧?我们期待与你在评论区深入交流,一起打磨出更健壮的 nginx 配置实践。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/722276.html

