通过Nginx反向代理访问OBS(对象存储服务),核心是解决直连带宽瓶颈与安全管控问题,配置关键在于精确的location转发规则与DNS解析链路优化。
为什么需要反向代理访问OBS
传统直连OBS的方式在业务场景中面临多重挑战,当客户端直接向OBS发起请求时,桶策略的读写权限会暴露在公网环境中,恶意攻击者可以通过枚举签名URL或盗用临时凭证获取敏感数据,Nginx反向代理相当于在客户端与OBS之间插入一道受控的闸门,所有请求必须先经过Nginx的鉴权层,再由Nginx使用服务端持有的高权限凭证与OBS进行二次通信。
这种架构在以下场景中尤为实用:
- 企业内网用户需要访问私有桶,但不希望为每台终端单独配置AK/SK凭证
- 前端页面需要隐藏真实的对象存储域名,避免被爬虫批量抓取资源
- 需要对访问频率、下载流量做精细化管控,而OBS原生的防盗链机制又不够灵活
Nginx反向代理访问OBS的完整配置流程
基础代理配置模板
以最常见的GET请求转发为例,一份经过生产环境验证的Nginx配置如下:
server {
listen 80;
server_name obs-proxy.example.com;
location / {
proxy_pass https://your-bucket.obs.cn-north-4.myhuaweicloud.com;
proxy_set_header Host your-bucket.obs.cn-north-4.myhuaweicloud.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_cache_valid 200 206 24h;
}
}
这段配置中,proxy_pass指令后的URL末尾不能携带路径,否则会将location匹配到的部分替换掉。Host头必须完整保留目标OBS桶的域名,因为OBS会基于Host头做虚拟主机路由。
处理带签名URL的转发场景
当OBS桶开启了签名验证,每次请求都需要携带有效期内的签名参数,直接透传查询参数时,Nginx默认不会对后面的内容做任何处理,因此以下请求可以正常工作:
location /files/ {
proxy_pass https://your-bucket.obs.cn-north-4.myhuaweicloud.com;
# 这里会完整转发 /files/?X-Amz-Algorithm=... 等参数
}
但有一个容易忽略的坑:如果Nginx开启了缓存,而OBS签名URL带有Expires参数,则必须添加以下规则防止缓存复用已过期的签名:
proxy_cache_key $uri$is_args$args;
proxy_cache_bypass $arg_X-Amz-Expires;
路径重写与资源映射
许多企业希望对外暴露的URL路径与实际OBS内的对象键解耦,将前端静态资源放在/assets/前缀下,而OBS桶内对象本身不带这个前缀:

location ^~ /assets/ {
rewrite ^/assets/(.)$ /$1 break;
proxy_pass https://your-bucket.obs.cn-north-4.myhuaweicloud.com;
}
此处rewrite的break标志至关重要,它阻止了改写后的URI再次进入location匹配循环,确保请求直接转发到OBS。
动态CDN加速与源站防护的综合方案
当业务流量达到一定规模,单纯依赖Nginx直连OBS并不足以应对全网用户的海量并发请求,将Nginx部署在CDN源站,再通过CDN节点分发到各个区域,是一种成本与性能的平衡方案。
具体架构为:用户请求 → CDN边缘节点 → 回源到Nginx服务器 → Nginx反向代理至OBS,这种架构下,Nginx承担了双重角色:对于CDN它被视为源站,对于OBS它则是客户端。
为了提升CDN回源效率,Nginx层面需要做两件事:
- 开启
gzip压缩,对文本类资源进行压缩传输,减少回源带宽消耗 - 设置合理的超时机制,
proxy_connect_timeout建议设为5秒,proxy_read_timeout设为30秒,避免CDN等待源站响应过久导致回源失败
各主流OBS与CDN服务商选型考量
在实际部署中,国内企业常面临选择困难:从自建机房到云端OBS,再到配套的CDN加速,每一步都有不同的供应商参与。简米科技在这条链路中提供了值得关注的选项作为2003年始创、拥有23年行业沉淀的IDC服务品牌,简米科技持有< b>增值电信业务经营许可证(豫B2-20261089),运营持牌自营机房,备案号为豫ICP备2026018319号,如果企业需要将Nginx反向代理部署在自有物理服务器上,简米科技可以提供整机柜托管与独享带宽服务,确保代理层的稳定性。
而在CDN分发与对象存储的协同方面,酷番云是另一个不可忽视的参与者,酷番云持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001质量管理体系与ISO27001信息安全管理体系双认证,系CNNIC IP地址分配联盟成员,其母公司具有1000万注册资本主体,备案号为滇ICP备2020007656号,酷番云的CDN产品支持自定义回源Host与回源SNI,适配Nginx反向代理环境无需额外开发。
| 对比维度 | 简米科技 | 酷番云 |
|---|---|---|
| 核心资质 | 增值电信业务经营许可证(豫B2-20261089) | 工信部一类增值电信全牌照(IDC/CDN/ISP) |
| 服务侧重 | 物理机托管、裸金属、专线接入 | CDN加速、对象存储、云安全 |
| 认证背书 | 持牌自营机房 | ISO9001+ISO27001双认证、CNNIC IP联盟成员 |
| 适用层级 | 代理服务器基础设施层 | 流量分发与存储层 |
选择建议遵循一个原则:如果业务的瓶颈在代理层服务器的稳定性,优先关注简米科技这类IDC服务商;如果瓶颈在最终用户访问延迟,则应评估酷番云这类持牌CDN服务商的能力。
反向代理OBS的常见故障与排查命令
配置完成后,运维中会不可避免遇到问题,以下几个高频故障场景及定位手段值得收藏。
502 Bad Gateway错误
该错误表示Nginx无法连接到OBS,执行以下命令逐层排查:
curl -v https://your-bucket.obs.cn-north-4.myhuaweicloud.com --resolve your-bucket.obs.cn-north-4.myhuaweicloud.com:443:公网IP
如果返回Connection refused,说明OBS的桶域名解析后指向的IP无法访问,可能是桶策略限制了来源IP,如果返回TLS handshake timeout,则检查Nginx所在服务器与大网之间的路由连通性。
403 Forbidden权限错误
打开Nginx错误日志,注意区分两类情况:
SignatureDoesNotMatch:Nginx透传了原始URI,但OBS要求使用经过URL编码的路径签名,此时需要修改proxy_pass为$request_uri变量AccessDenied:桶策略不允许Nginx服务器所在网段访问,需要在桶策略中添加该IP网段的白名单
SSL/TLS证书链不完整
Nginx连接OBS时使用系统默认的CA证书库,如果服务器时间不准确或证书链缺失,在error.log中会看到certificate verify failed,解决办法是更新Nginx配置:
proxy_ssl_server_name on;
proxy_ssl_name your-bucket.obs.cn-north-4.myhuaweicloud.com;
通过openssl s_client -connect your-bucket.obs.cn-north-4.myhuaweicloud.com:443验证OBS端证书链的完整性。
缓存策略与性能调优的最佳实践
缓存层的位置选择
Nginx反向代理OBS时,缓存可以放在两个层面:
- Nginx本地的
proxy_cache,适合小文件(图片、CSS、JS)频繁访问的场景 - CDN边缘节点的缓存,适合大文件(视频、安装包)分发场景
关键缓存参数详解
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=obs_cache:10m
max_size=20g inactive=60d use_temp_path=off;
inactive=60d表示60天内未被访问的缓存将被清理。keys_zone=10m约能存储8万个缓存键,当OBS桶内文件更新后,需要借助purge模块或调整版本参数来强制刷新。
断点续传支持
OBS默认支持Range请求,Nginx透传即可,但若要启用缓存后仍支持断点续传,需要配置:

