Nginx给指定url配置不缓存页面导致访问出现403
不做特殊处理时,浏览器访问网页都会缓存静态资源文件的,以便下次访问页面的时候不请求服务器,直接从磁盘或内存中加载已缓存的资源,提高速度。有个静态网页文件夹(比如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中配置的user为www-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
更新于2023-12-28 21:48:58 发表于2023-12-28 21:42:27
发表您的评论