文档首页 > > 最佳实践> 通过Nginx反向代理访问OBS

通过Nginx反向代理访问OBS

分享
更新时间:2020/10/23 GMT+08:00

背景

一般情况下,用户会通过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安装包。

配置步骤

  1. 在ECS上安装Nginx

    1. 登录用于搭建Nginx反向代理服务器的ECS。
    2. 使用wget命令,下载对应当前操作系统版本的Nginx安装包。此处以CentOS 7.6版本的操作系统为例。
      wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    3. 执行以下命令,建立Nginx的yum仓库。此处以CentOS 7.6版本的操作系统为例。
      rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
    4. 执行以下命令,安装Nginx。
      yum -y install nginx
    5. 执行以下命令,启动Nginx并设置开机启动。
      systemctl start nginx
      systemctl enable nginx
    6. 在任意终端使用浏览器访问“http://ECS弹性公网IP地址”,显示如下图所示,说明Nginx安装成功。
      图2 Nginx安装成功

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

    1. 执行以下命令,打开“default.conf”配置文件。
      vim /etc/nginx/conf.d/default.conf
    2. 按“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 ;
              }
      表1 配置文件参数说明

      参数

      说明

      server_name

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

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

      proxy_pass

      被代理服务器的地址。

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

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

    3. 按“Esc”,输入“:wq”保存并退出。
    4. 执行以下命令,测试Nginx配置文件状态。
      nginx -t
    5. 执行以下命令,重启Nginx服务使配置生效。
      systemctl stop nginx
      systemctl start nginx

  3. 配置OBS桶策略,允许Nginx代理服务器的IP地址访问OBS

    为了桶中数据的安全,建议设置桶的标准桶策略为“私有”,再配置以下两条高级桶策略,仅允许Nginx代理服务器的IP地址访问OBS桶。

    1. 在OBS管理控制台左侧导航栏选择“对象存储”
    2. 在桶列表单击待操作的桶,进入“概览”页面。
    3. 在左侧导航栏,单击“访问权限控制”。
    4. 在“桶策略”页面“高级桶策略”下,单击“创建桶策略”。
    5. 配置第一条桶策略参数。
      图3 配置桶策略参数(1)
      表2 桶策略参数配置说明

      参数

      说明

      策略模式

      选择“自定义模式”

      效果

      选择“Allow”

      被授权用户

      • 选择包含 > 其他账号
      • 账号ID:*

      资源

      • 选择“包含 > 指定资源”
      • 资源名称:*

      动作

      • 包含
      • 动作名称:
        • Get*
        • List*

      条件

      • 条件运算符:IpAddress
      • 键:SourceIp
      • 值:
        • 如果ECS使用华为云内网DNS,则取值为100.64.0.0/10
        • 如果ECS使用公网DNS,则取值为ECS的弹性公网IP地址
    6. 单击“确定”,完成第一条桶策略创建。
    7. 再次单击“创建桶策略”,配置第二条桶策略参数。
      图4 配置桶策略参数(2)
      表3 桶策略参数配置说明

      参数

      说明

      策略模式

      选择“自定义模式”

      效果

      选择“Allow”

      被授权用户

      • 选择包含 > 其他账号
      • 账号ID:*

      资源

      选择“包含 > 配置到整个桶”

      动作

      • 包含
      • 动作名称:
        • List*

      条件

      • 条件运算符:IpAddress
      • 键:SourceIp
      • 值:
        • 如果ECS使用华为云内网DNS,则取值为100.64.0.0/10
        • 如果ECS使用公网DNS,则取值为ECS的弹性公网IP地址
    8. 单击“确定”,完成第二条桶策略创建。

  4. 验证反向代理配置

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

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

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

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问