Nginx反向代理核心是接收用户请求并转发至后端服务(如Flask、Node.js),再原样返回响应;无需修改后端代码,不暴露后端端口,兼顾安全与灵活性。

用 Nginx 做反向代理,核心就一件事:让 Nginx 接收用户请求,再把请求转给真正的后端服务(比如 Flask、Node.js 或 Java 应用),最后把响应原样返回给用户。你不需要改后端代码,也不用暴露后端端口,安全又灵活。
确认安装并启动 Nginx
先确保 Nginx 已就绪:
- Ubuntu/Debian:
sudo apt update && sudo apt install nginx - CentOS/RHEL:
sudo yum install nginx或sudo dnf install nginx - macOS(Homebrew):
brew install nginx
启动后执行 sudo systemctl start nginx,浏览器访问 http://localhost 能看到 “Welcome to nginx!” 即表示运行正常。
写一个最简反向代理配置
假设你的后端服务跑在 http://127.0.0.1:3000(如本地 Node.js 服务),你想通过 http://localhost/api 访问它。
编辑配置文件(常用路径:/etc/nginx/sites-enabled/default),在 server 块中添加:
location /api/ {
proxy_pass http://127.0.0.1:3000/;
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末尾的/很重要:它会把/api/user中的/api前缀去掉,只转发/user给后端 - 四个
proxy_set_header是常规推荐,确保后端能拿到真实客户端 IP 和协议信息 - 修改完必须重载配置:
sudo nginx -t && sudo systemctl reload nginx
按需扩展常见功能
实际部署中常遇到这些场景,可直接复用或微调配置:
-
代理到 HTTPS 后端:把
proxy_pass https://example.com/;,测试环境加proxy_ssl_verify off;(生产务必配好证书) -
支持 WebSocket:在 location 块里加两行:
proxy_http_version 1.1;和proxy_set_header Upgrade $http_upgrade; -
多后端按域名分流:例如分别用
admin.example.com和api.example.com指向不同服务,只需定义多个server块,用server_name区分 -
静态资源不走代理:把
location ~*\.(js|css|png|jpg|gif)$ { root /var/www/static; }放在proxy规则前面(Nginx 按最长匹配优先)
隐藏后端与增强安全性
反向代理天然具备隐藏能力:
- 外部只能看到 Nginx 的 IP 和端口,后端如
127.0.0.1:8080或内网地址完全不可见 - 配合防火墙关闭后端端口(如只开 Nginx 的 80/443),可大幅降低被扫描和直接攻击风险
- 若需多台后端,用
upstream定义集群,Nginx 自动做健康检查与故障剔除
例如:
upstream backend_cluster {
server 192.168.1.10:3000 max_fails=3 fail_timeout=30s;
server 192.168.1.11:3000 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_cluster;
# 其他 proxy_* 头部保持不变
}
}



















