Nginx给指定url配置不缓存页面导致访问出现403

·Nginx

不做特殊处理时,浏览器访问网页都会缓存静态资源文件的,以便下次访问页面的时候不请求服务器,直接从磁盘或内存中加载已缓存的资源,提高速度。
有个静态网页文件夹(比如static),我放到了我的二级域名x.xxx.com下对应的目录里。浏览器访问是正常的(x.xxx.com/static/),且照常缓存。但是我有需求:x.xxx.com下的资源让浏览器进行默认的缓存处理,但是/static/下的资源禁止浏览器缓存!也就是用户每次访问x.xxx.com/static/下的网页,浏览器都要请求服务器加载最新的img等资源!
这其实很好配置,nginx直接这么配置就好了:

server {
    listen 80;
    server_name x.xxx.com;

    location /static/ {
        # 只应用于静态文件的缓存控制头   
        add_header Cache-Control "no-cache, no-store, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
        # 其他配置...
    }
    # 其他配置...
}
然后重启nginx,对吧?可是访问x.xxx.com/static(index.html是默认文件,其实请求的是x.xxx.com/static/index.html),浏览器却报403Forbidden!访问x.xxx.com/没有问题,真纳闷!
于是修改static目录的权限也是无果;location中添加ndex index.html;多余也是没用;折腾半天看到了有人说是nginx的工作用户和启动用户不一致导致403问题。于是照着输入:
ps aux | grep "nginx'
发现,nginx: master process显示的用户是root,nginx: worker process显示的用户是www-data。nginx.conf中配置的userwww-data,将其改成一致的用户:
user root;
重启nginx,访问x.xxx.com/static/正常了!而且每次刷新都是重新请求啦:可以看到图中履行者那一列为空,如果缓存了是会显示memory/disk cache的。不过这样配置nginx的默认user,虽然解决了问题,但是有点小题大做,应该有更合适的解决办法。

来自:计算机系统与软件工具
更新于2023-12-28 21:48:58 发表于2023-12-28 21:42:27


发表您的评论





公元2024年甲辰龍年,平安健康、龍行天下!