没有不值得去解决的问题,也没有不值得去学习的技术!

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

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

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

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

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

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

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

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

4、在入口文件 index.php 打印,确认未执行到 PHP 文件。

5、怀疑与生产环境中的 Nginx 一段配置有关,将这一段配置在本地环境的 Nginx 中添加

Nginx

server {
	location ~* .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
		expires      30d;
		add_header Cache-Control "public";
	}
}

6、在本地环境中,能够执行到 PHP 文件(与生产环境不一致),但是,响应状态码为 404(与生产环境一致)。如图4

在本地环境中,能够执行到 PHP 文件(与生产环境不一致),但是,响应状态码为 404(与生产环境一致)
图4

7、编辑 Nginx 的配置,添加 location ^~ /static/theme,表示 匹配任何以 /static/theme 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。在 location ~* .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ 之后

Nginx

	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

在本地环境中,能够执行到 PHP 文件,且响应状态码为 200,符合预期
图5

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

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

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系