在 Linux 云服务器配置 Nginx 反向代理与 HTTPS,覆盖域名解析、proxy_pass、转发头、配置测试、证书续期、502 和重定向循环排查。
Nginx 反向代理部署的正确顺序是:先确认应用只在本机或内网端口稳定运行,再配置域名和 HTTP 代理,最后申请 HTTPS 证书并验证自动续期。直接从证书步骤开始,会把 DNS、应用监听、防火墙和 Nginx 配置问题混在一起。
本文以单台 Linux 云服务器代理本机应用为例。域名必须已指向服务器,云安全组和主机防火墙需开放 80/443;应用端口不应无条件暴露公网。
从域名到应用的访问链路

部署前先验证哪些条件
- 域名 A/AAAA 记录指向当前服务器;
- 80/443 在云安全组和主机防火墙中开放;
- 应用在
127.0.0.1:APP_PORT或受控内网地址监听; - 服务器时间和 DNS 解析正常;
- Nginx 包来源与系统版本明确;
- 证书申请方式使用官方客户端或受控 ACME 工具。
先从服务器本机验证上游:
curl --fail --show-error http://127.0.0.1:APP_PORT/HEALTH_PATH替换端口和健康路径。这里失败时先修应用,不要修改 Nginx。
Nginx 反向代理配置怎样写
下面是最小结构示例。域名、端口和配置路径必须按环境替换:
server {
listen 80;
server_name YOUR_DOMAIN;
location / {
proxy_pass http://127.0.0.1:APP_PORT;
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_pass 是否带尾部斜杠会影响 URI 映射,包含子路径时必须按 Nginx 规则验证,不能机械复制。
为什么必须先测试配置再重载
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl status nginx --no-pagernginx -t 成功后再 reload。重载会让新 worker 使用新配置,同时旧 worker 完成已有请求,比直接停止进程更稳妥。
HTTPS 证书怎样接入
证书签发前必须保证域名解析正确,并让 ACME 验证能够访问 80 或使用已经配置的其他验证方式。使用 Certbot 时应按当前操作系统和 Certbot 官方安装文档选择 Nginx 插件,不在文章中固定某个可能过时的软件源命令。
证书签发后检查:HTTPS 页面、证书域名、证书链、HTTP 到 HTTPS 跳转、TLS 到期日和自动续期任务。续期必须执行演练,而不是只看到定时器存在。
WebSocket 和长连接要注意什么
WebSocket 需要正确传递 Upgrade 与 Connection 头;长请求还可能涉及读取超时、缓冲和上游超时。不要全站盲目增加很大的 timeout,应只对确有需要的 location 设置,并同时处理应用端超时。
502、404 和重定向循环怎么排查
- 502 Bad Gateway:检查上游进程、端口、协议、Unix Socket 权限和应用日志;
- Nginx 404:检查命中的 server_name、location 和 root/proxy_pass;
- 应用 404:检查尾部斜杠和上游路径映射;
- 重定向循环:检查应用是否识别 X-Forwarded-Proto,以及 CDN/LB 的 TLS 终止位置;
- 证书错误:检查 SNI、域名、证书链和 DNS 是否仍指向旧服务器。
日志和本机请求是主要证据:
sudo tail -n 100 /var/log/nginx/error.log
curl -I http://127.0.0.1:APP_PORT/
curl -I https://YOUR_DOMAIN/
常见问题
应用端口还需要对公网开放吗?
同机反向代理通常只让应用监听 127.0.0.1,由 Nginx 对公网开放 80/443。跨服务器上游则限制为内网或 Nginx 来源。
申请证书一定要开放 80 吗?
取决于 ACME 验证方式。HTTP-01 通常需要 80 可达,DNS-01 使用 DNS 记录验证。应按实际客户端和架构选择。
配置改完直接 restart 可以吗?
先执行 nginx -t,通过后优先 reload。语法错误时直接重启可能让服务无法恢复。
官方资料
如果需要确认云平台账户、充值或服务器部署方向,可通过 Telegram 联系 @heishayun。排障时请提供脱敏后的域名解析、Nginx 配置测试和错误日志。

