由于Bucket的访问域名通过DNS解析,相关的IP地址可能会发生变化,导致用户无法获得长期有效的固定IP地址,但在某些安全需求下,用户需要通过固定IP地址访问OSS资源。为了解决该问题,可以在ECS上搭建Nginx反向代理服务器,用户只需通过访问服务器公网IP的80端口,即可访问Bucket中的文件,从而实现通过固定IP访问OSS资源的需求。
方案优势
通过在ECS实例上搭建反向代理服务器Nginx,您可以将OSS Bucket的访问请求通过代理服务器的固定IP转发至OSS内网Endpoint,从而实现以下目标:
固定IP访问:解决OSS默认域名IP动态变化的问题,满足企业防火墙白名单、第三方系统调用等需固定IP的场景。
安全增强:隐藏OSS Bucket名称及地域信息,仅暴露ECS域名或IP,降低直接暴露OSS的风险。
成本优化:通过ECS与OSS同地域内网通信,减少公网流量费用。
操作步骤
Ubuntu
以对应Bucket相同地域的Ubuntu 18.04 64位系统的ECS实例为例。
步骤一:安装Nginx
创建一个ECS实例并连接。如何创建和使用ECS实例,请参见控制台自定义购买并使用ECS实例。
开放ECS实例的TCP 80端口。Nginx默认使用80端口,您需在ECS的安全组配置中,允许用户访问TCP 80端口。如何配置,请参见添加安全组规则。
执行以下命令更新apt源。
sudo apt-get update
执行以下命令安装Nginx。
sudo apt-get install nginx
步骤二:配置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; } }
参数
说明
server_name
对外提供反向代理服务的IP,即ECS实例的外网地址。
proxy_pass
被代理服务器的地址。此处填写Bucket的访问域名。
当ECS实例与Bucket在同一地域时:填写目标Bucket的内网访问域名,如
http://bucketname.oss-cn-beijing-internal.aliyuncs.com
。当ECS实例与Bucket不在同一地域时:填写目标Bucket的外网访问域名,如
http://bucketname.oss-cn-beijing.aliyuncs.com
关于访问域名的更多信息,请参见访问域名(Endpoint)。
按“Esc”,输入“:wq”保存并退出。
执行以下命令,测试Nginx配置文件状态。
nginx -t
执行以下命令,重启Nginx服务使配置生效。
systemctl restart nginx
CentOS
您可以点击一键部署通过ROS快速搭建基于CentOS的ECS实例实现OSS反向代理,无需手动执行以下操作步骤。
以和Bucket相同地域的CentOS 7.6 64位系统的ECS实例为例。
步骤一:安装Nginx
创建一个ECS实例并连接。如何创建和使用ECS实例,请参见控制台自定义购买并使用ECS实例
开放ECS实例的TCP 80端口。Nginx默认使用80端口,您需在ECS的安全组配置中,允许用户访问TCP 80端口。如何配置,请参见添加安全组规则。
执行以下命令安装Nginx。
sudo yum install -y nginx
步骤二:配置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; } }
参数
说明
server_name
对外提供反向代理服务的IP,即ECS实例的外网地址。
proxy_pass
被代理服务器的地址。此处填写Bucket的访问域名。
当ECS实例与Bucket在同一地域时:填写目标Bucket的内网访问域名,如
http://bucketname.oss-cn-beijing-internal.aliyuncs.com
。当ECS实例与Bucket不在同一地域时:填写目标Bucket的外网访问域名,如
http://bucketname.oss-cn-beijing.aliyuncs.com
关于访问域名的更多信息,请参见访问域名(Endpoint)。
按“Esc”,输入“:wq”保存并退出。
执行以下命令,测试Nginx配置文件状态。
nginx -t
执行以下命令,重启Nginx服务使配置生效。
systemctl restart nginx
Windows
以和Bucket相同地域的Windows Server 2019数据中心版64位中文版系统的ECS实例为例。
步骤一:安装Nginx
创建一个ECS实例并连接,如何创建和使用ECS实例,请参见控制台自定义购买并使用ECS实例
开放ECS实例的TCP 80端口。Nginx默认使用80端口,您需在ECS的安全组配置中,允许用户访问TCP 80端口。如何配置,请参见添加安全组规则。
下载Nginx并解压。本文以Nginx-1.19.2版本为例。
步骤二:配置Nginx
本文仅提供演示环境。考虑到您的数据安全,强烈建议您在实际使用环境中配置HTTPS模块。如何配置,请参见Nginx或Tengine服务器配置SSL证书。
以下配置方式只能代理访问一个Bucket。
进入conf文件夹,使用记事本打开nginx.conf配置文件。
修改配置文件内容。
server { listen 80; server_name 47.**.**.73; location / { proxy_pass http://bucketname.oss-cn-beijing-internal.aliyuncs.com; proxy_http_version 1.1; } }
参数
说明
server_name
对外提供反向代理服务的IP,即ECS实例的外网地址。
proxy_pass
被代理服务器的地址。此处填写Bucket的访问域名。
当ECS实例与Bucket在同一地域时:填写目标Bucket的内网访问域名,如
http://bucketname.oss-cn-beijing-internal.aliyuncs.com
。当ECS实例与Bucket不在同一地域时:填写目标Bucket的外网访问域名,如
http://bucketname.oss-cn-beijing.aliyuncs.com
关于访问域名的更多信息,请参见访问域名(Endpoint)。
返回Nginx主程序文件夹,双击nginx.exe启动Nginx。
结果验证
使用ECS公网IP地址结合文件访问路径,测试访问OSS资源。在任意终端中,使用ECS公网IP地址 + 对象名访问OSS中的公共读文件。如果能够正常访问,则说明配置成功。例如:访问 http://ECS公网IP地址/demo.png得到如下结果:
如果您需要访问的文件读写权限为私有读写,则需要在访问文件的URL中包含签名信息,详情请参见签名版本4(推荐)。
常用配置参数说明
对于不同场景,您可以参考以下代码按您的业务场景修改nginx.conf文件中的HTTP模块。
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 | 是 | 被代理服务器的地址。此处填写Bucket的访问域名。
关于访问域名的更多信息,请参见访问域名(Endpoint)。 |
proxy_set_header Host | 否 | 添加此项时,Nginx会在向OSS请求的时候,将$host替换为ECS的访问地址。 遇到以下情况时,您需要添加此项。
|
proxy_connect_timeout | 否 | 设置与OSS的连接超时时间。此超时配置决定了 Nginx 在建立与后端服务器的连接时,最长等待的时间。如果超时,Nginx 将返回错误响应。 |
proxy_read_timeout | 否 | 控制 Nginx 从后端服务器读取响应数据的超时时间。如果在此时间内未能从后端服务器读取到数据,Nginx 将返回错误响应。这对于处理可能响应时间较长的请求非常重要。 |
proxy_send_timeout | 否 | 设置 Nginx 向后端服务器发送请求数据的超时时间。此参数确保 Nginx 在等待请求数据发送到后端服务器期间保持连接,直到超时或连接显式关闭。 |
proxy_set_header Connection | 否 | 设置代理请求头中的 |
proxy_buffering | 否 | 控制Nginx是否缓存从后端服务器接收到的数据。 如果取值为on,Nginx会把后端返回的内容先放到缓冲区,然后再返回给客户端。 如果取值为off,Nginx会立即把从后端收到的响应内容传送给客户端,而不会进行缓存,这可以降低延迟,但也可能增加带宽消耗。 |
proxy_request_buffering | 否 | 决定 Nginx 是否在将请求体转发给后端服务器之前等待整个请求体完全接收。设置为 |