Nginx高效运行关键在合理配置结构与参数匹配:推荐源码编译精简模块(仅保留stub_status、SSL等必需项),主配置严格分main/events/http三层,站点配置分离至conf.d,静态资源启用gzip与强缓存,反向代理透传真实IP并协同后端设置超时。

Nginx不是装上就能高效运行的工具,关键在配置结构是否合理、各层级参数是否匹配实际负载。从安装到上线,真正影响性能和稳定性的环节集中在配置骨架搭建、静态资源优化、反向代理落地这三步,其余都是围绕它们展开的补充。
安装与目录结构要干净可控
不建议直接用 apt/yum 全量安装,容易混入无用模块(如邮件、scgi、memcached),既增加攻击面,又浪费内存。生产环境推荐源码编译,精简启用模块:
- 基础必须:--with-http_stub_status_module(监控用)、--with-http_ssl_module(HTTPS)
- 按需开启:--with-http_gzip_static_module(预压缩)、--with-http_v2_module(HTTP/2)
- 明确禁用:--without-mail_*、--without-http_autoindex_module、--without-http_ssi_module 等非Web核心模块
- 安装后统一路径:/usr/local/nginx(二进制)、/usr/local/nginx/conf(配置)、/var/log/nginx(日志)
配置文件骨架必须分层清晰
nginx.conf 不是堆指令的地方,而是定义“谁管什么”的契约。主配置应严格保留三层嵌套逻辑:
- main块:只放全局控制项——user nginx; worker_processes auto; worker_rlimit_nofile 65535;
- events块:专注连接模型——use epoll; worker_connections 8192; multi_accept on;
- http块:只做协议级通用设置——include mime.types; sendfile on; tcp_nopush on; keepalive_timeout 65; log_format 和 access_log 定义也放这里
- 所有具体站点配置,全部拆到 /etc/nginx/conf.d/*.conf,每个文件一个 server,避免主配置臃肿
静态资源服务要兼顾速度与缓存策略
前端项目(Vue/React)部署时,Nginx 不只是“托管”,更是首道性能关卡:
- root 路径指向构建后 dist 目录,不要用 alias;index 必须显式写 index.html
- 启用 gzip 压缩:gzip on; gzip_types text/css application/javascript application/json; gzip_min_length 256;
- 强缓存图片、字体、JS/CSS:location ~* \.(js|css|png|jpg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; }
- SPA 路由兜底:location / { try_files $uri $uri/ /index.html; },避免刷新404
反向代理必须处理好头部与连接生命周期
把请求转发给后端(如 Spring Boot、Node.js)时,Nginx 是用户和应用之间的“翻译官”,不能只写 proxy_pass:
- 必须透传真实客户端信息:proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 防止 Host 头被篡改:proxy_set_header Host $host;
- 长连接支持 WebSocket:location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
- 超时设置要协同后端:proxy_connect_timeout 5s; proxy_send_timeout 60s; proxy_read_timeout 60s;



















