OctoberCMS本地开发:Nginx下Chrome访问/backend报404
我之前也碰到过类似的跨浏览器访问差异问题,结合你的Nginx配置和场景,给你几个具体的排查方向:
先确认Nginx站点是否正确启用
你同时存在default和movies两个站点配置,先检查movies是否已经创建软链接到sites-enabled目录:ls -l /etc/nginx/sites-enabled/如果没看到
movies的链接,执行以下命令启用站点并重启Nginx:sudo ln -s /etc/nginx/sites-available/movies /etc/nginx/sites-enabled/ sudo systemctl restart nginx这里要注意:
default站点的根目录是/var/www/html,而movies指向你的项目路径/var/www/html/movies,如果movies没启用,Chrome可能会走default配置,自然找不到OctoberCMS的后台路由。清除Chrome的缓存和Cookie
Chrome对本地开发环境的缓存处理经常比Firefox更顽固。按Ctrl+Shift+Delete打开清除界面,勾选缓存的图片和文件以及Cookie和其他网站数据,完成清除后再测试。也可以直接用Chrome的无痕模式访问localhost/backend,如果无痕模式能正常访问,那基本就是缓存导致的问题。检查Nginx的server_name匹配和优先级
你的movies站点配置里server_name写了两次localhost,虽然不影响功能,但可以改成server_name localhost;更规范。另外,default站点是default_server,如果movies启用后,localhost的请求应该优先匹配movies配置,但缓存可能会干扰这个逻辑。可以临时禁用default站点(删除sites-enabled里的软链接),重启Nginx后再测试Chrome是否正常。验证OctoberCMS的URL重写规则是否生效
你的movies配置里已经包含了October需要的重写规则,但可以开启rewrite日志确认规则是否生效。在movies的server块里添加:rewrite_log on; error_log /var/log/nginx/movies_rewrite.log notice;重启Nginx后,用Chrome访问
localhost/backend,然后查看日志:sudo tail -f /var/log/nginx/movies_rewrite.log观察请求是否被正确重写到
index.php,如果没有,可能是重写规则存在问题(不过你的规则看起来是符合October官方要求的)。检查文件和目录权限
虽然Firefox能正常访问,但Chrome可能因为权限缓存或其他细节出现差异。执行以下命令设置OctoberCMS需要的权限:sudo chown -R www-data:www-data /var/www/html/movies sudo chmod -R 755 /var/www/html/movies/storage排查Chrome的HSTS强制跳转
如果之前你给localhost配置过HTTPS,Chrome可能会强制使用HTTPS访问,导致HTTP的localhost/backend出现404。在Chrome地址栏输入chrome://net-internals/#hsts,在Delete domain security policies输入框中填入localhost,点击Delete后重启Chrome再测试。
内容的提问来源于stack exchange,提问作者Nirmal

