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 块吗?
相关教程
相关文章
百度智能小程序备案流程详解
百度智能小程序依托百度 App、百度搜索等场景分发,同样需要完成移动互联网应用程序备案。 备案的基本路径 百度智能小程序的备案入口通常设在百度智能小程序开放平台的开发者后台,开发者需要先完成小程序基础信息(名称、图标、服务类目)的填写,再进入备案专区提交申请。 提交材料 主体资质(企业/个体工商户/个人身份证件); …
APP 备案流程详解:从材料准备到拿到备案编号
APP 备案的流程设计参照了网站 ICP 备案的既有框架,对已经办过网站备案的主体来说,理解起来并不困难。 第一步:确认主体是否已备案 如果开发者或所属企业此前已经完成过网站备案,通常只需在原备案主体下新增一条 APP 接入信息,不必重新提交主体材料。如果是全新主体,则需要先走一遍主体备案:企业提交营业执照、法人身份…
企业法人变更后备案要同步改吗?流程详解
什么情况需要做 企业法定代表人变更(工商登记变更)后,是否需要联动变更备案信息,取决于原法人在备案中扮演的角色: 如果原法人同时是备案的网站负责人,法人变更后必须同步变更网站负责人信息; 如果法人只是营业执照上的登记信息,网站负责人另有其人且未变化,部分省份规定可以只更新工商证件资料,不强制走"负责人变更"流程,但建…
域名停放不建站,需要备案吗?
很多域名投资者或提前占位的站长,会让域名长期处于“停放”状态,这种情况下要不要备案,关键要看停放页面的性质和部署位置。 什么是域名停放 域名停放通常指:注册了域名,但暂时不用来做正式网站,域名解析后展示的是注册商/第三方停放服务商提供的默认页面,常见于: 刚注册、还没想好做什么内容的域名; 域名投资者持有、等待出售的…
备案通过后多久能正式上线网站
备案通过到网站能访问,中间还有一步 很多人以为"管局审核通过=网站立刻能访问",其实中间还有一个环节:接入商核验。管局审核通过后会把备案号同步到全国备案系统,接入商(如你购买服务器的云厂商)需要在自己的后台核实这条记录,确认无误后才会解除此前对该域名的访问限制。 大致的时间节奏 管局下发备案号(审核通过节点); 备案…
官方资料来源