跳转到内容

反向代理

反向代理网站用于将外部请求转发到后端服务,常用于部署 Node.js、Go、Java、Python 等应用。

工作原理

用户请求 -> Nginx (反向代理) -> 后端应用 (如 localhost:3000)

Nginx 接收用户的 HTTP/HTTPS 请求,然后将请求转发到指定的后端地址。

创建反向代理网站

  1. 进入 网站 页面
  2. 确保选中 反向代理 标签
  3. 点击 创建网站

配置项

  • 名称:网站标识,如 myapp
  • 域名:绑定的域名,如 app.example.com
  • 端口:监听端口,默认 80
  • 代理目标:后端服务地址,如 http://127.0.0.1:3000
  • 备注:可选备注

代理目标格式

http://127.0.0.1:3000      # 本地服务
http://localhost:8080       # 本地服务
http://172.18.0.2:80        # Docker 容器
https://backend.internal    # 内部 HTTPS 服务

编辑反向代理网站

点击网站列表中的 编辑 按钮进入编辑页面。

域名和监听

配置网站的域名和监听端口,支持添加多个域名和端口。

域名和监听配置

  • 域名:可添加多个域名
  • 监听地址:可配置多个端口,支持 HTTPS 和 QUIC(HTTP3)

上游配置

上游(Upstream)定义了后端服务器地址,支持配置多个后端实现负载均衡。

上游配置

  • 上游名称:上游的标识名称
  • 负载均衡算法:支持轮询(默认)、IP Hash 等算法
  • 保持活动连接:与后端保持的长连接数量
  • DNS 解析器:自定义 DNS 解析器

点击 添加服务器 按钮可以添加后端服务器:

添加服务器

  • 服务器地址:后端服务器地址,如 127.0.0.1:8080
  • 选项:可选参数,如 weight=5(权重)、backup(备用服务器)等

代理配置

配置代理行为和请求头传递。

代理配置

  • 匹配类型:匹配类型,如前缀匹配、正则匹配等
  • 匹配表达式:匹配的 URL 表达式
  • 代理目标:填写上游名称或直接填写后端地址
  • 启用缓存:是否启用代理缓存
  • 启用缓冲区:是否启用缓冲区,AI 应用建议关闭否则可能影响流式输出
  • 代理 SNI:是否启用 SNI(仅 HTTPS 代理有效)
  • 自定义请求头:添加或修改传递给后端的请求头
  • 响应内容替换:可替换响应内容中的字符串

使用场景

Node.js 应用

bash
# 启动 Node.js 应用
node app.js  # 监听 3000 端口

代理目标:http://127.0.0.1:3000

Docker 容器

如果后端是 Docker 容器,可以使用容器的 IP 地址或容器名称(同一网络内)。

代理目标:http://容器名:端口http://容器IP:端口

多个后端(负载均衡)

在上游配置中添加多个后端地址,实现负载均衡。

代理目标:http://上游名称

常见配置

WebSocket 支持

反向代理默认支持 WebSocket,无需额外配置。

传递真实 IP

AcePanel 会自动配置以下请求头,将用户真实 IP 传递给后端:

  • X-Real-IP
  • X-Forwarded-For
  • X-Forwarded-Proto

自定义配置

在网站管理页面可以编辑 Nginx 配置,添加自定义配置:

nginx
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffer_size 64k;
proxy_buffers 4 64k;

注意事项

  1. 确保后端服务已启动并监听指定端口
  2. 如果后端是 Docker 容器,确保端口已正确映射或使用 Docker 网络
  3. 后端服务崩溃时,Nginx 会返回 502 错误