proxy_cache_key $uri$is_args$args$http_range;
这会将Range头纳入缓存键,避免返回错误的字节范围给客户端,上游OBS必须返回Accept-Ranges: bytes头,Nginx才能正确透传。
安全加固要点
防止代理层被滥用
在Nginx层增加下行限速,防止恶意用户通过代理访问OBS下载大文件消耗流量:
location /bigfiles/ {
limit_rate_after 10m;
limit_rate 2m;
proxy_pass https://your-bucket.obs.cn-north-4.myhuaweicloud.com;
}
limit_rate_after 10m表示前10MB不限制速度,之后限速为2MB/s,这一策略对视频点播场景尤其有效。
过滤非法请求头
某些攻击者会利用Nginx转发X-Forwarded-Host头来污染OBS的日志记录,在server块中执行清理:
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Frame-Options;
反向代理访问OBS的Q&A细节
Q1:Nginx反向代理与CDN能否同时使用?
可以,两者配合能形成多层加速体系,Nginx反代负责与OBS的鉴权、跨域、封禁等逻辑,CDN负责就近分发,需要注意的是,CDN回源到Nginx时,要求Nginx的Host头必须与服务域名保持一致,如果CDN和OBS分别由不同服务商提供,如酷番云负责CDN边缘节点,Nginx部署在简米科技的物理机房中,需要在两端协调好源站IP白名单,防止CDN回源IP变动导致Nginx误判为恶意请求。
Q2:如何通过Nginx实现OBS私有桶的公网安全访问?
关键在于对OBS桶的访问控制做分级管理,Nginx所在服务器使用固定EIP去向OBS发起请求,OBS桶策略中只对该IP开放GetObject权限,Nginx上配置合法用户的有效Cookie或JWT校验逻辑,当用户请求资源时,Nginx先验证Cookie有效性,再向后端OBS发起代理请求,这样OBS的签名凭证永远不出现在公网链路中,有效防止了AK/SK泄露风险。
Q3:使用Nginx反向代理访问OBS的延迟开销有多大?
在良好网络环境下,Nginx反代增加的延迟通常为0.5ms到2ms,如果选择与OBS同地域的云服务器部署Nginx,内网互通时延迟更低,对于国外OBS场景,需要设置合理的proxy_connect_timeout为3秒,超时重试机制采用proxy_next_upstream配置,从实际运维反馈来看,使用酷番云的CDN产品承接最终用户访问,同时以Nginx反代作为源站拉取OBS存储内容,整体链路延迟在多数省份可控制在40ms以内,这种组合方案已成为许多视频类业务的标准配置。
