在同一台服务器部署不同php框架项目,偶尔会出现Access denied 情况,提示访问被拒绝,调试单独php比如
a.php 里面具体内容
<?php
phpinfo();
?>
a.php能正常访问,但是访问框架文件 就访问不了 ,然后看具体nginx 日志数据 提示
*91 FastCGI sent in stderr: “Access to the script ‘/data/web/xxx/public’ has been denied (see security.limit_extensions)” while reading response header from upstream,
没有路径访问权限,之前有遇到这种情况跨文件夹访问在fastcgi里面设置
fastcgi_param PHP_ADMIN_VALUE “open_basedir=/data/web/xxx/:/tmp/:/pro
c/”;
重启nginx 之后可以解决,因为php目录安全问题,框架设置设置nginx 配置 root 路径指向 public 文件夹,但其实public 需要加载外面的框架类文件导致这个异常 上面这个解决方案 不是很好,如果多个项目每次都需要修改 fastcgi 配置
php提供了 https://www.php.net/manual/zh/configuration.file.per-user.php 配置文件 .user.ini 文件
首先,要使.user.ini生效,要设置php.ini 中的
user_ini.filename= ".user.ini"
user_ini.cache_ttl = 300
关于这两个配置的意义,请看php手册 http://php.net/manual/zh/configuration.file.per-user.php
注释掉 fastcgi.conf 中的 open_basedir 的配置。
跨目录
/home/wwwroot/public/.user.ini
open_basedir=/home/wwwroot:/tmp/:/proc/
设置跨目录 在public 文件下面设置
就可以了