跳轉到內容

反向代理

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

上游設定

上游用於定義後端伺服器位址,支援多個後端以進行負載平衡。

上游設定

  • 上游名稱:上游的識別名稱
  • 負載平衡演算法:對於 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://container-name:porthttp://container-IP:port

多後端(負載平衡)

在上游設定中新增多個後端位址即可實現負載平衡。

代理目標:http://upstream-name

常見設定

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 錯誤