华为云对象存储OBS通过Nginx反向代理访问OBS_云淘科技

应用场景

一般情况下,用户会通过OBS提供的桶访问域名(例如https://bucketname.obs.cn-north-4.myhuaweicloud.com)或者绑定的自定义域名来访问OBS。

但在某些场景下,用户需要通过固定的IP地址访问OBS,例如:某些企业出于安全考虑,对于可访问的外部地址需要设置黑白名单,而这个时候对于OBS的访问则需要一个固定的IP地址。同样出于安全考虑,华为云OBS桶访问域名通过DNS解析的IP地址是会发生变化的,所以用户无法获取某个桶长期有效的固定IP地址。

此时,可以通过在ECS上搭建Nginx反向代理服务器,来实现通过固定IP地址访问OBS。

方案架构

本实践将Nginx部署在ECS上,搭建Nginx反向代理服务器。用户对代理无感知,只需要将请求发送到反向代理服务器,然后由反向代理服务器向OBS获取数据,再返回给用户。反向代理服务器和OBS对外看做一个整体,仅暴露代理服务器的IP地址,隐藏了OBS真实的域名或IP地址。

图1 通过Nginx反向代理访问OBS原理

约束与限制

已明确OBS桶所在区域和桶的访问域名,如华北-北京四区域的桶:nginx-obs.obs.cn-north-4.myhuaweicloud.com。查看方法
已在同区域购买Linux操作系统的ECS,本文以CentOS系统为例。购买ECS方法
ECS已绑定EIP,EIP用于从公网下载必要的Nginx安装包。

实施步骤

在ECS上安装Nginx

此处以CentOS 7.6版本的操作系统为例。

登录用于搭建Nginx反向代理服务器的ECS。
使用wget命令,下载对应当前操作系统版本的Nginx安装包。

wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

执行以下命令,建立Nginx的yum仓库。

rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

执行以下命令,安装Nginx。

yum -y install nginx

执行以下命令,启动Nginx并设置开机启动。

systemctl start nginx
systemctl enable nginx

在任意终端使用浏览器访问“http://ECS弹性公网IP地址”,显示如下图所示,说明Nginx安装成功。

图2 Nginx安装成功

修改Nginx配置文件,反向代理OBS桶

执行以下命令,打开“default.conf”配置文件。

vim /etc/nginx/conf.d/default.conf

按“i”键进入编辑模式,修改“default.conf”配置文件。

server {
      listen       80;
      server_name  **.**.**.**;  #此处填写ECS弹性公网IP地址 
      location / {
           proxy_pass  https://nginx-obs.obs.cn-north-4.myhuaweicloud.com;  #此处填写OBS桶访问域名,以http://或https://开头
           index  index.html index.htm ;  #指定网站初始页。如果包括多个文件,Nginx会根据文件的枚举顺序来检查。
           #当您使用ELB七层监听器时,建议设置X-Forwarded-For参数为空
           #proxy_set_header X-Forwarded-For "";
        }
}
表1 配置文件参数说明

参数

说明

server_name

提供反向代理服务的IP地址,即需要暴露给终端用户访问的固定IP地址。

此处填写搭建Nginx反向代理服务的ECS弹性公网IP地址,即当前登录的ECS弹性公网IP地址。

proxy_pass

被代理服务器的地址。

此处填写前提条件获取的OBS桶的访问域名,注意需要以http://或https://开头,例如:

https://nginx-obs.obs.cn-north-4.myhuaweicloud.com

注意:

当使用API、SDK、obsutil调用时,此处填写区域域名,例如:

obs.cn-north-4.myhuaweicloud.com

按“Esc”,输入“:wq”保存并退出。
执行以下命令,测试Nginx配置文件状态。

nginx -t

执行以下命令,重启Nginx服务使配置生效。

systemctl stop nginx
systemctl start nginx

(可选)配置OBS桶策略,允许Nginx代理服务器的IP地址访问OBS

如果您的OBS桶为公共读,或者访问私有桶内对象时在URL中携带签名,则可跳过此步骤。

如果您的OBS桶为私有桶,且不希望使用携带签名的URL访问桶内资源,则建议配置以下桶策略:仅允许Nginx代理服务器的IP地址访问OBS桶。

在OBS管理控制台左侧导航栏选择“对象存储”。
在桶列表单击待操作的桶,进入对象页面。
在左侧导航栏,单击“访问权限控制 > 桶策略”。
单击“创建”。
根据使用习惯,策略配置方式以可视化视图为例。单击“可视化视图”。
配置如下参数。

表2 桶策略参数配置

参数

说明

策略名称

输入自定义的桶策略名称

策略内容

效力

允许

被授权用户

被授权用户:所有帐号

授权资源

方式一:

资源范围:整个桶(包括桶内对象)

方式二:

资源范围:当前桶、指定对象
指定对象 – 资源路径:*

授权操作

动作范围:自定义配置
选择动作:Get*和List*

授权条件(可选)

键:SourceIp
条件运算符:IpAddress
值:

如果ECS使用公网DNS,取值为:

ECS的弹性公网IP地址

如果ECS使用华为云内网DNS,取值为:

100.64.0.0/10,214.0.0.0/7,ECS的私有IP地址

说明:

取值需要同时配置三个IP地址(IP地址段),请单击“增加”按钮。

其中,100网段和214网段为ECS内网访问OBS的网段。

单击右下角的“创建”,完成桶策略创建。
权限配置信息可以在桶策略列表查看。

图3 查看桶策略列表权限配置信息

验证反向代理配置

在任意终端使用ECS弹性公网IP地址+对象名访问OBS资源,如果能正常访问,则说明配置成功。

例如访问http://ECS弹性公网IP地址/ocean.jpg

图4 使用固定IP地址访问OBS资源

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家