基于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,搭建一个在线教育视频课程分享网站。
相关文章
|
15天前
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
53 18
|
2月前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
158 11
|
2月前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
83 5
|
2月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
161 3
|
3月前
|
网络协议 安全 文件存储
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问,即使IP地址变化,也能通过DDNS服务保持连接。适用于家庭网络远程访问设备及企业临时或移动设备管理,提供便捷性和灵活性。示例代码展示了如何使用Python实现基本的DDNS更新。尽管存在服务可靠性和安全性挑战,DDNS仍极大提升了网络资源的利用效率。
146 6
|
3月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
140 3
|
3月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
213 3
|
7月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
3月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
6月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决

热门文章

最新文章

相关产品

  • 对象存储