最近公司新上项目,没用运维只能自己上了,用的LNMP,基本上有点linux基础就能搭建了。搭建参考:LNMP一键安装,这里主要记录踩的坑和解决方法。
1.项目安装完配置上传项目文件后,访问时 500 错误
1.1 错误分析:
服务器 500 错误一般是 Nginx 站点配置的问题
1.2 解决方法:
执行 service nginx reload
一般能看到报错。具体问题具体解决。这里贴一下我的Nginx站点配置。
# lnmp 站点配置一般在 /usr/local/nginx/conf/vhost/ 下
server
{
listen 80;
#listen [::]:80;
server_name www.rick.com ;
index index.html index.htm index.php default.html default.htm default.php;
# yii2
# root /home/wwwroot/www.guaosi.com/web;
# thinkphp5跟laravel5
root /home/wwwroot/www.guaosi.com/public;
# 设置项目可以加载的路径
#set $basedir "open_basedir=/home/wwwroot/www.rick.com/:/tmp/:/proc/";
include rewrite/none.conf;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf;
# 不同框架的重定向规则 (三选一,不然会报错)
# yii2 nginx规则
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
# thinkphp5 nginx规则
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
# laravel5 nginx规则
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log /home/wwwlogs/www.rick.com.log;
}
1.3 另一个Laravel 项目 + Nginx 常见的 500 错误是 open_basedir 参数导致
该参数的主要作用是:指定项目目录,不允许访问上级目录。这在框架中几乎不能避免的,因为框架中,经常要加载各种类文件,插件等。
解决方法:在 /usr/local/php/etc/fastcgi_params 或者 fastcgi.conf 中 注释掉该项:
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
重新加载 Nginx 配置: lnmp nginx reload
2. 服务器502错误,Nginx,php-fpm各项程序运行正常
2.1 错误分析:
Nginx,php-fpm 各种程序都能正常启动,说明可能不是配置问题,查看各个程序的log,确定问题原因。LNMP 日志地址 /home/wwwlogs/
2.2 解决错误
在 storage\logs
我们能看到具体的错误日志,一般是因为open_dir等函数被禁用。修改 /usr/local/php/etc/php.init
搜索 disable_functions
删除掉 open_dir 等项函数。
重启 php-fpm :lnmp php-fpm reload
3. 页面空白 HTTP状态 200 ,Nginx,php-fpm,站点log都没有报错
3.1 错误分析
1.查看状态码是200,各种日志中没有报错,一般可以确定不是环境配置问题
2.考虑一下框架文件是不是有缺失,打印错误日志发现没有错误,依然是200
3.拉一个官方的空白laravel试试,发现没问题。就感觉应该是项目的配置有问题
3.2 解决方法
拷贝一份干净的 .env.example 文件,修改其中的数据库配置选项,添加自己额外的配置项目。
划重点 : 此时需要使用php artisan key:generate
生成新的app_key,粘贴其他项目的app_key 会直接导致页面空白。app_name 使用默认的Laravel
即可,不然也会导致页面空白。
最后查看网站,此时我们能发现已经能够正常访问。
虽然说修改这个错误很简单,但是我却足足花了一个下午的时间。因为 页面只是空白,各个程序不会报错,很难确定错误位置。在网络上搜索,也都说解决方法是
vim /etc/nginx/fastcgi_params
# 添加参数
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
但是这个并没有解决我的问题。有时候最难修改的BUG,并不是最需要多么高超的技术,而是它存在于一个你很难发现的地方。