Nginx 反向代理与 TLS
在 Node/Python/Go 应用前用 nginx 作反向代理:TLS 终止、虚拟主机、WebSocket 代理和限流。
为什么
nginx 作反向代理让一台服务器在不同子域托管多应用,一次性终止 TLS(含 HTTP/2 和会话票据),缓冲慢客户端以免应用阻塞,并可限流和缓存。是自托管多应用的标准前端。
5 美元/月 VPS(Hetzner、DigitalOcean)对 CPU 密集型工作负载优于 50 美元/月 PaaS。自托管提供完整内核控制并避免供应商锁定,但需要系统管理技能。
何时使用
在一台 VPS 运行多应用、需要自定义域 TLS 或代理 WebSocket/gRPC 时使用 nginx 反向代理。零配置自动 TLS 用 Caddy;需要精细控制或已有 nginx 设置时用 nginx。
如何做
示例
常见问题
- ⚠502 Bad Gateway —— 上游应用未运行或未监听 proxy_pass 端口;检查应用,若 nginx 在容器中需绑定 0.0.0.0 而非 127.0.0.1。
- ⚠代理后 WebSocket 失败 —— 缺少 proxy_set_header Upgrade/Connection 或 proxy_http_version 1.1;添加示例中三行。
- ⚠certbot 验证失败 —— 端口 80 须开放且 server_name 须解析到此主机;运行 certbot 前检查 DNS 和防火墙。
最佳实践
- ✓始终设 proxy_set_header X-Forwarded-Proto $scheme,使应用知道在 HTTPS 后并生成安全 cookie/重定向。
- ✓在 nginx 用 limit_req_zone 限流(廉价)而非应用内(昂贵)—— nginx 在应用工作前拒绝。
- ✓每月运行 certbot renew --dry-run 并添加 systemd 定时器或 cron 自动续期;证书 90 天过期。
常见问题解答
什么是Nginx 反向代理与 TLS?它解决什么问题?
在 Node/Python/Go 应用前用 nginx 作反向代理:TLS 终止、虚拟主机、WebSocket 代理和限流。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。
如何在 5 分钟内上手Nginx 反向代理与 TLS?
两步即可跑通:① 安装 nginx 和 certbot(Let's Encrypt)。;② 在 /etc/nginx/sites-available/ 为每个应用创建 server 块。。建议先用免费套餐验证流程,再接入生产环境。
Nginx 反向代理与 TLS 最容易踩的坑是什么?
最高频的问题是:502 Bad Gateway —— 上游应用未运行或未监听 proxy_pass 端口;检查应用,若 nginx 在容器中需绑定 0.0.0.0 而非 127.0.0.1。。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。
Nginx 反向代理与 TLS 的最佳实践有哪些?
Nginx 反向代理与 TLS 的最佳实践包括:始终设 proxy_set_header X-Forwarded-Proto $scheme,使应用知道在 HTTPS 后并生成安全 cookie/重定向。;在 nginx 用 limit_req_zone 限流(廉价)而非应用内(昂贵)—— nginx 在应用工作前拒绝。;每月运行 certbot renew --dry-run 并添加 systemd 定时器或 cron 自动续期;证书 90 天过期。。其中首条「始终设 proxy_set_header X-Forwarded-Proto $scheme,使应用知道在 HTTPS 后并生成安全 cookie/重定向。」应作为团队默认规范写入 IaC 模板。
Nginx 反向代理与 TLS 如何控制成本与避免账单意外?
三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Nginx 反向代理与 TLS 多数提供免费套餐,先在免费额度内验证再放量。