Nginx 配置生成器
从零手写 Nginx 配置,意味着要记住每一行 proxy_set_header、gzip 需要压缩的每一种 MIME 类型,还要分清 try_files $uri/ /index.php?$args 和那些会悄悄破坏路由的写法之间的差别。这个生成器只需要你填写域名、上游地址、PHP 处理方式和 SSL 证书路径,就能输出一个 server block,并为 TLS、HTTP/2、静态资源缓存和压缩配好合理的默认值。
如何生成你的 server block
-
1
选择预设
静态站点、PHP-FPM(Laravel、WordPress)、Node.js 反向代理,或一个纯粹的 301 跳转。
-
2
填写域名
写全 server_name 列表,通常包括带 www 和不带 www 两种形式。
-
3
设置 SSL 信息
指向你的 fullchain 与 privkey 文件;若只用 HTTP,可跳过此步。
-
4
调整上游地址
使用 proxy_pass 时填写端口、socket 路径或后端 URL。
-
5
复制并部署
把输出放进 /etc/nginx/sites-available,执行 nginx -t,然后重新加载 Nginx。
一个好的 server block 长什么样
现代的 Nginx 虚拟主机通常包含这些部分:
| 组成部分 | 作用 |
|---|---|
listen 443 ssl http2 |
接受 HTTPS 连接并启用 HTTP/2 |
ssl_certificate + ssl_certificate_key |
指向 TLS 证书和私钥文件 |
ssl_protocols TLSv1.2 TLSv1.3 |
淘汰老旧的 TLS 版本 |
gzip on + 类型列表 |
在响应时实时压缩文本/HTML/JSON/JS/CSS |
静态资源的 expires 响应头 |
减少回访用户的重复请求 |
try_files |
转交给前端控制器(PHP、Laravel 等) |
| HSTS + 安全响应头 | 强制浏览器始终走 TLS |
反向代理要点
对于运行在 Nginx 之后的 Node.js、Python、Ruby 应用:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
漏掉 X-Forwarded-For,是应用日志里丢失真实客户端 IP 最典型的原因。
常见错误
- 缺少 server_name 兜底块。 当没有任何域名匹配时,Nginx 会把第一个 server block 当作默认值。请加上一个返回 444 的通配
server_name _块,以防范 Host 头攻击。 - 证书顺序错误。
ssl_certificate文件必须是完整链(fullchain:站点证书 + 中间证书),而不是只有站点证书。 - 缓存过于激进。 给
/index.html设置expires 1y会让后续发布失效。正确做法是给静态资源 URL 加上版本号。 - 不测试就重载。 执行
systemctl reload nginx之前请务必先跑nginx -t;一处语法错误就足以让整个站点下线。
常见问题
HTTP/2 已经稳定,在 Nginx 1.25+ 中获得普遍支持。HTTP/3(QUIC)在 Nginx 1.25+ 中也可以使用,但仍属实验性功能。如果现在要上生产环境,请启用 HTTP/2,并可按需通过 http3 和 quic 指令叠加 HTTP/3。
惯例是把公开证书链放在 /etc/ssl/certs/,私钥放在 /etc/ssl/private/。Let’s Encrypt 则把所有文件放在 /etc/letsencrypt/live/domain/ 下。按照你所用续期工具的约定来即可。
大多数站点都需要。单独加一个监听 80 端口的 server block,返回 301 https://$host$request_uri。再配合 HSTS,首次请求之后这个 HTTP 块几乎不会再被访问到。
运行 sudo nginx -t,它只解析配置而不重载。如果输出 “syntax is ok” 和 “test is successful”,再用 sudo systemctl reload nginx 重载。生产环境中千万不要用 restart,reload 不会中断服务。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- مولّد إعدادات Nginx [AR]
- Générateur de configuration Nginx [FR]
- Nginx-konfigurationsgenerator [SV]
- Nginx Konfigurationsgenerator [DE]
- ตัวสร้างไฟล์ config ของ Nginx [TH]
- Generator Konfigurasi Nginx [ID]
- Nginx 設定ジェネレーター [JA]
- Nginx 설정 생성기 [KO]
- Nginx-configuratiegenerator [NL]
- Trình tạo cấu hình Nginx [VI]
- Generador de Configuración de Nginx [ES]
- Generator konfiguracji Nginx [PL]
- Gerador de Configuração Nginx [PT]
- Nginx Config Generator [EN]
- Generatore di Configurazione Nginx [IT]
- Генератор конфигураций Nginx [RU]
- Nginx Yapılandırma Üreteci [TR]