# 反向代理 反向代理网站用于将外部请求转发到后端服务,常用于部署 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 服务 ``` ## 编辑反向代理网站 点击网站列表中的 **编辑** 按钮进入编辑页面。 ### 域名和监听 配置网站的域名和监听端口,支持添加多个域名和端口。 ![域名和监听配置](/images/website/website-proxy-edit.png) - **域名**:可添加多个域名 - **监听地址**:可配置多个端口,支持 HTTPS 和 QUIC(HTTP3) ### 上游配置 上游(Upstream)定义了后端服务器地址,支持配置多个后端实现负载均衡。 ![上游配置](/images/website/website-proxy-upstream.png) - **上游名称**:上游的标识名称 - **负载均衡算法**:支持轮询(默认)、IP Hash 等算法 - **保持活动连接**:与后端保持的长连接数量 - **DNS 解析器**:自定义 DNS 解析器 点击 **添加服务器** 按钮可以添加后端服务器: ![添加服务器](/images/website/website-proxy-upstream-add.png) - **服务器地址**:后端服务器地址,如 `127.0.0.1:8080` - **选项**:可选参数,如 `weight=5`(权重)、`backup`(备用服务器)等 ### 代理配置 配置代理行为和请求头传递。 ![代理配置](/images/website/website-proxy-proxy.png) - **匹配类型**:匹配类型,如前缀匹配、正则匹配等 - **匹配表达式**:匹配的 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 错误