Nginx 配置详解
适用人群:需要为静态站、Node/Go 反向代理或 PHP 站点编写、看懂或排查 Nginx 配置的开发者与运维。
核心概念
server 块与 location
Nginx 用 server 块描述一个虚拟主机:listen 指定端口(80/443),server_name 声明域名,root 指定网站根目录。location 按 URI 前缀 / 正则匹配请求并决定如何处理。
三种典型站点
- 静态站点:root + index +
try_files $uri $uri/ =404; - 反向代理(Node/Go 等):
proxy_pass http://127.0.0.1:端口+ 一组 proxy_set_header 透传 Host / IP / 协议; - PHP(如 WordPress):
try_files ... /index.php?$query_string+location ~ \.php$用 fastcgi_pass 交给 php-fpm。
HTTPS 与安全
启用 HTTPS 需 listen 443 ssl + ssl_certificate / ssl_certificate_key,并常配 80→443 跳转、HTTP/2、HSTS。安全响应头(X-Frame-Options、X-Content-Type-Options、Referrer-Policy)与 gzip 压缩可按需加在 server 块内。
www 规范化
通过一个只做 return 301 的 server 块,把 apex 与 www 统一到你选定的主域名,避免重复内容。
操作步骤
步骤 1选定站点类型
先确定是静态站、反向代理(Node/Go)还是 PHP 站点,不同类型的 location 写法不同。可用本站的 Nginx 配置生成器按类型直接生成。
步骤 2写 server_name 与 listen
在 server 块中设置 server_name(可空格列多个域名)与 listen(HTTP 用 80,HTTPS 用 443 ssl)。
步骤 3配置内容来源
静态站配 root + index + try_files;反代配 proxy_pass 与 proxy_set_header;PHP 配 fastcgi_pass 到 php-fpm 套接字。
步骤 4启用 HTTPS
加 listen 443 ssl、证书路径、ssl_protocols TLSv1.2/1.3,并加一个 80→443 的 return 301 跳转块。
步骤 5加压缩与安全头
按需开启 gzip,并添加 HSTS 与常用安全响应头,用 add_header ... always 确保错误响应也带上。
步骤 6校验并生效
执行 nginx -t 确认语法无误,再 systemctl reload nginx 平滑加载,避免语法错误导致服务中断。
实际示例
# 静态站点 + HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example.com/public;
index index.html;
location / { try_files $uri $uri/ =404; }
}
# 反向代理到本地 3000(Node/Go)
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";
}
常见错误
- ⚠️add_header 未加 always,导致 4xx/5xx 响应缺少安全头 / HSTS
- ⚠️反向代理漏掉 proxy_set_header Host / X-Forwarded-*,后端拿不到真实域名与客户端 IP
- ⚠️PHP 站点缺少 location ~ \.php$ 或 fastcgi_pass 套接字路径写错,PHP 不被解析而是被下载
- ⚠️改完配置忘记 nginx -t 与 reload,或语法错误直接 reload 导致 Nginx 无法启动
- ⚠️证书里的域名与 server_name 不一致,浏览器报证书错误
对应工具
常见问题
静态、反向代理、PHP 三种配置怎么快速生成?
proxy_pass 后面要不要加斜杠?
配置改了不生效怎么办?
HTTP 和 HTTPS 一定要分两个 server 块吗?
相关教程
相关文章
备案站点的 Nginx 反向代理配置要点
反向代理在备案站点里的位置 典型链路是"用户 → Nginx(反向代理/负载)→ 后端应用"。备案约束的是"域名 + 接入服务商",反向代理层本身不改变备案,但它的配置直接影响可用性、日志质量与合规展示——配错了轻则路由错乱,重则埋下核查隐患。 回源与 Host 透传 反代把请求转发给后端时,要让后端拿到正确的域名信…
网站 HTTPS 怎么配置?SSL 证书申请、Nginx 部署与自动续期
HTTPS 已经是网站上线的标配:浏览器会对纯 HTTP 站点提示"不安全",搜索引擎也更青睐 HTTPS。配置 HTTPS 的核心是申请一张 SSL/TLS 证书、在服务器上部署、并确保它自动续期不过期。本文按运维实操讲清楚。 先分清:HTTPS 和备案是两回事 SSL 证书解决的是"传输加密与身份可信",ICP …
网站上线前怎么测试?测试环境、预发布与上线前检查清单
直接把没测过的网站推到线上,很容易上线即翻车:页面报错、链接失效、证书没配好,甚至因为空白页被判备案不合格。正式上线前做一轮测试和逐项检查,能把问题挡在用户之前。本文讲清测试环境怎么搭、备案期间怎么合规地测,以及上线前该核对什么。 为什么要先测 功能验证:注册、表单、支付、接口等关键流程能不能跑通; 展示验证:各页面…
网站上线备案与等保测评的先后顺序如何衔接
网站正式对外提供服务前,通常涉及ICP备案与网络安全等级保护(等保)测评两项合规工作,但二者监管逻辑并不相同,很多运营者容易把顺序搞混。 备案与等保测评管的是两件事 ICP备案由通信管理局主管,核验的是网站主办者身份和接入信息,解决“谁在办网站、通过谁接入”的问题;等保测评由公安机关网络安全保卫部门主管,评估的是信息…
网站上线后怎么做运维监控?可用性、SSL 到期与掉备案预警
网站上线不是终点。服务器宕机、证书过期、域名忘续费、备案被注销,任何一项都会让网站突然打不开。做好运维监控,就是在这些问题影响用户之前先收到预警。本文讲清该监控什么、怎么设告警。 要监控哪些项 | 监控项 | 关注什么 | 出问题的后果 | |---|---|---| | 可用性/Uptime | 网站是否能正常访问…
官方资料来源