龙空技术网

配置Nginx代理访问阿里云OSS资源踩坑之路

运维笔谈 1173

前言:

此时小伙伴们对“nginx匹配多级目录”都比较讲究,小伙伴们都需要学习一些“nginx匹配多级目录”的相关资讯。那么小编同时在网上网罗了一些对于“nginx匹配多级目录””的相关知识,希望兄弟们能喜欢,姐妹们一起来学习一下吧!

朋友那边有个需求要在阿里云OSS上绑定一个自定义的域名,但是此域名已经在DNS解析那边有了A记录,OSS绑定域名需要在DNS解析那边加个CNAME,这样就冲突了。但是朋友那边就一定要使用这个域名,想了想也只能通过Nginx的一个二级目录来反向代理这个OSS了。大佬们有更好的办法,欢迎评论区留意指点下。

话不多说,我先配置了如下:

http {    # ... 其他全局配置 ...        upstream oss_backend {        server <OSS_ENDPOINT>; # OSS访问内网域名        keepalive 32; # 保持连接数,可按需调整    }    server {        listen 80; # 或者 listen 443 ssl; 如果使用HTTPS        server_name apitest.xxxx.com; # 域名        location /static {            proxy_pass ; # 代理到OSS            proxy_set_header Host $host;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        }    }}

很常见的一个反向代理配置,然而当我访问对应oss里的静态资源的时候,错误提示

<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><RequestId>613A63CA4771F3ddds602364</RequestId><HostId>apitest.xxxx.com</HostId><Key>static/test/1.png</Key><EC>0026-0000001</EC><RecommendDoc>;/RecommendDoc></Error>

Nginx到OSS的代理工作正常,但请求的文件在OSS中不存在或路径不正确。仔细检查了下路径是对的,这说明我们Nginx写法有问题,到OSS那边的确是没有 static/test/1.png 这个文件,所以我们需要在Nginx里加个配置去掉 static 前缀。

改正之后的具体配置如下:

location /static {    rewrite ^/static(/.*)$ $1 break; # 去掉"/static"前缀    proxy_pass ;    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}

我们使用 rewrite 指令去除请求路径中的/static前缀,然后再将处理后的路径传递给 proxy_pass 指令。

这样,访问 时,Nginx就会将请求转发到 ,OSS将查找Object键(Key)为 /k1.png 的文件。

测试可行。

标签: #nginx匹配多级目录