我有一个 Nginx 配置,其中我将请求代理到外部资源(s3 服务),但是当尝试访问特定静态文件时,Nginx 会回退到 try_files 指令,而不是代理请求。以下是简化的配置:
server {
listen 443 ssl;
server_name test.lightningmoment.com;
location /static/ {
proxy_pass https://haiskynology-test-web.oss-cn-hangzhou.aliyuncs.com/com.haiskynology.lightningmoment.web/test/build/static/;
proxy_set_header Host test-cdn.lightningmoment.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
proxy_pass https://haiskynology-test-web.oss-cn-hangzhou.aliyuncs.com/com.haiskynology.lightningmoment.web/test/build/;
proxy_set_header Host test-cdn.lightningmoment.com;
try_files $uri $uri/ /index.html;
}
}
该文件logo64.png存在于以下 OSS 路径中:
当我尝试访问https://test.lightningmoment.com/logo64.png时,会导致 Nginx 回退到 try_files 逻辑并提供 index.html 文件,而不是将请求代理到 OSS 服务器。
我确认该文件存在,并且可以使用如下手动代理配置直接访问:
location /logo64.png {
proxy_pass https://haiskynology-test-web.oss-cn-hangzhou.aliyuncs.com/com.haiskynology.lightningmoment.web/test/build/logo64.png;
proxy_set_header Host test-cdn.lightningmoment.com;
}
同样,除非我明确添加配置,否则我无法访问静态文件夹下的文件location /static/。
我的问题:为什么对 /logo64.png 的请求会回退到 try_files?
我该如何修复 proxy_pass 以正确转发请求而不陷入 try_files 后备逻辑?
我可以采取哪些调试步骤来进一步诊断这个问题?
我预期用户以nginx作为第一层入口来访问React网站test.lightningmoment.com,然后我想给它添加一个cdn。
提前致谢!