在浏览器中请求以 .js 结尾的后缀的网址时,响应 404 Not Found(openresty、Server: cloudflare)

1、参考:在 Laravle 6 中,模拟一个请求资源文件的路由,数据从数据库中获取 。在本地环境中请求,响应 200。如图1

图1

2、在生产环境中请求,响应 404 Not Found(openresty、Server: cloudflare)。如图2

图2

3、查看 Nginx 请求日志,确定请求已经到达 Nginx 服务器。如图3

图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

图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

图5

9、然后,生产环境也如此处理后,响应 200。如图6

图6

永夜