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

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

朋友那边有个需求要在阿里云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 http://oss_backend; # 代理到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,然而当我?问对应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>https://api.aliyun.com/troubleshoot?q=0026-00000001</RecommendDoc>
</Error>

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

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

location /static {
    rewrite ^/static(/.*)$ $1 break; # 去掉"/static"前缀
    proxy_pass http://oss_backend;
    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 指令。

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

测试可行。

责任编辑:武晓燕 来源: 运维笔谈
相关推荐

2018-12-18 14:13:30

SDKAndroid开发

2021-07-28 14:37:57

WKWebviewh5网络

2013-01-08 14:51:49

阿里云开放存储OSS

2021-06-09 08:21:14

Webpack环境变量前端

2017-12-05 12:44:57

Android沉浸式状态栏APP

2023-01-18 23:20:25

编程开发

2020-09-15 08:46:26

Kubernetes探针服务端

2013-07-25 10:28:31

阿里云阿里云SLB故障

2024-05-27 00:00:00

PHP阿里云OSS

2022-04-08 08:40:36

Nginx日志服务器

2023-02-20 08:11:04

2017-05-05 08:12:51

Spark共享变量

2021-10-28 19:10:02

Go语言编码

2021-09-03 11:15:18

场景sql配置

2024-04-10 08:39:56

BigDecimal浮点数二进制

2024-04-01 08:05:27

Go开发Java

2013-07-17 10:11:47

云计算

2023-09-22 11:29:11

JavasubList

2021-05-27 22:46:00

Nacos Clien版本Nacos

2017-07-17 15:46:20

Oracle并行机制
点赞
收藏

51CTO技术栈公众号