阿里雲OSS的儲存空間(Bucket)訪問地址會隨機變換,您可以通過在ECS執行個體上配置OSS的反向 Proxy,實現通過固定IP地址訪問OSS的儲存空間。
背景資訊
阿里雲OSS通過Restful API方式對外提供服務。終端使用者通過OSS預設網域名稱或者綁定的自訂網域名方式訪問,但是在某些情境下,使用者需要通過固定的IP地址訪問OSS:
某些企業由於安全機制,需要在出口防火牆配置策略,以限制內部員工和業務系統只能訪問指定的公網IP,但是OSS的Bucket訪問IP會隨機變換,導致需要經常修改防火牆策略。
金融雲環境下,因金融雲網路架構限制,金融雲內網類型的Bucket只能在金融雲內部訪問,不支援在互連網上直接存取金融雲內網類型Bucket。
針對以上問題,您可以通過在ECS執行個體上搭建反向 Proxy的方式訪問OSS。
操作步驟
建立一個ECS執行個體。
本文以和Bucket相同地區的Windows Server 2019資料中心版64位中文版系統的ECS執行個體為例。
如何建立ECS執行個體,請參見選購ECS執行個體。
串連ECS執行個體。
如何串連ECS執行個體,請參見 串連ECS執行個體。
下載Nginx並解壓。
本文以Nginx-1.19.2版本為例。
修改設定檔nginx.conf。
重要本文僅提供示範環境。考慮到您的資料安全,強烈建議您在實際使用環境中配置HTTPS模組。如何配置,請參見Nginx或Tengine伺服器配置SSL認證。
以下配置方式只能代理訪問一個Bucket。
進入conf檔案夾,使用記事本開啟nginx.conf檔案。
修改設定檔內容。
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; server { listen 80; server_name 47.**.**.43; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location / { proxy_pass http://bucketname.oss-cn-hangzhou-internal.aliyuncs.com; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_connect_timeout 15s; proxy_read_timeout 15s; proxy_send_timeout 15s; proxy_set_header Connection ""; proxy_buffering off; proxy_request_buffering off; } } }
參數
說明
server_name
對外提供反向 Proxy服務的IP,即ECS執行個體的外網地址。
proxy_pass
跳轉的網域名稱。
當ECS執行個體與Bucket在同一地區時:填寫目標Bucket的內網訪問網域名稱。關於內網訪問網域名稱的更多資訊,請參見通過內網訪問OSS。
當ECS執行個體與Bucket不在同一地區時:填寫目標Bucket的外網訪問網域名稱。關於外網訪問網域名稱的更多資訊,請參見通過外網訪問OSS。
您的使用者需通過瀏覽器預覽Bucket中的圖片或網頁檔案:因OSS的安全設定,當使用預設網域名稱通過瀏覽器訪問OSS中的圖片或網頁檔案時,會直接下載。所以,如果您的使用者需通過瀏覽器預覽Bucket中的圖片或網頁檔案,需為Bucket綁定自訂網域名,並在此項中添加已綁定的網域名稱。如何綁定自訂網域名,請參見綁定自訂網域名。
proxy_set_header Host
添加此項時,Nginx會在向OSS請求的時候,將$host替換為ECS的訪問地址。
遇到以下情況時,您需要添加此項。
遇到簽名錯誤問題。
如果您的網域名稱已解析到ECS執行個體的外網上,且您的使用者需要通過瀏覽器預覽Bucket中的圖片或網頁檔案。您可以將您的網域名稱綁定到ECS執行個體代理的Bucket上,不配置CNAME。在該情況下,proxy_pass項可直接配置Bucket的內網或外網訪問地址。如何綁定自訂網域名,請參見綁定自訂網域名。
說明該選項針對自訂網域名請求到Proxy 伺服器的情境。如果您使用IP地址直接請求訪問Proxy 伺服器, 您需要在nginx.conf檔案中注釋
proxy_set_header Host $host
。proxy_connect_timeout
設定與後端伺服器(如 OSS)的連線逾時時間。此逾時配置決定了 Nginx 在建立與後端伺服器的串連時,最長等待的時間。如果逾時,Nginx 將返回錯誤響應。
proxy_read_timeout
控制 Nginx 從後端伺服器讀取響應資料的逾時時間。如果在此時間內未能從後端伺服器讀取到資料,Nginx 將返回錯誤響應。這對於處理可能回應時間較長的請求非常重要。
proxy_send_timeout
設定 Nginx 向後端伺服器發送請求資料的逾時時間。此參數確保 Nginx 在等待請求資料發送到後端伺服器期間保持串連,直到逾時或串連顯式關閉。
proxy_set_header Connection
設定代理要求標頭中的
Connection
欄位為空白字串,表示在代理請求時,Nginx 不會添加Connection
頭部。這樣可以避免 HTTP/1.1 持久串連問題,確保與後端伺服器的串連處理正確。proxy_buffering
控制Nginx是否緩衝從後端伺服器接收到的資料。設定為
off
意味著Nginx將立即轉寄資料給用戶端,而不會進行緩衝,這可以降低延遲,但也可能增加頻寬消耗。proxy_request_buffering
決定 Nginx 是否在將請求體轉寄給後端伺服器之前等待整個請求體完全接收。設定為
off
表示Nginx將開始接收資料後立即轉寄,無需等待整個請求體接收完成,這有利於即時性要求較高的應用情境。
返回Nginx主程式檔案夾,雙擊nginx.exe啟動Nginx。
開放ECS執行個體的TCP 80連接埠。
Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。
如何配置,請參見添加安全性群組規則。
測試使用ECS外網地址加檔案訪問路徑訪問OSS資源。
本文跳轉的網域名稱以OSS預設網域名稱為例。使用本地瀏覽器訪問時,OSS資源預設會被下載。如果您需要實現訪問OSS資源時預覽,您在配置proxy_pass時需要使用自訂網域名。
說明如果訪問的檔案讀寫權限為私人,檔案URL中還需要包含簽名資訊。詳情請參見簽名版本1。