全部產品
Search
文件中心

Object Storage Service:使用ECS執行個體反向 ProxyOSS

更新時間:Feb 21, 2025

由於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

  1. 建立一個ECS執行個體並串連。如何建立和使用ECS執行個體,請參見控制台自訂購買並使用ECS執行個體

  2. 開放ECS執行個體的TCP 80連接埠。Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。如何配置,請參見添加安全性群組規則

  3. 執行以下命令更新apt源。

    sudo apt-get update
  4. 執行以下命令安裝Nginx。

    sudo apt-get install nginx

步驟二:配置Nginx

  1. 執行以下命令開啟Nginx設定檔nginx.conf

    sudo vi /etc/nginx/nginx.conf
  2. 參考以下說明修改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)

  3. 按“Esc”,輸入“:wq”儲存並退出。

  4. 執行以下命令,測試Nginx設定檔狀態。

    nginx -t
  5. 執行以下命令,重啟Nginx服務使配置生效。

    systemctl restart nginx

CentOS

說明

以和Bucket相同地區的CentOS 7.6 64位系統的ECS執行個體為例。

步驟一:安裝Nginx

  1. 建立一個ECS執行個體並串連。如何建立和使用ECS執行個體,請參見控制台自訂購買並使用ECS執行個體

  2. 開放ECS執行個體的TCP 80連接埠。Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。如何配置,請參見添加安全性群組規則

  3. 執行以下命令安裝Nginx。

    sudo yum install -y nginx

步驟二:配置Nginx

  1. 執行以下命令開啟Nginx設定檔nginx.conf

    sudo vi /etc/nginx/nginx.conf
  2. 參考以下說明修改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)

  3. 按“Esc”,輸入“:wq”儲存並退出。

  4. 執行以下命令,測試Nginx設定檔狀態。

    nginx -t
  5. 執行以下命令,重啟Nginx服務使配置生效。

    systemctl restart nginx

Windows

說明

以和Bucket相同地區的Windows Server 2019資料中心版64位中文版系統的ECS執行個體為例。

步驟一:安裝Nginx

  1. 建立一個ECS執行個體並串連,如何建立和使用ECS執行個體,請參見控制台自訂購買並使用ECS執行個體

  2. 開放ECS執行個體的TCP 80連接埠。Nginx預設使用80連接埠,您需在ECS的安全性群組配置中,允許使用者訪問TCP 80連接埠。如何配置,請參見添加安全性群組規則

  3. 下載Nginx並解壓。本文以Nginx-1.19.2版本為例。

步驟二:配置Nginx

重要
  • 本文僅提供示範環境。考慮到您的資料安全,強烈建議您在實際使用環境中配置HTTPS模組。如何配置,請參見Nginx或Tengine伺服器配置SSL認證

  • 以下配置方式只能代理訪問一個Bucket。

  1. 進入conf檔案夾,使用記事本開啟nginx.conf設定檔。

  2. 修改設定檔內容。

    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)

  3. 返回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的訪問網域名稱。

  • 當ECS執行個體與Bucket在同一地區時:填寫目標Bucket的內網訪問網域名稱,如http://bucketname.oss-cn-beijing-internal.aliyuncs.com

  • 當ECS執行個體與Bucket不在同一地區時:填寫目標Bucket的外網訪問網域名稱,如http://bucketname.oss-cn-beijing.aliyuncs.com

關於訪問網域名稱的更多資訊,請參見訪問網域名稱(Endpoint)

proxy_set_header Host

添加此項時,Nginx會在向OSS請求的時候,將$host替換為ECS的訪問地址。

遇到以下情況時,您需要添加此項。

  • 遇到簽名錯誤問題。

  • 如果您的網域名稱已解析到ECS執行個體的外網,且您的使用者需要通過瀏覽器預覽Bucket中的圖片或網頁檔案。您可以將您的網域名稱綁定到ECS執行個體代理的Bucket上,而無需配置CNAME。

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是否緩衝從後端伺服器接收到的資料。

如果取值為on,Nginx會把後端返回的內容先放到緩衝區,然後再返回給用戶端。

如果取值為off,Nginx會立即把從後端收到的響應內容傳送給用戶端,而不會進行緩衝,這可以降低延遲,但也可能增加頻寬消耗。

proxy_request_buffering

決定 Nginx 是否在將請求體轉寄給後端伺服器之前等待整個請求體完全接收。設定為off表示Nginx將開始接收資料後立即轉寄,無需等待整個請求體接收完成,這有利於即時性要求較高的應用情境。

樣本:通過瀏覽器預覽Bucket中的圖片或網頁檔案

因OSS的安全設定,當使用預設網域名稱通過瀏覽器訪問OSS中的圖片或網頁檔案時,會直接下載。所以,如果您的使用者需通過瀏覽器預覽Bucket中的圖片或網頁檔案,需為Bucket綁定自訂網域名,並在proxy_pass中填寫已綁定的網域名稱。如何綁定自訂網域名,請參見綁定自訂網域名至Bucket預設網域名稱

server {
        listen 80;
        server_name 47.**.**.73; 

        location / {
            proxy_pass http://static.example.com;
            proxy_http_version 1.1;
     }  
}