阿里云OSS的存儲空間(Bucket)訪問地址會隨機變換,您可以通過在ECS實例上配置OSS的反向代理,實現通過固定IP地址訪問OSS的存儲空間。
背景信息
阿里云OSS通過Restful API方式對外提供服務。最終用戶通過OSS默認域名或者綁定的自定義域名方式訪問,但是在某些場景下,用戶需要通過固定的IP地址訪問OSS:
某些企業由于安全機制,需要在出口防火墻配置策略,以限制內部員工和業務系統只能訪問指定的公網IP,但是OSS的Bucket訪問IP會隨機變換,導致需要經常修改防火墻策略。
金融云環境下,因金融云網絡架構限制,金融云內網類型的Bucket只能在金融云內部訪問,不支持在互聯網上直接訪問金融云內網類型Bucket。
針對以上問題,您可以通過在ECS實例上搭建反向代理的方式訪問OSS。
操作步驟
創建一個ECS實例。
本文以和對應Bucket相同地域的Ubuntu 18.04 64位系統的ECS實例為例。
如何創建ECS實例,請參見選購ECS實例。
連接ECS實例。
如何連接ECS實例,請參見 連接ECS實例。
執行以下命令更新apt源。
sudo apt-get update
執行以下命令安裝Nginx。
sudo apt-get install nginx
Nginx文件的默認安裝位置如下。目錄 說明 /usr/sbin/nginx 存放主程序 /etc/nginx 存放配置文件 /usr/share/nginx 存放靜態文件 /var/log/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; 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
對外提供反向代理服務的IP,即ECS實例的外網地址。
proxy_pass
跳轉的域名。
proxy_set_header Host
添加此項時,Nginx會在向OSS請求的時候,將$host替換為ECS的訪問地址。
遇到以下情況時,您需要添加此項。
遇到簽名錯誤問題。
如果您的域名已解析到ECS實例的外網上,且您的用戶需要通過瀏覽器預覽Bucket中的圖片或網頁文件。您可以將您的域名綁定到ECS實例代理的Bucket上,不配置CNAME。在該情況下,proxy_pass項可直接配置Bucket的內網或外網訪問地址。如何綁定自定義域名,請參見綁定自定義域名。
說明該選項針對自定義域名請求到代理服務器的場景。如果您使用IP地址直接請求訪問代理服務器, 您需要在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主程序文件夾。
cd /usr/sbin/
執行以下命令啟動Nginx。
sudo ./nginx
開放ECS實例的TCP 80端口。
Nginx默認使用80端口,您需在ECS的安全組配置中,允許用戶訪問TCP 80端口。
如何配置,請參見添加安全組規則。
測試使用ECS外網地址加文件訪問路徑訪問OSS資源。
本文跳轉的域名以OSS默認域名為例。使用本地瀏覽器訪問時,OSS資源默認會被下載。如果您需要實現訪問OSS資源時預覽,您在配置proxy_pass時需要使用自定義域名。
說明如果訪問的文件讀寫權限為私有,文件URL中還需要包含簽名信息。詳情請參見簽名版本1。