Nginx未转发响应头问题排查:.NET 6应用CORS头丢失
问题分析与解决
问题根源
你的Nginx配置中,图片请求(比如/Artworks/IMG_9346m.jpg)优先匹配了global_images_cache.conf里的正则location块,而非你定义的/代理location块。
这个图片location块的逻辑是直接读取本地root目录下的静态文件,没有将请求转发到.NET 6后端,因此后端返回的Access-Control-Allow-Origin等自定义头不会出现在最终响应里。
解决方法
你有两种可选方案:
方案1:修改图片缓存location,添加代理配置
调整global_images_cache.conf,让图片请求既保留缓存策略,又转发到后端:
location ~* \.(?:jpg|jpeg|gif|png|ico|woff2)$ { # 新增代理转发配置,和根路径代理保持一致 proxy_pass http://localhost:5081; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 保留原有的缓存配置 expires 1M; add_header Cache-Control "public"; }
方案2:提升代理location的优先级
给根路径代理location添加^~前缀,让它的优先级高于正则匹配,确保所有请求(包括图片)都走后端代理:
location ^~ / { proxy_pass http://localhost:5081; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
注意:此方案会让图片缓存的location失效,所有请求都走代理逻辑。
验证
修改配置后执行nginx -s reload重载配置,再用原curl命令测试:
curl -i https://beatajakimiak.art.pl/Artworks/IMG_9346m.jpg -H "origin:https://m.beatajakimiak.art.pl" -H "referer:https://m.beatajakimiak.art.pl/" -o /dev/null -v
此时应能看到后端返回的Access-Control-Allow-Origin头出现在响应中。
内容的提问来源于stack exchange,提问作者Rychu
相关产品推荐
相关产品推荐

