在使用 Asp.Net Core 8 和 Nginx 反向代理时,可能会遇到 OutputCache 不起作用的问题。这是因为 Nginx 默认会添加 Cache-Control: no-cache
和 Pragma: no-cache
的响应头,导致浏览器不缓存响应。
要解决这个问题,可以通过修改 Nginx 配置来禁用 Nginx 的缓存,然后由 Asp.Net Core 控制缓存。下面是一个示例的 Nginx 配置文件:
location / {
proxy_pass http://backend;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache_bypass $http_upgrade;
# 禁用 Nginx 缓存
proxy_no_cache 1;
proxy_cache_bypass 1;
}
在上面的示例中,proxy_no_cache 1;
和 proxy_cache_bypass 1;
分别禁用了 Nginx 的缓存。
然后,在 Asp.Net Core 控制器的 Action 方法上,使用 [ResponseCache]
属性来控制缓存。下面是一个示例代码:
[ResponseCache(Duration = 60)] // 缓存 60 秒
public IActionResult Index()
{
// 返回响应
}
在上面的示例中,使用 [ResponseCache(Duration = 60)]
属性来设置缓存的持续时间为 60 秒。
这样,当请求经过 Nginx 反向代理时,Nginx 不会缓存响应,而是由 Asp.Net Core 控制缓存,从而解决了 OutputCache 在与 Nginx 反向代理一起使用时不起作用的问题。