基于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,搭建一个在线教育视频课程分享网站。
相关文章
|
2天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
23天前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
113 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
28天前
|
安全 应用服务中间件 Shell
nginx配置https的ssl证书和域名
nginx配置https的ssl证书和域名
|
30天前
|
应用服务中间件 nginx
nginx反向代理与证书设置
nginx反向代理与证书设置
35 3
|
29天前
|
负载均衡 算法 应用服务中间件
nginx反向代理与负载均衡
nginx反向代理与负载均衡
31 1
|
1月前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
30 4
|
4月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台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配置和提交命令,帮助用户顺利迁移模型存储路径。
|
3月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
4月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

热门文章

最新文章

相关产品

  • 对象存储