跳轉到內容

反向代理

反向代理網站用於將外部請求轉發到後端服務,常用於部署 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 錯誤