背景
一般情況(kuang)下,用(yong)戶(hu)會(hui)通(tong)過OBS提供的桶訪問域名(例如(ru)//bucketname.obs.cn-jssz1.sjzxsls.net)的方式訪問OBS。
但在某些場景下,用(yong)戶需要(yao)(yao)通(tong)過固(gu)定(ding)的(de)IP地址訪(fang)問OBS,例如:某些企業出于(yu)安(an)(an)全考慮(lv),對(dui)于(yu)可訪(fang)問的(de)外(wai)部地址需要(yao)(yao)設(she)置(zhi)黑白名單,而這個時候對(dui)于(yu)OBS的(de)訪(fang)問則需要(yao)(yao)一個固(gu)定(ding)的(de)IP地址。同樣出于(yu)安(an)(an)全考慮(lv),天(tian)翼云OBS桶訪(fang)問域名通(tong)過DNS解析的(de)IP地址是(shi)會發生(sheng)變化的(de),所以用(yong)戶無法獲取某個桶長期有效的(de)固(gu)定(ding)IP地址。
此時(shi),可(ke)以(yi)通(tong)過(guo)在ECS上搭建Nginx反向代理服務器,來實現通(tong)過(guo)固定IP地(di)址訪問OBS。
原理介紹
本(ben)實踐(jian)將Nginx部署(shu)在ECS上,搭建Nginx反(fan)(fan)向代(dai)(dai)理(li)服(fu)(fu)(fu)務(wu)(wu)器(qi)(qi)。用戶對代(dai)(dai)理(li)無感(gan)知,只(zhi)需要將請求發送(song)到(dao)反(fan)(fan)向代(dai)(dai)理(li)服(fu)(fu)(fu)務(wu)(wu)器(qi)(qi),然后由反(fan)(fan)向代(dai)(dai)理(li)服(fu)(fu)(fu)務(wu)(wu)器(qi)(qi)向OBS獲取(qu)數據,再返(fan)回給用戶。反(fan)(fan)向代(dai)(dai)理(li)服(fu)(fu)(fu)務(wu)(wu)器(qi)(qi)和OBS對外看做一個整體(ti),僅暴(bao)露代(dai)(dai)理(li)服(fu)(fu)(fu)務(wu)(wu)器(qi)(qi)的(de)IP地(di)址,隱(yin)藏了OBS真實的(de)域名(ming)或(huo)IP地(di)址。
圖-通過Nginx反(fan)向(xiang)代理(li)(li)訪問OBS原理(li)(li)
前置條件
- 已明確OBS桶所在區域和桶的訪問域名,如蘇州區域的桶:nginx-obs.obs.cn-jssz1.sjzxsls.net。查看桶的信息
- 已在同區域購買Linux操作系統的ECS,本文以CentOS系統為例。
- ECS已綁定EIP,EIP用于從公網下載必要的Nginx安裝包。
操作步驟
在ECS上安裝Nginx
a.登錄(lu)用(yong)于搭建Nginx反向代理服(fu)務器的(de)ECS。
b.使用wget命令,下載對(dui)應當(dang)前操(cao)作(zuo)(zuo)系統(tong)版本的Nginx安裝包。此處(chu)以CentOS 7.6版本的操(cao)作(zuo)(zuo)系統(tong)為例。
wget //nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
c.執行(xing)以下(xia)命令,建立Nginx的yum倉庫。此處以CentOS 7.6版(ban)本的操作系統為(wei)例(li)。
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
d.執行以下(xia)命令(ling),安(an)裝(zhuang)Nginx。
yum -y install nginx
e.執(zhi)行以下命令,啟(qi)動(dong)Nginx并設置(zhi)開機啟(qi)動(dong)。
systemctl start nginx
systemctl enable nginx
f.在任意(yi)終端(duan)使(shi)用瀏覽器訪問“//ECS彈性IP地址(zhi)”,顯(xian)示如下圖所示,說明Nginx安裝(zhuang)成功(gong)。
圖-Nginx安裝(zhuang)成功
修改Nginx配置文件,反向代理OBS桶
a.執(zhi)行以(yi)下命令,打(da)開“default.conf”配(pei)置(zhi)文件。
vim /etc/nginx/conf.d/default.conf
b.按“i”鍵進入編輯模式(shi),修(xiu)改“default.conf”配(pei)置(zhi)文(wen)件(jian)。
server {
listen 8089; #天翼云針對公網IP默認封閉80端口,需要備案后才能使用,建議使用其他端口如:8089,或者使用內網80端口訪問。
server_name **.**.**.**; #此處填寫ECS彈性IP地址
location / {
proxy_pass //nginx-obs.obs.cn-jssz1.sjzxsls.net; #此處填寫OBS桶訪問域名,以//或//開頭
index index.html index.htm ;
}
}
表-配置文件參數說明
參數 | 說明 |
---|---|
server_name | 提供反向代理服務的IP地址,即需要暴露給終端用戶訪問的固定IP地址。 此處填寫搭建Nginx反向代理服務的ECS彈性IP地址,即當前登錄的ECS彈性IP地址。 |
proxy_pass | 被代理服務器的地址。此處填寫前提條件獲取的OBS桶的訪問域名, 注意需要以//或//開頭,例如://nginx-obs.obs.cn-jssz1.sjzxsls.net |
c.按“Esc”,輸入“:wq”保存并退出(chu)。
d.執行以下(xia)命令,測試(shi)Nginx配(pei)置文(wen)件(jian)狀態。
nginx -t
e.執行以下命令(ling),重(zhong)啟(qi)Nginx服務使配置(zhi)生效。
systemctl stop nginx
systemctl start nginx
配置OBS桶策略,允許Nginx代理服務器的IP地址訪問OBS(可選)
如果您的OBS桶(tong)為公共(gong)讀,或者(zhe)訪(fang)問私有桶(tong)內對(dui)象時(shi)在URL中(zhong)攜帶簽名(ming),則可跳過此(ci)步驟。
如果您(nin)的(de)(de)OBS桶(tong)為私(si)有桶(tong),且不(bu)希望使(shi)用攜帶簽名的(de)(de)URL訪問桶(tong)內資源,則建議配置以(yi)下桶(tong)策略或者桶(tong)ACLs策略:僅允(yun)許Nginx代理服(fu)務器(qi)的(de)(de)IP地址訪問OBS桶(tong)。
桶對象ACLs策略如下(xia):
賦予(yu)匿名(ming)用(yong)戶讀取(qu)權限
桶策略如下:
a.在(zai)OBS管理控(kong)制(zhi)臺左側導航欄選擇“對(dui)象存儲”。
b.在桶列表單擊待操作的桶,進(jin)入“概(gai)覽”頁面。
c.在左(zuo)側導(dao)航欄,單(dan)擊“訪問權限(xian)控制 > 桶策略”。
d.單擊(ji)“創(chuang)建桶策(ce)略”。
e.在桶策略模(mo)式(shi)(shi),選擇“自定義模(mo)式(shi)(shi)”。
f.配置如下參數。
表-桶策略參數配置
參數 說明 策略配置方式 可視化視圖 策略名稱 自定義 策略內容 效果 允許 被授權用戶
授權用戶:匿名用戶
用戶策略:包含以上用戶
資源
資源范圍:同時選擇當前桶和桶內對象
資源策略:包含以上資源
動作
選擇動作:Get和List
操作策略:包含以上動作
條件
條件運算符:IpAddress
鍵:SourceIp
值:
如果ECS使用公網DNS,取值為:ECS的彈性IP地址如果ECS使用天翼云內網DNS,取值為:100.64.0.0/10,214.0.0.0/7,ECS的私有IP地址
說明取(qu)值需要同時配置三個IP地址(zhi)(IP地址(zhi)段),之(zhi)間(jian)用英(ying)文逗號(,)隔開。
其中,100網(wang)段和214網(wang)段為ECS內網(wang)訪問OBS的(de)網(wang)
g.單擊右下(xia)角(jiao)的“配置確認(ren)”。
h.單(dan)擊右下角的“創(chuang)建”,完成桶策略創(chuang)建。
驗證反向代理配置
在任(ren)意(yi)終端(duan)使用ECS彈性IP地址(zhi)+對象名(ming)訪(fang)問OBS資源(yuan),如果能正常訪(fang)問,則(ze)說明配置(zhi)成功。
例如訪問//ECS彈(dan)性IP地址:端口/image.jpeg,能夠正常下載(zai)即(ji)可。
圖-使用(yong)固定IP地址訪問OBS資源