文档

基于CentOS的ECS实例实现OSS反向代理

更新时间:

阿里云OSS的存储空间(Bucket)访问地址会随机变换,您可以通过在ECS实例上配置OSS的反向代理,实现通过固定IP地址访问OSS的存储空间。

背景信息

阿里云OSS通过Restful API方式对外提供服务。最终用户通过OSS默认域名或者绑定的自定义域名方式访问,但是在某些场景下,用户需要通过固定的IP地址访问OSS:

  • 某些企业由于安全机制,需要在出口防火墙配置策略,以限制内部员工和业务系统只能访问指定的公网IP,但是OSS的Bucket访问IP会随机变换,导致需要经常修改防火墙策略。

  • 金融云环境下,因金融云网络架构限制,金融云内网类型的Bucket只能在金融云内部访问,不支持在互联网上直接访问金融云内网类型Bucket。

针对以上问题,您可以通过在ECS实例上搭建反向代理的方式访问OSS。

操作步骤

快速部署

您可以使用资源编排ROS一键配置1个云服务器ECS实例和1个OSS Bucket,并在CentOS的云服务器ECS实例上部署Nginx,从而快速体验OSS反向代理。使用资源编排ROS快速体验OSS反向代理的操作步骤如下。

  1. 一键部署云资源。

    1. 打开一键配置模板链接

    2. 资源编排 ROS控制台,输入资源栈名称,输入新建OSS Bucket的名称,设置新购ECS的可用区、实例类型、系统盘类型、实例密码,关闭新建OSS Bucket,选择已有存储空间的名称,然后单击创建

      资源栈的资源栈信息页签下的状态显示创建中

    3. 资源栈的状态显示创建成功后,单击输出页签,查看一键部署的云服务器ECS实例、OSS Bucket等资源。

  2. 体验OSS反向代理。

    1. 输出页签下,复制ECSPublicIP的值。

    2. 登录OSS管理控制台。在Bucket 列表页面,单击创建的Bucket。在文件列表页面,单击上传文件。根据页面提示,上传读写权限为公共读的文件,然后获取文件名。

    3. 在浏览器中使用ECSPublicIP/文件名访问OSS资源。

  3. 体验完成后,释放测试资源,避免继续产生费用。

    1. 资源栈页面的右上角,单击删除

    2. 删除资源栈页面,确保删除方式释放资源,然后单击确定

手动部署

  1. 创建一个ECS实例。

    本文以和Bucket相同地域的CentOS 7.6 64位系统的ECS实例为例。

    如何创建ECS实例,请参见选购ECS实例

  2. 连接ECS实例。

    如何连接ECS实例,请参见 连接ECS实例

  3. 执行以下命令安装Nginx。

    sudo yum install -y nginx
    Nginx文件的默认安装位置如下。
    目录 说明
    /usr/sbin/nginx 存放主程序
    /etc/nginx 存放配置文件
    /usr/share/nginx 存放静态文件
    /var/log/nginx 存放日志
  4. 执行以下命令打开Nginx配置文件nginx.conf

    sudo vi /etc/nginx/nginx.conf
  5. 参考以下说明修改nginx.conf文件中的HTTP模块。

    重要
    • 本文仅提供演示环境。考虑到您的数据安全,强烈建议您在实际使用环境中配置HTTPS模块。如何配置,请参见Nginx或Tengine服务器配置SSL证书

    • 以下配置方式只能代理访问一个Bucket。

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
    
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    
        location / {
        proxy_pass https://bucketname.oss-cn-beijing-internal.aliyuncs.com;
        proxy_set_header Host $host;
        }
    }

    参数

    说明

    server_name

    对外提供反向代理服务的IP,即ECS实例的外网地址。

    proxy_pass

    跳转的域名。

    • 当ECS实例与Bucket在同一地域时:填写目标Bucket的内网访问域名。关于内网访问域名的更多信息,请参见通过内网访问OSS

    • 当ECS实例与Bucket不在同一地域时:填写目标Bucket的外网访问域名。关于外网访问域名的更多信息,请参见通过外网访问OSS

    • 您的用户需通过浏览器预览Bucket中的图片或网页文件:因OSS的安全设置,当使用默认域名通过浏览器访问OSS中的图片或网页文件时,会直接下载。所以,如果您的用户需通过浏览器预览Bucket中的图片或网页文件,需为Bucket绑定自定义域名,并在此项中添加已绑定的域名。如何绑定自定义域名,请参见绑定自定义域名

    proxy_set_header Host

    添加此项时,Nginx会在向OSS请求的时候,将$host替换为ECS的访问地址。

    遇到以下情况时,您需要添加此项。

    • 遇到签名错误问题。

    • 如果您的域名已解析到ECS实例的外网上,且您的用户需要通过浏览器预览Bucket中的图片或网页文件。您可以将您的域名绑定到ECS实例代理的Bucket上,不配置CNAME。在该情况下,proxy_pass项可直接配置Bucket的内网或外网访问地址。如何绑定自定义域名,请参见绑定自定义域名

    说明

    该选项针对自定义域名请求到代理服务器的场景。如果您使用IP地址直接请求访问代理服务器, 您需要在nginx.conf文件中注释proxy_set_header Host $host

  6. 执行以下命令进入Nginx主程序文件夹。

    cd /usr/sbin/
  7. 执行以下命令启动Nginx。

    sudo ./nginx
  8. 开放ECS实例的TCP 80端口。

    Nginx默认使用80端口,您需在ECS的安全组配置中,允许用户访问TCP 80端口。

    如何配置,请参见添加安全组规则

  9. 测试使用ECS外网地址加文件访问路径访问OSS资源。

    本文跳转的域名以OSS默认域名为例。使用本地浏览器访问时,OSS资源默认会被下载。如果您需要实现访问OSS资源时预览,您在配置proxy_pass时需要使用自定义域名。

    说明

    如果访问的文件读写权限为私有,文件URL中还需要包含签名信息。详情请参见在URL中包含签名

相关文档

  • 本页导读 (1)
文档反馈