由於Bucket的訪問網域名稱通過DNS解析,相關的IP地址可能會發生變化,導致使用者無法獲得長期有效固定IP地址,但在某些安全需求下,使用者需要通過固定IP地址訪問OSS資源。為瞭解決該問題,可以在ECS上搭建Nginx反向 Proxy伺服器,使用者只需通過訪問伺服器公網IP的80連接埠,即可訪問Bucket中的檔案,從而實現通過固定IP訪問OSS資源的需求。
方案優勢
通過在ECS執行個體上搭建反向 Proxy伺服器Nginx,您可以將OSS Bucket的訪問請求通過Proxy 伺服器的固定IP轉寄至OSS內網Endpoint,從而實現以下目標:
固定IP訪問:解決OSS預設網域名稱IP動態變化的問題,滿足企業防火牆白名單、第三方系統調用等需固定IP的情境。
安全增強:隱藏OSS Bucket名稱及地區資訊,僅暴露ECS網域名稱或IP,降低直接暴露OSS的風險。
成本最佳化:通過ECS與OSS同地區內網通訊,減少公網流量費用。
操作步驟
Ubuntu
以對應Bucket相同地區的Ubuntu 18.04 64位系統的ECS執行個體為例。
步驟一:安裝Nginx
建立一個ECS執行個體並串連。如何建立和使用ECS執行個體,請參見控制台自訂購買並使用ECS執行個體。
開放ECS執行個體的TCP 80連接埠。Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。如何配置,請參見添加安全性群組規則。
執行以下命令更新apt源。
sudo apt-get update
執行以下命令安裝Nginx。
sudo apt-get install nginx
步驟二:配置Nginx
執行以下命令開啟Nginx設定檔nginx.conf。
sudo vi /etc/nginx/nginx.conf
參考以下說明修改nginx.conf檔案中的HTTP模組。
重要本文僅提供示範環境。考慮到您的資料安全,強烈建議您在實際使用環境中配置HTTPS模組。如何配置,請參見Nginx或Tengine伺服器配置SSL認證。
以下配置方式只能代理訪問一個Bucket。
server { listen 80; server_name 47.**.**.73; location / { proxy_pass http://bucketname.oss-cn-beijing-internal.aliyuncs.com; proxy_http_version 1.1; } }
參數
說明
server_name
對外提供反向 Proxy服務的IP,即ECS執行個體的外網地址。
proxy_pass
被Proxy 伺服器的地址。此處填寫Bucket的訪問網域名稱。
當ECS執行個體與Bucket在同一地區時:填寫目標Bucket的內網訪問網域名稱,如
http://bucketname.oss-cn-beijing-internal.aliyuncs.com
。當ECS執行個體與Bucket不在同一地區時:填寫目標Bucket的外網訪問網域名稱,如
http://bucketname.oss-cn-beijing.aliyuncs.com
關於訪問網域名稱的更多資訊,請參見訪問網域名稱(Endpoint)。
按“Esc”,輸入“:wq”儲存並退出。
執行以下命令,測試Nginx設定檔狀態。
nginx -t
執行以下命令,重啟Nginx服務使配置生效。
systemctl restart nginx
CentOS
以和Bucket相同地區的CentOS 7.6 64位系統的ECS執行個體為例。
步驟一:安裝Nginx
建立一個ECS執行個體並串連。如何建立和使用ECS執行個體,請參見控制台自訂購買並使用ECS執行個體
開放ECS執行個體的TCP 80連接埠。Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。如何配置,請參見添加安全性群組規則。
執行以下命令安裝Nginx。
sudo yum install -y nginx
步驟二:配置Nginx
執行以下命令開啟Nginx設定檔nginx.conf。
sudo vi /etc/nginx/nginx.conf
參考以下說明修改nginx.conf檔案中的HTTP模組。
重要本文僅提供示範環境。考慮到您的資料安全,強烈建議您在實際使用環境中配置HTTPS模組。如何配置,請參見Nginx或Tengine伺服器配置SSL認證。
以下配置方式只能代理訪問一個Bucket。
server { listen 80; server_name 47.**.**.73; location / { proxy_pass http://bucketname.oss-cn-beijing-internal.aliyuncs.com; proxy_http_version 1.1; } }
參數
說明
server_name
對外提供反向 Proxy服務的IP,即ECS執行個體的外網地址。
proxy_pass
被Proxy 伺服器的地址。此處填寫Bucket的訪問網域名稱。
當ECS執行個體與Bucket在同一地區時:填寫目標Bucket的內網訪問網域名稱,如
http://bucketname.oss-cn-beijing-internal.aliyuncs.com
。當ECS執行個體與Bucket不在同一地區時:填寫目標Bucket的外網訪問網域名稱,如
http://bucketname.oss-cn-beijing.aliyuncs.com
關於訪問網域名稱的更多資訊,請參見訪問網域名稱(Endpoint)。
按“Esc”,輸入“:wq”儲存並退出。
執行以下命令,測試Nginx設定檔狀態。
nginx -t
執行以下命令,重啟Nginx服務使配置生效。
systemctl restart nginx
Windows
以和Bucket相同地區的Windows Server 2019資料中心版64位中文版系統的ECS執行個體為例。
步驟一:安裝Nginx
建立一個ECS執行個體並串連,如何建立和使用ECS執行個體,請參見控制台自訂購買並使用ECS執行個體
開放ECS執行個體的TCP 80連接埠。Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。如何配置,請參見添加安全性群組規則。
下載Nginx並解壓。本文以Nginx-1.19.2版本為例。
步驟二:配置Nginx
本文僅提供示範環境。考慮到您的資料安全,強烈建議您在實際使用環境中配置HTTPS模組。如何配置,請參見Nginx或Tengine伺服器配置SSL認證。
以下配置方式只能代理訪問一個Bucket。
進入conf檔案夾,使用記事本開啟nginx.conf設定檔。
修改設定檔內容。
server { listen 80; server_name 47.**.**.73; location / { proxy_pass http://bucketname.oss-cn-beijing-internal.aliyuncs.com; proxy_http_version 1.1; } }
參數
說明
server_name
對外提供反向 Proxy服務的IP,即ECS執行個體的外網地址。
proxy_pass
被Proxy 伺服器的地址。此處填寫Bucket的訪問網域名稱。
當ECS執行個體與Bucket在同一地區時:填寫目標Bucket的內網訪問網域名稱,如
http://bucketname.oss-cn-beijing-internal.aliyuncs.com
。當ECS執行個體與Bucket不在同一地區時:填寫目標Bucket的外網訪問網域名稱,如
http://bucketname.oss-cn-beijing.aliyuncs.com
關於訪問網域名稱的更多資訊,請參見訪問網域名稱(Endpoint)。
返回Nginx主程式檔案夾,雙擊nginx.exe啟動Nginx。
結果驗證
使用ECS公網IP地址結合檔案訪問路徑,測試訪問OSS資源。在任意終端中,使用ECS公網IP地址 + 對象名訪問OSS中的公用讀取檔案。如果能夠正常訪問,則說明配置成功。
如果您需要訪問的檔案讀寫權限為私人讀寫,則需要在訪問檔案的URL中包含簽名資訊,詳情請參見簽名版本4(推薦)。
常用配置參數說明
對於不同情境,您可以參考以下代碼按您的業務情境修改nginx.conf檔案中的HTTP模組。
server {
listen 80;
server_name 47.**.**.73;
location / {
proxy_pass http://bucketname.oss-cn-beijing-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 | 是 | 被Proxy 伺服器的地址。此處填寫Bucket的訪問網域名稱。
關於訪問網域名稱的更多資訊,請參見訪問網域名稱(Endpoint)。 |
proxy_set_header Host | 否 | 添加此項時,Nginx會在向OSS請求的時候,將$host替換為ECS的訪問地址。 遇到以下情況時,您需要添加此項。
|
proxy_connect_timeout | 否 | 設定與OSS的連線逾時時間。此逾時配置決定了 Nginx 在建立與後端伺服器的串連時,最長等待的時間。如果逾時,Nginx 將返回錯誤響應。 |
proxy_read_timeout | 否 | 控制 Nginx 從後端伺服器讀取響應資料的逾時時間。如果在此時間內未能從後端伺服器讀取到資料,Nginx 將返回錯誤響應。這對於處理可能回應時間較長的請求非常重要。 |
proxy_send_timeout | 否 | 設定 Nginx 向後端伺服器發送請求資料的逾時時間。此參數確保 Nginx 在等待請求資料發送到後端伺服器期間保持串連,直到逾時或串連顯式關閉。 |
proxy_set_header Connection | 否 | 設定代理要求標頭中的 |
proxy_buffering | 否 | 控制Nginx是否緩衝從後端伺服器接收到的資料。 如果取值為on,Nginx會把後端返回的內容先放到緩衝區,然後再返回給用戶端。 如果取值為off,Nginx會立即把從後端收到的響應內容傳送給用戶端,而不會進行緩衝,這可以降低延遲,但也可能增加頻寬消耗。 |
proxy_request_buffering | 否 | 決定 Nginx 是否在將請求體轉寄給後端伺服器之前等待整個請求體完全接收。設定為 |