Nginx 反向代理教程：一台服务器挂起所有服务

Nginx 反向代理教程你有了一个域名和一台服务器，想把跑在 8080 端口的应用挂到 443 的网站上；或者想给多个服务分配不同的子域名——这些都需要 Nginx 反向代理。本教程依据 Nginx 官方文档整理。一、什么是反向代理反向代理就是站在你的应用前面的"门卫"：客户端访问 Nginx 的 80/443 端口，Nginx 把请求转发给后面真正的应用（如 Node 的 3000 端口），再把响应带回来。好处是：对外只暴露 80/443，应用端口不直接暴露可以轻松挂 HTTPS 证书多个服务共用一个 80 端口（按域名分发）附带缓存、限流、负载均衡能力二、最简单的反代配置 Nginx 配置目录一般在 /etc/nginx/，站点配置放在 conf.d/ 或 sites-available/： server { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:8080; 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 是标配：让后端能拿到真实的访问 IP 和协议，很多应用（如 OAuth 回调）没有它们会工作异常。改完配置执行： sudo nginx -t # 语法检查，必做！ sudo systemctl reload nginx 三、多个服务按域名分发一台服务器跑多个站，每个 server 块用不同的 server_name： server { listen 80; server_name blog.example.com; location / { proxy_pass http://127.0.0.1:2345; } } server { listen 80; server_name api.example.com; location / { proxy_pass http://127.0.0.1:3000; } } Nginx 会根据请求的 Host 头自动匹配到对应 server 块。四、WebSocket 支持反代 WebSocket 应用（如实时聊天、代码热更新）会握手失败，需要补： location /ws/ { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; } 五、HTTPS 一步到位用 certbot 免费签发 Let's Encrypt 证书（官方推荐方式）： sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d app.example.com certbot 会自动改写配置加上 443 监听和证书路径，并配置自动续期（certbot renew 由 systemd timer 自动执行）。六、静态站点直出不涉及后端的服务，用 Nginx 直接吐静态文件更快： server { listen 80; server_name docs.example.com; root /var/www/docs; index index.html; } 七、总结需求做法反代一个应用 proxy_pass http://127.0.0.1:端口 + 标准转发头多站共存多个 server 块按 server_name 分发 WebSocket 升级头 Upgrade/Connection 上 HTTPS certbot --nginx 一条命令改完配置 nginx -t 通过再 reload 记住铁律：改配置必跑 nginx -t，通过才 reload，能避免绝大多数"改完网站挂了"的事故。