跳转到内容

反向代理

反向代理网站用于将外部请求转发到后端服务,常用于部署 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)定义了后端服务器地址,支持配置多个后端实现负载均衡。

上游配置

  • 上游名称:上游的标识名称
  • 负载均衡算法:对于 Nginx,支持轮询(默认)、least_connip_hashhashrandom;对于 Apache,支持轮询(默认)、最少繁忙和按流量分配
  • 保持连接数:与后端维持的长连接数量
  • DNS 解析器:自定义 DNS 解析器及解析超时时间(仅 Nginx)

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

添加服务器

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

代理配置

配置代理行为和请求头转发。 每条代理规则将一个 location 映射到一个后端。

代理配置

  • 匹配类型:location 匹配类型,例如精确匹配(=)、优先前缀匹配(^~)、前缀匹配、区分大小写正则(~)和不区分大小写正则(~*
  • 匹配表达式:匹配的 URL 表达式
  • 代理转发:填写上游名称或直接填写后端地址,例如 http://127.0.0.1:8080http://upstream_name
  • 代理 Host:发送给后端的 Host 头(默认为 $proxy_host,或自动从代理转发地址中提取)
  • 启用缓存:是否启用代理缓存
  • 启用缓冲:是否启用缓冲,AI 应用建议关闭,否则可能影响流式输出
  • 代理 SNI:发送给后端的 SNI(仅对 HTTPS 后端有效)
  • DNS 解析器:自定义 DNS 解析器及解析超时时间(仅 Nginx)
  • 自定义请求头:添加或修改传递给后端的请求头
  • 响应内容替换:可替换响应内容中的字符串

高级设置

对于 Nginx,每条代理规则还提供一个高级设置面板:

  • HTTP 版本:后端协议版本(HTTP/1.0、HTTP/1.1、HTTP/2)
  • 最大请求体大小:该规则的最大请求体大小
  • 超时设置:连接 / 读取 / 发送超时时间
  • 重试设置:上游请求失败时的重试条件、最大重试次数和重试超时时间
  • SSL 后端验证:验证后端证书(仅在 HTTPS 后端时显示)
  • 响应头:隐藏或添加响应头
  • IP 访问控制:针对该规则允许或拒绝访客 IP/CIDR

重定向

重定向标签页允许你添加在请求到达代理之前生效的重定向规则。 每条规则是一张卡片,可通过拖动重新排序。

  • 重定向类型
    • URL 重定向url):将源路径重定向到目标路径
    • 主机重定向host):将源主机重定向到目标 URL(例如强制将 www 跳转到主域名)
    • 404 重定向404):将原本会返回 404 的请求重定向到目标 URL
  • 状态码301(永久移动)、302(找到)、307(临时重定向)或 308(永久重定向,默认)
  • :源路径(URL 类型)或源主机(Host 类型);404 类型不使用此项
  • 目标:目标路径(URL 类型)或目标 URL(Host/404 类型)
  • 保留 URI:启用后,原始请求路径和查询参数会被保留并追加到目标地址

HTTPS

HTTPS 标签页管理网站的 TLS。 当已绑定证书时,摘要卡片会显示证书有效期、颁发者和涵盖的域名。

  • 主开关:启用或禁用该网站的 HTTPS。 启用后会自动添加 443 监听(Nginx 还会添加 quic);禁用后会移除 443 监听并清除 ssl/quic 标志
  • 使用现有证书:选择证书管理中已托管的证书,以自动填入证书和私钥
  • HSTS:启用 HTTP 严格传输安全
  • HTTP 跳转:强制将普通 HTTP 请求重定向到 HTTPS
  • OCSP 装订:启用 OCSP 装订
  • TLS 版本:在 TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3 中选择允许的协议
  • 证书 / 私钥:直接粘贴 PEM 证书和 KEY 私钥内容

一键签发证书

当网站至少有一个域名时,底部的一键签发证书按钮会为已绑定的域名申请免费证书。 如果任一域名为泛域名(例如 *.example.com),会弹出对话框提示你选择一个 DNS 提供商(在证书管理中配置),以便通过 DNS 验证签发证书。

高级设置(全站)

高级设置标签页将多个全站选项归类到可折叠的面板中。

访问统计

仅 Nginx 可用。 开启启用统计以收集该网站的访问统计数据(可在网站统计页面查看)。

日志设置

  • 访问日志:选择禁用off)、默认路径或填写自定义路径
  • 错误日志:选择禁用off)、默认路径或填写自定义路径

当设置了日志路径(且未禁用)时,编辑器还会显示访问日志 / 错误日志标签页用于实时查看,底部的清空日志按钮会清空当前查看的日志文件。

限流

开启启用限流以打开该功能;下方的限制字段仅在启用后才会出现。

  • 并发限制:整个站点的最大并发连接数(0 = 不限制)
  • 单 IP 限制:每个访客 IP 的最大并发连接数(0 = 不限制)
  • 速率限制:单个请求的传输速率限制,单位 KB(0 = 不限制)

真实 IP

当 AcePanel 自身处于 CDN 或 Frp 之后时,用于识别访客的真实 IP(这与向后端转发请求头不同;参见 转发真实 IP)。

  • 启用:打开或关闭该功能
  • IP 来源:受信任的上游 IP 或 CIDR,每行一个(例如 127.0.0.110.0.0.0/8)。 如果使用 Frp,填写 Frp 的 IP;如果使用 CDN,填写 CDN 的 IP 段。 如果不确定,可以使用 0.0.0.0/0 / ::/0(不安全)
  • IP 头:携带真实 IP 的请求头,例如 X-Real-IPX-Forwarded-ForCF-Connecting-IPTrue-Client-IPAli-Cdn-Real-IpEO-Connecting-IP(允许自定义值)
  • 递归查找:在 X-Forwarded-For 头中递归查找真实 IP

基本认证

用户凭据下添加用户名/密码对,要求访客在访问网站前进行 HTTP 基本认证。 将列表留空则禁用认证。

使用场景

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

NOTE

这是关于将访客 IP 转发给你的后端服务,与高级设置(全站)中的真实 IP 功能是两回事。 那个功能是关于 AcePanel 自身在处于 CDN 或 Frp 之后时恢复访客的真实 IP(即读取受信任的上游请求头,而不是代理自身的 IP)。 当 AcePanel 处于另一个代理之后时使用真实 IP;当你的后端需要客户端 IP 时使用请求头转发。

自定义配置

你可以在网站编辑器的自定义配置标签页中添加自定义配置。 每条配置都有一个名称和一个作用域(本网站全局),让你无需手动编辑文件即可注入额外的指令:

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 错误