基于nginx反向代理实现OSS固定域名IP访问

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 本文基于阿里云OSS手册:https://help.aliyun.com/zh/oss/use-cases/use-an-ecs-instance-that-runs-centos-to-configure-a-reverse-proxy-for-access-to-oss,继续深入讨论如何利用nginx反向代理,实现固定的IP/域名访问OSS bucket。官方文档能够解决大部分的反向代理固定IP访问oss bucket的场景,但是对于必须使用域名作为endpoint的系统,会出现signatrue鉴权问题。本文继续在官方文档的基础上,将反向代理需要域名作为endpoint的场景补齐方案。

【背景】

为什么需要固定的IP/域名访问OSS bucket呢?

  • 对于阿里公有云OSS:某些企业内网应用需要访问阿里云公网OSS,在没有拉专线的情况下,需要在阿里云公网VPC开通一个ECS,ECS部署nginx反向代理连接公有云OSS bucket,最后实现企业内网应用程序访问nginx反向代理IP(ECS公网IP)进而访问阿里云OSS bucket。
  • 对于阿里私有云OSS:反过来,如果某些企业公网应用系统需要访问阿里私有云平台OSS,在没有拉专线的情况下,需要在私有云VPC开通一个ECS,ECS部署nginx反向代理连接私有云OSS bucket,最后实现企业公网应用系统访问nginx反向代理IP(私有云ECS绑定的公网IP)进而访问阿里私有云平台OSS bucket。
  • 对于阿里公有云OSS:某些企业由于安全机制,需要在出口防火墙配置策略,以限制内部员工和业务系统只能访问指定的公网IP,但是OSS的Bucket访问IP会随机变换,导致需要经常修改防火墙策略。
  • 对于阿里私有云OSS:金融云环境下,因金融云网络架构限制,金融云内网类型的Bucket只能在金融云内部访问,不支持在互联网上直接访问金融云内网类型Bucket。

【OSS官方文档的疏漏】

本文基于阿里云OSS手册:https://help.aliyun.com/zh/oss/use-cases/use-an-ecs-instance-that-runs-centos-to-configure-a-reverse-proxy-for-access-to-oss,继续深入讨论如何利用nginx反向代理,实现固定的IP/域名访问OSS bucket。官方文档能够解决大部分的反向代理固定IP访问oss bucket的场景,比如应用程序调用OSS sdk、ossutil工具等,通过将OSS endpoint设置为nginx反向代理的IP,就可以访问OSS bucket。

但是,对于oss-browser、备份一体机(veritas、爱数等)等系统,将OSS endpoint设置为nginx反向代理的IP,访问OSS bucket会出现鉴权问题:

1.png

【错误原因分析】

oss-browser、备份一体机(veritas、爱数等)等系统,在将ak、sk、endpoint等参数转换为signature签名的时候,endpoint必须使用域名,使用IP的endpoint参数被转换得到的signatrue无法被oss后台认可。

因此,技术人员必须用OSS endpoint“原始域名”作为访问bucket的 endpoint。但是,OSS endpoint原始域名解析出来的IP是oss bucket的实际IP,应用系统需要直接访问的是nginx反向代理IP,怎么解决该问题呢?我们采用以下方案:

6.png


【本地hosts域名解析配置】

应用系统本地服务器配置hosts:

# 应用程序本地机器配置hosts文件: 
ECS_IP  OSS_endpoint_原始域名
ECS_IP  bucketname_OSS_endpoint_原始域名

## 比如: 
112.110.4.11  oss-cn-beijing-internal.aliyuncs.com 
112.110.4.11  rj51.oss-cn-beijing-internal.aliyuncs.com 112.110.4.11  
rj61.oss-cn-beijing-internal.aliyuncs.com 
## 其中:rj51、rj61就是被访问的bucket 名称


【nginx反向代理配置】

