跳转到内容

反向代理

反向代理网站设置

反向代理网站用于将外部请求转发到后端服务,常用于部署 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 服务

编辑反向代理网站

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

可以在基本设置中将网站切换为 PHP 或纯静态类型。 域名、监听、文件等通用内容会保留;代理上游和代理规则会删除,并重新生成所选类型的配置。 切换前必须备份并记录代理配置。

域名和监听

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

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

上游配置

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

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

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

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

代理配置

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

  • 匹配类型: 精确匹配(=)、优先前缀(^~)、普通前缀、区分大小写正则(~)和不区分大小写正则(~*)。
  • 匹配表达式: 要匹配的 URL 表达式。
  • 代理地址: 上游名称或完整后端地址,例如 http://127.0.0.1:8080http://upstream_name
  • 代理 Host: 发送给后端的 Host 请求头,默认 $proxy_host,也可从代理地址自动提取。
  • 启用缓存: 是否使用代理缓存。
  • 启用缓冲: 是否缓冲响应;AI 等流式应用建议关闭,否则可能影响流式输出。
  • 代理 SNI: HTTPS 后端使用的 SNI。
  • 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
  • 状态码301302307308,默认值为 308
  • 来源: URL 类型填写来源路径,Host 类型填写来源主机;404 类型无需填写。
  • 目标: URL 类型填写目标路径,Host 和 404 类型填写目标 URL。
  • 保留 URI: 保留原请求路径和查询参数并追加到目标地址。

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

HTTPS 标签页用于管理网站 TLS。 网站已绑定证书时,会显示有效期、签发者和覆盖域名。

  • 总开关:为此网站启用或关闭 HTTPS。 启用后自动增加 443 监听,Nginx 还会增加 quic;关闭后移除 443 监听,并清除 sslquic 标记
  • 使用已有证书: 从证书管理中选择证书,自动填入证书和私钥。
  • HSTS: 启用 HTTP 严格传输安全。
  • HTTP 重定向: 强制 HTTP 跳转到 HTTPS。
  • OCSP Stapling: 启用 OCSP 装订。
  • TLS 版本: 可选择 TLS 1.0、1.1、1.2 和 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 地址,使用 CDN 时填写 CDN 地址段。 不确定时可以使用 0.0.0.0/0::/0,但这不安全。
  • IP 请求头: 例如 X-Real-IPX-Forwarded-ForCF-Connecting-IPTrue-Client-IPAli-Cdn-Real-IpEO-Connecting-IP,也支持自定义。
  • 递归:X-Forwarded-For 中递归查找真实 IP。

基本认证

用户凭据中添加用户名和密码后,访问网站前必须通过 HTTP Basic Authentication; 列表为空时不启用认证。

常见场景

Node.js 应用

bash
node app.js  # 监听 3000 端口

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

Docker 容器

后端位于 Docker 容器时,可以使用容器 IP,或在同一 Docker 网络中使用容器名称。

代理目标:http://container-name:porthttp://container-IP:port

多后端负载均衡

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

在上游配置中添加多个后端地址,再将代理目标设为 http://upstream-name

常用配置

WebSocket

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

当 AcePanel 位于 CDN 或 Frp 后方时,用于识别真实访问者 IP。该功能与向后端转发请求头不同。

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

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

NOTE

这里介绍的是把访问者 IP 转发给后端服务,与高级设置(站点级)中的 真实 IP 功能不同。 该功能用于 AcePanel 位于 CDN 或 Frp 后方时恢复 真实访问者 IP,即读取可信上游请求头,而不是代理自身 IP。 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。