tp5部署lnmp平台解决方案,史诗级爬坑。

版权声明:本文为博主原创文章,如需转载请申明出处。 https://blog.csdn.net/good_tang/article/details/81490944

用tp5.1做了和小项目,准备上线测试下,纳尼,途中可谓艰辛,多次遇到500,502,404。用的是lnmp一键安装的环境,爬坑途中发现原来作者考虑的够多了,全是干货,感谢。

pathinfo问题

nginx 默认不支持pathinfo解析,需要自己配置,因为对nginx不太熟悉,自己配的漏洞百出,坑底半天没出来,最后找到lnmp环境已经提供,直接上配置。

listen 18888;
index index.html index.htm index.php;
root  /home/wwwroot/tp5/public;

include enable-php-pathinfo.conf;
include thinkphp.conf;
  • 详细配置

enable-php-pathinfo.conf

location ~ [^/]\.php(/|$)
{
    fastcgi_pass  unix:/tmp/php-cgi.sock; # 这个自己适配 不行的话用端口 127.0.0.1:9000
    fastcgi_index index.php;
    include fastcgi.conf;  # 后面有
    include pathinfo.conf;  # 后面有
}

thinkphp

location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=/$1 last;
        break;
    }
}

还有 fast-cgi 和 pathinfo.conf

# fast-cgi
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; # 注意此处 待会有坑
# pathinfo.conf
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO       $path_info;
try_files $fastcgi_script_name =404;

500 服务器错误问题

此原因由于导入出错造成,而且白屏无错误提示,先在index.php里加上:


error_reporting(E_ALL);
ini_set('display_errors', '1');
scandir
然后发现:Fatal error: require(): Failed opening required。。。。,找资料得知发现是php open_basedir 配置的问题,php不能引入其授权目录上级及其以上的文件,默认配置在php.ini,一般都没有设置,默认注释。我们这里选择在fast-cgi中配置,当然在php.ini或者其他地方配置。注意到我上面的标的注意点。我们配置到public下,在require上级目录时没有权限。
配置到其上级目录。

fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/proc/";

重启或者重新载入,大工告成。终于可以看到页面了。

其他

  • 遇到scandir函数不可用的问题,原因是将其禁用了,通过php.ini,将其删除禁用即可。
    这里写图片描述

  • 看到在php.ini中开启cgi.fix_pathinfo=1,没有测试是否有效,又不行的小伙伴可以改一下。

总结

在linux上权限是个非常值得注意的问题,拥有这方面的思想和经验很重要。最后小伙伴们记得每次修改配置后重启或者重新载入配置哦,附上几个常用的,类推哦。

nginx -s reload
/etc/init.d/nginx -s restart
service nginx reload

猜你喜欢

转载自blog.csdn.net/good_tang/article/details/81490944