Nginx 反向代理教程:一台服务器挂起所有服务
摘要
想用一个 80/443 端口挂起多个服务、给应用套上 HTTPS?本教程依据 Nginx 官方文档,介绍反向代理原理、最简 proxy_pass 配置与必备转发头、按域名分发多服务、WebSocket 支持、certbot 签发 Let's Encrypt 证书,以及 nginx -t 检查配置的规范流程。
Nginx 反向代理教程
你有了一个域名和一台服务器,想把跑在 8080 端口的应用挂到 443 的网站上;或者想给多个服务分配不同的子域名——这些都需要 Nginx 反向代理。本教程依据 Nginx 官方文档整理。
一、什么是反向代理
反向代理就是站在你的应用前面的"门卫":客户端访问 Nginx 的 80/443 端口,Nginx 把请求转发给后面真正的应用(如 Node 的 3000 端口),再把响应带回来。好处是:
对外只暴露 80/443,应用端口不直接暴露
可以轻松挂 HTTPS 证书
多个服务共用一个 80 端口(按域名分发)
附带缓存、限流、负载均衡能力
二、最简单的反代配置
Nginx 配置目录一般在 /etc/nginx/,站点配置放在 conf.d/ 或 sites-available/:
这几行 proxy_set_header 是标配:让后端能拿到真实的访问 IP 和协议,很多应用(如 OAuth 回调)没有它们会工作异常。
改完配置执行:
三、多个服务按域名分发
一台服务器跑多个站,每个 server 块用不同的 server_name:
Nginx 会根据请求的 Host 头自动匹配到对应 server 块。
四、WebSocket 支持
反代 WebSocket 应用(如实时聊天、代码热更新)会握手失败,需要补:
五、HTTPS 一步到位
用 certbot 免费签发 Let's Encrypt 证书(官方推荐方式):
certbot 会自动改写配置加上 443 监听和证书路径,并配置自动续期(certbot renew 由 systemd timer 自动执行)。
六、静态站点直出
不涉及后端的服务,用 Nginx 直接吐静态文件更快:
七、总结
需求 | 做法 |
|---|---|
反代一个应用 |
|
多站共存 | 多个 server 块按 server_name 分发 |
WebSocket | 升级头 |
上 HTTPS |
|
改完配置 |
|
记住铁律:改配置必跑 nginx -t,通过才 reload,能避免绝大多数"改完网站挂了"的事故。
