Nginx 配置生成器
交互式生成安全、高性能的 Nginx 配置文件。
填写表单并点击”生成配置”
常用指令参考
Nginx server 块常用指令速查,生成时自动使用
listen指定服务器监听的端口和协议,如 80(HTTP)或 443 ssl http2(HTTPS)。
server_name定义该 server 块响应的域名,支持通配符和正则,如 *.example.com。
root设置静态文件根目录,Nginx 将从此路径查找 URI 对应的文件。
proxy_pass反向代理的上游服务地址,通常指向后端应用端口,如 http://127.0.0.1:3000。
gzip开启响应压缩,减少传输体积,对文本类资源(HTML/CSS/JS)效果显著。
ssl_certificate指定 TLS 证书和私钥路径,Let's Encrypt 证书通常位于 /etc/letsencrypt/live/。
try_files按顺序尝试路径,SPA 应用常用 $uri $uri/ /index.html 实现前端路由兜底。
expires为匹配的响应设置 Cache-Control 和 Expires 头,静态资源建议 30d 或 1y。
add_header追加自定义响应头,常用于安全头如 X-Frame-Options、HSTS 等。
配置参数
填写域名和端口,按需开启各项功能
什么是 Nginx 配置生成器?
Nginx(读作“engine-x”)是全球最广泛使用的 Web 服务器、反向代理和负载均衡器之一。它支撑着全球超过 30% 的网站,是现代云原生基础设施的基石。然而,从零开始编写正确的 Nginx 配置文件需要对复杂的指令语法有深入了解,这往往既费时又容易出错。
本生成器通过提供交互式表单来消除这种摩擦,能够即时生成可直接用于生产环境的 nginx.conf Server 块。你可以轻松配置域名、监听端口、带证书路径的 SSL/TLS 终结、将流量转发到后端服务的反向代理设置、Gzip 压缩以及静态文件缓存。
如何使用此工具
填写你的“服务器名称”(域名),选择“监听端口”(默认为 80),并根据需要开启各项功能。如果你开启了 SSL,请提供证书和私钥文件的路径(我们推荐使用 Certbot 获取 Let's Encrypt 免费证书)。如果开启反向代理,请输入后端服务的 URL(例如 Node.js 应用的 http://127.0.0.1:3000)。开启 Gzip 可节省带宽,开启静态缓存则可提升资源密集型网站的性能。
点击“生成配置”生成完整的 Server 块。完成后将其复制到 /etc/nginx/sites-available/your-domain.conf,创建到 sites-enabled 的软链接,运行 nginx -t 测试语法,最后通过 sudo systemctl reload nginx 重新加载。在推向生产环境前请务必仔细检查输出内容。
典型生产场景
root + try_files适用于纯 HTML/CSS/JS 站点或文档托管。配置 root 指向构建产物目录(如 /var/www/html),配合 try_files $uri $uri/ /index.html 处理路径兜底,以及独立的 location 块为静态资源配置强缓存(expires 1y; Cache-Control: public, immutable)。建议同时开启 Gzip 压缩,对 JS/CSS 文本资源可节省 60-80% 传输体积。
try_files $uri /index.html单页应用(React、Vue、Angular)的核心需求是把所有非文件路径回退到 index.html,由前端路由处理。使用 try_files $uri $uri/ /index.html 即可实现。带 hash 后缀的静态 bundle 可配置 1 年强缓存(Cache-Control: public, immutable),而 index.html 本身必须设置 no-cache 或极短 max-age,确保新版本部署后用户能立即获取最新入口文件。
proxy_pass最常见的配置模式:Nginx 监听 80/443,proxy_pass 转发到本地应用端口(如 http://127.0.0.1:3000)。必须设置 proxy_http_version 1.1 和正确的 Host、X-Real-IP、X-Forwarded-For 头,否则后端拿不到真实客户端 IP。proxy_cache_bypass $http_upgrade 确保 WebSocket 握手不被缓存拦截。建议配置 proxy_connect_timeout 5s 和 proxy_read_timeout 60s,快速暴露上游故障。
ssl_certificate标准配置包含两个 server 块:监听 443 并配置 ssl_certificate、ssl_protocols TLSv1.2 TLSv1.3、ssl_ciphers HIGH:!aNULL:!MD5、ssl_session_cache shared:SSL:10m;另一个监听 80 并 return 301 https://$host$request_uri 强制跳转。证书推荐用 Let's Encrypt + Certbot 自动申请续签。开启 OCSP Stapling(ssl_stapling on)可预取证书状态,减少客户端 TLS 握手延迟。
Upgrade $http_upgradeWebSocket 需透传 HTTP Upgrade 握手:proxy_http_version 1.1、proxy_set_header Upgrade $http_upgrade、proxy_set_header Connection “upgrade”。默认 proxy_read_timeout 为 60s,对长连接应调至 3600s,避免空闲连接被中断。多实例场景需注意 WebSocket 会话的粘性路由(ip_hash 或基于 session ID 的 header hash),确保同一连接始终路由到同一后端。
upstream { }在 http 块定义 upstream,列出所有后端节点,proxy_pass 指向 upstream 名称。默认轮询适合无状态服务;least_conn 适合响应时间差异大的场景;ip_hash 在无外部会话存储时可实现会话保持,但节点增减时 hash 分布会重排。每个 server 条目建议配置 max_fails=3 fail_timeout=30s 实现被动健康检查,超阈值节点临时从轮询中剔除。
性能与安全注意事项
worker_processes 建议设为 auto(等于 CPU 核数),worker_connections 默认 1024 在生产环境偏低,建议调至 4096 以上,配合 use epoll(Linux)支撑更高并发。Gzip 的 gzip_comp_level 建议 4-6,过高会造成 CPU 浪费而带宽收益边际递减。静态文件传输启用 sendfile on 利用内核零拷贝;tcp_nopush on 合并小包减少 TCP 握手次数,两者配合使用效果显著。
SSL/TLS 层面,ssl_session_cache shared:SSL:10m 开启会话缓存减少重复握手开销;ssl_session_timeout 1d 合理延长复用窗口。开启 OCSP Stapling(ssl_stapling on; ssl_stapling_verify on)让 Nginx 预先获取证书吊销状态,避免客户端发起额外 OCSP 请求的延迟。仅开放 TLSv1.2 和 TLSv1.3,禁用弱密码套件(!aNULL !MD5 !RC4)。
速率限制是抵御暴力破解和 CC 攻击的必要手段。在 http 块定义 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s,在敏感 location 中使用 limit_req zone=api burst=20 nodelay。登录、注册等接口速率应更严格(如 2r/m)。同时配置 client_max_body_size 限制上传体积,避免大请求耗尽内存。
location 匹配规则与 proxy_pass 斜杠陷阱
location 的匹配优先级常被误解,导致请求落到非预期的块。优先级从高到低为:= 精确匹配最高,其次是 ^~ 前缀匹配(命中后不再检查正则),再次是 ~ 与 ~* 正则匹配(区分与不区分大小写,按配置书写顺序匹配),最后才是普通前缀匹配(取最长命中)。一个典型陷阱是:用正则 location 给 js、css、图片等静态资源配置强缓存,却被前面的正则规则提前截获——把静态资源块改为 ^~ 前缀匹配,或调整正则的书写顺序即可解决。
proxy_pass 末尾加不加斜杠,行为完全不同,是反向代理最高频的踩坑点。当 location /api/ 代理到 http://backend/(带斜杠)时,会把 /api/ 前缀从请求路径中剥离,后端收到的是 /;而代理到 http://backend(不带斜杠)时,会把完整的 /api/ 透传给后端。需要保留路径前缀就不要加斜杠,需要剥离前缀就加斜杠。注意:proxy_pass 中只要包含 URI 部分(哪怕只是一个 /),Nginx 就会做路径替换。
常见错误排查:502 / 504 / 413
502 Bad Gateway 表示 Nginx 能收到请求但连不上上游服务,排查顺序:① 确认上游进程是否在监听(ss -ltnp 看端口);② 检查 proxy_pass 的地址和端口是否写对;③ 若上游在本机却仍 502,多半是 SELinux 或防火墙拦截了 Nginx 到上游的连接(setsebool -P httpd_can_network_connect 1);④ upstream 使用域名时确认 DNS 可解析。日志看 /var/log/nginx/error.log 的 connect() failed 行能直接定位。
504 Gateway Timeout 是上游响应太慢、超过了超时阈值,可调大 proxy_connect_timeout、proxy_read_timeout、proxy_send_timeout(默认均为 60s),但更应排查上游为何变慢,单纯调大超时只是掩盖问题。413 Request Entity Too Large 是上传体积超过 client_max_body_size(默认仅 1m),按需在 http 或 location 块调大,例如文件上传接口设为 client_max_body_size 50m;注意这是 Nginx 层限制,后端可能还有各自的体积限制需要同步放开。