记录一些常用的函数和瞎折腾的过程……

LNMP配置ThinkPHP运行环境

提醒:本文最后更新于 2129 天前,文中所描述的信息可能已发生改变,请谨慎使用。

昨天在LNMP上设置ThinkPHP V5的环境,折腾了好久,差点就放弃了,不过好在有人指点,终于搞定了,现记录了下。

ThinkPHP V5版本的网站运行目录为Public,同级目录还有thinkphp、app等目录,这个不用管,直接指定网站运行目录为public即可,在nginx配置的时候一定要注意:

root /home/wwwroot/ThinkPHP/public; #工作目录配置到public,不是ThinkPHP

指定了网站运行目录还不行,因为public里面的文件还要访问public同级目录thinkphp、app等中的文件,单纯的指定了root目录,肯定是运行不了的,还得继续修改nginx的配置文件,此时要修改fastcgi.conf文件:

找到:

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

允许public下的文件可以访问上级目录(也就是public的同级目录),修改为:

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

使用LNMP一键包安装的话,网站配置文件只有一行:

include enable-php-pathinfo.conf;

而enable-php-pathinfo.conf文件内容是:

location ~ [^/]\.php(/|$)
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}

看到没,里面包含了fastcgi.conf文件,但如果有虚拟网站的话,不建议直接改fastcgi.conf,所以你可以单独复制一个fastcgi.conf重命名为fastcgi-TP.conf,修改上面提到的内容后,再将enable-php-pathinfo.conf也重新复制一个并重命名为enable-php-pathinfo-TP.conf,修改“include fastcgi.conf”内容为“include fastcgi-TP.conf”,最后在网站配置文件中将include enable-php-pathinfo.conf替换为include enable-php-pathinfo-TP.conf吧,重新加载nginx就可以了。

如果嫌添加修改各个文件比较麻烦,可以直接用下面的代码替换掉网站配置文件中的include enable-php-pathinfo.conf:

location ~ [^/]\.php(/|$)
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include pathinfo.conf;
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/";
}

最后,得添加重写规则:

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

好吧,重启LNMP,一切就正常了。

注意:

对于防跨站设置,网站根目录下生成的“.user.ini”中,加载open_basedir是无效的,因为在fastcgi.conf中调用了open_basedir,不会再调用.user.ini中的open_basedir,所以更简单的方法是,注释掉fastcgi.conf关于open_basedir的那一行(前面加#):

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

此时就要注意写对网站根目录下.user.ini中的open_basedir配置了,改为如下:

open_basedir=/home/wwwroot/ThinkPHP/public/../:/tmp/:/proc/