You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:44:51