作者测试环境
系统 CentOS7.3
LNMP一键包部署 Nginx 1.16.1 PHP 7.3 Mysql 8.0
测试项目根目录 /home/wwwroot/default/newjob/public
项目基于Laravel框架
第一个坑
访问站点的时候出现404页面
- 解决方案:
在nginx配置文件中加上以下内容,因作者测试环境没有建虚机所以直接使用nginx.conf中的默认配置
配置文件 /usr/local/nginx/conf/nginx.conf
在server{}中添加
location / {
try_files $uri $uri/ /index.php?$query_string;
}
配置文件 /usr/local/nginx/conf/enable-php.conf
将try_files $uri =404;注释掉
第二个坑
再次访问时出现报错file not found.
- 解决方案:
将nginx错误日志打开
在配置文件/usr/local/nginx/conf/nginx.conf中
access_log /home/wwwlogs/access.log;
下面添加一行
error_log /home/wwwlogs/error.log; # 打开错误日志
访问错误日志发现报错:
2019/09/05 10:23:10 [error] 3214#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.18.71.37, server: _, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-cgi.sock:", host: "172.18.71.220"
网上查找文档后发现需要将
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
修改为:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
但作者用一键包部署的默认已经是上面的配置,后来转念一想$document_root指的是配置文件中的站点根目录设置,估计与根目录有关
作者根目录设置的是/home/wwwroot/default
,但项目是在default下的newjob/public,访问通过IP/newjob/public的方式访问,依旧报错,因此尝试修改了nginx的配置文件将根目录调整为/home/wwwroot/default/newjob/public
后重新访问发现正常了。
第三个坑
以上问题都处理后再次访问终于出现了比较熟悉的报错了,信息如下:
Warning: require(): open_basedir restriction in effect. File(/home/wwwroot/default/newjob/vendor/autoload.php) is not within the allowed path(s): (/home/wwwroot/default/newjob/public/:/tmp/:/proc/) in /home/wwwroot/default/newjob/public/index.php on line 24
- 解决方案:
删除站点根目录下的隐藏文件.user.ini
$ sudo chattr -i /网站根目录/.user.ini
$ sudo rm -f /网站根目录/.user.ini
编辑配置文件/usr/local/nginx/conf/fastcgi.conf
将fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";注释重启nginx即可