通過在Elastic Compute Service上部署Nginx反向 Proxy,可自行控制請求轉寄規則以支援HTTPS協議的URL轉寄、連接埠代理等,彌補Alibaba Cloud DNS在URL轉寄協議支援缺失、無法配置解析到指定連接埠的不足。常規解析情境可通過添加解析記錄實現。
業務情境說明
Alibaba Cloud DNS提供的解析配置功能在特定情境下存在局限性:
協議限制:由於認證管理機制,無法支援從
HTTPS到HTTPS的請求轉寄,導致用戶端訪問失敗。連接埠限制:DNS標準協議規定只能將網域名稱解析至IP地址,無法指定連接埠。若後端應用使用非標準連接埠(如3000),使用者訪問時必須在URL中手動加入連接埠號碼(如
http://www.example.com:3000)。
方案架構
原始鏈路:客戶通過網域名稱發起訪問請求。經由Local DNS遞迴查詢,擷取後端服務IP地址後,直接存取IP對應的後端服務。
新鏈路:自建Nginx反向 Proxy後,Nginx作為流量入口和分發中樞,轉寄請求,整體訪問鏈路如下:
用戶端通過網域名稱發起訪問請求。經由Local DNS遞迴查詢,最終從權威DNS伺服器擷取指向Nginx伺服器的公網IP地址。
用戶端向該公網IP地址發送HTTP/HTTPS請求。
Nginx伺服器接收到請求後,根據其設定檔中基於
Host要求標頭(即訪問的網域名稱)的轉寄規則,將請求代理轉寄至對應的後端應用。後端應用處理請求後將響應返回給Nginx,再由Nginx最終傳遞給用戶端。
實施步驟
以Alibaba Cloud Linux 3作業系統的Elastic Compute Service為例,介紹部署和配置流程。若已經在系統上部署了Nginx服務,可直接跳轉到步驟三:配置Nginx實現不同情境。
步驟一:準備雲端服務器環境
參考控制台自訂購買並使用ECS執行個體,建立一台ECS執行個體。
作業系統:選擇 Alinux 3。
網路:確保已指派公網IP地址。
在執行個體的安全性群組配置中,添加入方向規則,允許存取TCP協議的
22、80和443連接埠,用於SSH遠端連線和Web服務。
步驟二:安裝並啟動Nginx
使用SSH用戶端登入到ECS執行個體。
執行以下命令安裝Nginx。
sudo yum install -y nginx啟動Nginx服務並設定為開機自啟動。
sudo systemctl start nginx sudo systemctl enable nginx檢查Nginx服務狀態,確認其已成功運行。
sudo systemctl status nginx若狀態顯示為
active (running),則表示服務啟動正常。修改Nginx配置後,執行以下命令使配置生效。該命令會平滑重載配置,不中斷現有串連。
sudo systemctl reload nginx
步驟三:配置Nginx實現不同情境
Nginx的核心配置位於/etc/nginx/nginx.conf,但最佳實務是將每個網站的獨立配置建立為.conf檔案並存放在/etc/nginx/conf.d/目錄下。以下為不同業務情境的配置樣本。
情境一:HTTPS協議的URL轉寄
DNS無法支援HTTPS協議到HTTPS協議的URL轉寄的根本原因:Alibaba Cloud DNS無法自訂上傳使用者HTTPS認證導致。通過自建Nginx,使用者可自行為原網域名稱配置有效SSL認證,並配置URL轉寄規則。
URL重新導向(顯性轉寄)
將
https://example.com的訪問永久重新導向到https://aliyun.com,瀏覽器地址欄變成重新導向之後的地址。請在/etc/nginx/conf.d/redirect.conf檔案中添加以下內容:server { listen 443 ssl http2; server_name example.com; # 配置源網域名稱的SSL認證和私密金鑰 ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { return 301 https://aliyun.com$request_uri; } }反向 Proxy(隱性轉寄)
將
https://example.com網站的請求交由https://aliyun.com網域名稱處理,地址欄保持不變,但內容實際由其他後端服務提供。請在/etc/nginx/conf.d/proxy.conf檔案中添加以下內容:# 將對 example.com 的訪問代理到 aliyun.com server { listen 443 ssl http2; server_name example.com; # 配置源網域名稱的SSL認證和私密金鑰 ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { # 將請求轉寄至目標伺服器 proxy_pass http://aliyun.com; # 關鍵配置:將Host要求標頭設定為目標服務的網域名稱,確保後端能正確處理請求 proxy_set_header Host "aliyun.com"; # 傳遞用戶端真實IP地址,便於後端服務記錄和分析 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
情境二:網域名稱解析到指定連接埠
此配置使得運行在非標準連接埠(如3000)的應用能通過標準80連接埠訪問,解決了DNS的A記錄無法指定連接埠的問題。在/etc/nginx/conf.d/port_mapping.conf檔案中添加以下內容:
# 通過 example.com 訪問本地3000連接埠的服務
server {
listen 80;
server_name example.com;
location / {
# 將請求轉寄到本地(localhost)的3000連接埠
proxy_pass http://127.0.0.1:3000;
# 傳遞原始的Host要求標頭,以便後端應用能識別訪問的網域名稱
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
步驟四:配置DNS解析
完成了自建Nginx反向 Proxy服務的搭建和配置後,需要根據代理的服務和關聯的網域名稱,配置DNS解析。
準備好網域名稱,如還沒有購買網域名稱,請前往 阿里雲網域名稱註冊購買。若網域名稱關聯的網站需要部署在中國內地,請提前完成ICP備案。
擷取部署Nginx反向 Proxy所在伺服器的公網IP地址,本案例中直接擷取ECS執行個體的公網IP地址。

訪問Alibaba Cloud DNS-公網權威解析,找到目標網域名稱。
添加/修改解析記錄。
若之前未設定過解析記錄,則添加解析記錄,為每個在Nginx中配置的網域名稱(如
example.com)建立一條A記錄,將其指向ECS執行個體的公網IP地址。若已經存在解析記錄,則將原來的記錄值換成Nginx服務的公網IP地址即可,注意:修改解析記錄後,需要等待5-10分鐘,解析記錄才會陸續生效。

成本與風險
成本構成:主要成本來自運行Nginx所需的Elastic Compute Service執行個體,具體費用取決於所選執行個體的規格、地區和計費方式。Nginx為開源軟體。
風險與維護:自建反向 Proxy服務需要自行承擔營運責任,包括定期更新作業系統和Nginx的安全補丁、監控服務健康狀態、備份設定檔等。配置不當或缺乏維護可能導致服務中斷或引入安全性漏洞。
生產環境建議:對於生產環境,建議進一步強化Nginx的安全配置,並建立監控和日誌分析體系。