在浏览器中请求以 .js 结尾的后缀的网址时,响应 404 Not Found(openresty、Server: cloudflare)
1、参考:在 Laravle 6 中,模拟一个请求资源文件的路由,数据从数据库中获取 。在本地环境中请求,响应 200。如图1
2、在生产环境中请求,响应 404 Not Found(openresty、Server: cloudflare)。如图2
3、查看 Nginx 请求日志,确定请求已经到达 Nginx 服务器。如图3
4、在入口文件 index.php 打印,确认未执行到 PHP 文件。
5、怀疑与生产环境中的 Nginx 一段配置有关,将这一段配置在本地环境的 Nginx 中添加
server { location ~* .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { expires 30d; add_header Cache-Control "public"; } }
6、在本地环境中,能够执行到 PHP 文件(与生产环境不一致),但是,响应状态码为 404(与生产环境一致)。如图4
7、编辑 Nginx 的配置,添加 location ^~ /static/theme,表示 匹配任何以 /static/theme 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。在 location ~* .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ 之后
location ^~ /static/theme { try_files $uri /index.php =404; # fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # fastcgi_pass 127.0.0.1:9000; fastcgi_pass php_farm; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~* .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { expires 30d; add_header Cache-Control "public"; }
8、在本地环境中,能够执行到 PHP 文件,且响应状态码为 200,符合预期。如图5
9、然后,生产环境也如此处理后,响应 200。如图6
近期评论