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

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 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快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
9月前
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
525 37
|
9月前
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
506 26
|
10月前
|
存储 API 数据安全/隐私保护
使用宝塔搭建MinIO并且设置域名访问
本文介绍了如何使用宝塔面板搭建MinIO并设置域名访问的完整流程。首先通过宝塔面板安装Docker及MinIO,配置域名与端口,完成Web管理界面的部署。接着,创建存储桶、配置访问规则和API密钥,实现资源的安全管理。最后,通过反向代理设置API接口,测试文件上传功能,确保MinIO可用于图片和文件资源的存储。作者Harry技术还分享了相关开源项目,适合开发者快速上手。
2051 2
使用宝塔搭建MinIO并且设置域名访问
|
11月前
|
安全 网络协议 网络安全
只有IP地址没有域名,如何实现HTTPS访问?
在仅有IP地址而无域名的情况下,实现HTTPS访问并非不可能。主要挑战包括证书颁发机构(CA)对IP地址的支持有限及浏览器兼容性问题。解决方案有:1) 搭建私有CA为内部IP地址颁发证书;2) 使用支持IP地址的公共CA服务。选择合适的方案需根据需求权衡。具体步骤包括选择证书类型、生成CSR文件、提交并完成验证、安装SSL证书和配置强制HTTPS访问。确保IP地址稳定,并定期维护安全性。 **申请优惠**:访问JoySSL官网并填写注册码“230907”可优惠申请IP地址证书。
1965 5
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
798 60
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
2046 20
|
11月前
|
域名解析 弹性计算 应用服务中间件
使用域名访问部署在ECS上的网站
本文为您介绍如何为网站配置域名并为域名配置HTTPS证书。
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
509 11
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
516 5
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1244 3

相关产品

  • 对象存储