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