Nginx 反向代理入门:把后端服务藏到统一入口后面
做 Web 开发时,前端静态页面、后端 API、甚至多个微服务,往往跑在不同端口上。直接把这些端口暴露给公网既不方便,也不安全。Nginx 作为反向代理,可以把多个后端统一到 80 或 443 端口,并顺便处理 HTTPS、限流和静态资源。本文用最简单的配置,说明怎么把一个本地后端挂到 Nginx 后面。
一、安装与基本结构
在 Ubuntu / Debian 上执行 sudo apt install nginx 即可。配置文件主入口是 /etc/nginx/nginx.conf,站点配置通常放在 /etc/nginx/sites-available/,再用软链接启用到 sites-enabled。改完配置后先执行 sudo nginx -t 检查语法,再 sudo systemctl reload nginx 让配置生效,不必完全重启。
二、最简单的反向代理
假设本机有一个跑在 8080 端口的 API 服务,希望通过 http://example.com/api/ 访问。可以写这样一段 server 配置:
server {
listen 80;
server_name example.com;
location /api/ {
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_pass 末尾的斜杠:带斜杠时,Nginx 会把 /api/xxx 转成后端的 /xxx;不带斜杠则会把完整路径原样转发。两种写法都对,但要和后端路由约定一致。
三、为什么要传这些 Header
后端看到的直接连接来自 Nginx,而不是真实用户。如果不把 Host、X-Real-IP 等头传过去,日志里全是 127.0.0.1,生成绝对 URL 时也会用错域名。X-Forwarded-Proto 告诉后端原始请求是 http 还是 https,对重定向和 Cookie 的 Secure 标记很重要。
四、静态文件与 API 共存
同一个域名下,可以把静态站点放在根路径,API 走 /api/:
location / {
root /var/www/html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
try_files 适合单页应用(SPA):找不到真实文件时回退到 index.html,由前端路由接管。
五、常见坑
第一,改完配置忘记 nginx -t,语法错误会导致 reload 失败,旧配置继续跑,你却以为改生效了。第二,后端只监听 127.0.0.1 时更安全,不要再把 8080 对公网开放。第三,WebSocket 需要额外加 Upgrade 相关头,普通 HTTP 代理配置不够。第四,开启 HTTPS 后记得同时配置 http 到 https 的跳转,避免混用。
小结
Nginx 反向代理的核心就是 location + proxy_pass,再补上正确的转发头。先把一个后端跑通,再逐步加静态资源、HTTPS 和多服务分流。云服务器上部署时,记得安全组放行 80/443,后端端口只对本机开放即可。
- 点赞
- 收藏
- 关注作者
评论(0)