项目场景:
提示:将开发环境的ThinkPHP5项目移至LANMP的生产环境中进行部署 版本如下: Centos:7.5 PHP:7.3 Mysql:5.7 Nginx:1.8.3
问题描述:
开发环境使用Wamp,网站打开一切正常,移至服务器上就会提示Access denied.期间服务器上已部署了其他php项目,且都运行正常。排除中间组件的故障。
原因分析:
Nginx服务器默认不支持pathinfo, 在需要pathinfo支持的程序中(如thinkphp),则无法支持”/index.php/Home/Index/index”这种网址。 而将要部署的ThinkPHP项目涉及使用伪静态,需要修改nginx配置文件、php.ini两个文件中的相关配置
解决方案:
方法A: 1、查找在php.ini中的cgi.fix_pathinfo,取消前方的“;”,并使其等于1; 2、在域名对应的nginx的配置文件中修改或添加以下php伪静态设置:
location ~ [^/]\.php(/|$)
{
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
include fastcgi_params;
}
方法B: 由于cgi.fix_pathinfo取消注释会导致文件解析有很大的安全漏洞,所以一般的php.ini中是默认不开启cgi.fix_pathinfo的解析的。所以可以尝试使用以下方法: 1、在域名对应的nginx的配置文件中修改或添加以下php伪静态设置:
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_split_path_info ^(.+?.php)(/.*)$;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
|