Ubuntu上配置Nginx反向代理的核心是让Nginx接收外部请求并转发至后端服务(如Node.js、Flask),不暴露真实端口;需配置server块、proxy_pass及关键请求头,支持单服务、upstream负载均衡和HTTPS自动部署。

Ubuntu 服务器上配置反向代理,核心是让 Nginx(或 Apache)接收外部请求,再把请求转发给本地或远程的后端服务(比如 Node.js、Python Flask、Java 应用等),用户只看到一个统一入口,无需暴露真实端口。下面以最常用的 Nginx 为例,分步骤讲清楚怎么写配置。
基础反向代理配置(单后端)
这是最常用场景:把 访问域名或 IP 的 80 端口,全部转给本机 127.0.0.1:3000 的应用。
- 在
/etc/nginx/sites-available/下新建配置文件,例如:sudo nano /etc/nginx/sites-available/myapp - 写入以下内容(注意替换
example.com为你的真实域名或服务器 IP):
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;">location / {
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;
}
}
- 启用该配置:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ - 检查语法并重载:
sudo nginx -t && sudo systemctl reload nginx
带 upstream 的多实例或负载均衡
当后端有多个相同服务(如两个 Node 进程),可用 upstream 块统一管理,Nginx 自动轮询分发。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 在配置中加入:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
# 可加 weight=2 让某台承担更多流量
}
<p>server {
listen 80;
server_name example.com;</p><pre class="brush:php;toolbar:false;">location / {
proxy_pass http://backend;
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;
}
}
HTTPS + 反向代理(推荐上线必配)
先确保域名已解析到服务器,并安装 Certbot:
- 运行:
sudo apt install certbot python3-certbot-nginx - 生成证书并自动配置 HTTPS:
sudo certbot --nginx -d example.com - Certbot 会自动改写配置,生成带
listen 443 ssl的块,并添加 HTTP → HTTPS 重定向 - 之后所有流量走 HTTPS,但
proxy_pass仍可保持http://(除非后端也启用了 HTTPS)
常见注意事项
-
防火墙要放行 80/443 端口:运行
sudo ufw allow 'Nginx Full' - 后端服务必须监听 127.0.0.1 或 0.0.0.0,不能只监听 localhost 或 127.0.0.1:3000 却被防火墙拦截
-
proxy_set_header 缺一不可:尤其
X-Real-IP和X-Forwarded-For,否则后端日志看到的全是 127.0.0.1 -
location / 要严格匹配根路径;如果只想代理
/api/,就写location /api/ { proxy_pass http://...; },注意末尾斜杠对路径拼接的影响