在nginx里面,配置server_name的时候,必须将部署nginx的ECS IP、OSS endpoint原始域名 都加上。

同时,为了能够正常鉴权,必须设置:proxy_pass http://${OSS endpoint原始域名};  proxy_set_header Host $http_host;

完整的nginx server配置参考如下:

server {
    listen       ${port} default_server;  ## 反向代理的端口,一般是80/443
    # listen       [::]:80 default_server;  ## IPv6的端口监听一般可以不开启
    server_name  ${ip}  ${OSS endpoint原始域名};  ## 将反向代理IP(也就是部署nginx的ECS IP)、OSS endpoint原始域,都作为server_name
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    # include /etc/nginx/default.d/*.conf; ## 如果有其他配置,建议放到/etc/nginx/default.d/ 目录下的conf配置文件

    location / {
    proxy_pass https://${OSS endpoint原始域名}; ## 将访问nginx 反向代理域名(IP)的请求,转发到OSS bucket真正的域名。
    proxy_set_header Host $http_host; ## 保持应用系统原始访问OSS bucket配置的endpoint 域名host,否则还会出现鉴权问题。
    }
}


【验证效果】

oss-browser、备份一体机(veritas、爱数等)等系统,配置endpoint为${OSS endpoint原始域名},然后将ak/sk、oss://${bucket名字}等参数填上,就可以正常访问OSS bucket,不再出现鉴权问题:

3.jpg

4.jpg


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
4天前
|
小程序 应用服务中间件 Linux
【Nginx】微信小程序后端开发、一个域名访问多个服务
【Nginx】微信小程序后端开发、一个域名访问多个服务
16 0
|
4天前
|
监控 数据可视化 安全
如何查找访问 Nginx 的前 10 个 IP?
【5月更文挑战第1天】
25 1
如何查找访问 Nginx 的前 10 个 IP?
|
4天前
|
域名解析 网络协议 网络安全
阿里云DNS常见问题之域名DNS完成实名认证还是锁定状态如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
4天前
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
阿里云域名购买注册流程_创建信息模板_域名实名认证全流程
阿里云域名注册指南:访问[阿里云域名注册入口,查询并注册心仪域名,选择后缀,加入清单后结算。价格因后缀而异,如.com首年78元。创建域名信息模板完成实名认证,首次需上传资料。获取优惠口令并使用可享折扣
|
4天前
|
运维 JavaScript Java
Serverless 应用引擎产品使用之在阿里云函数计算中想为两个不同的服务分别开通自定义域名如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
28 1
|
4天前
|
弹性计算 网络协议 关系型数据库
ECS域名问题之国内实例能不能导入阿里云新加坡的ECS和RDS如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
2天前
|
域名解析 网络协议 CDN
网站接入阿里云CDN实现域名加速全流程
阿小云网站已通过ICP备案在广州节点上线,但为提升全国用户访问速度,计划接入CDN。以下是4步CDN接入教程:1) 开通阿里云CDN服务;2) 添加加速域名;3) 使用DNS解析验证域名归属权;4) 配置CNAME实现域名与CDN节点关联。详细指南见阿里云CDN官方文档。
|
4天前
阿里云域名注册流程和备案流程(详细图文教程)
阿里云域名注册指南:访问[阿里云域名注册入口,查询并注册心仪域名,如.com/.cn,加入清单后结算。价格因后缀而异,如.com首年78元。创建信息模板进行实名认证,首次需上传资料。获取域名优惠口令并使用,详细步骤见文档。备案流程参照阿里云ICP备案系统。
126 2
|
4天前
阿里云域名注册流程图和费用说明,新手第一次购买域名攻略
阿里云域名注册指南:访问[阿里云域名注册入口查询域名,选择后缀,加入清单并结算。价格如.com: 78元/首年。创建信息模板进行实名认证。获取优惠口令并使用,参照流程完成购买。详细步骤及域名价格详情见原文。
66 0

热门文章

最新文章