LNMP一键安装https://lnmp.org/install.html来安装好centos下的环境,本文以此为服务器环境的例子。
-------------------------------------------------------------
laravel访问新建路由出现404问题、No input file specified问题这两个问题可能是因为用了一键lnmp,不知道实际nginx配置造成的,百度问题也很难解决,部署过程中也碰到了不少莫名其妙等问题。
-
#1. 一般直接在nginx.conf里面添加如下即可完成URL的路由访问
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
location / {
try_files $uri $uri/ /index.php?$query_string;
}
但是,我用的是一键lnmp https://blog.csdn.net/weixin_41827162/article/details/82914526,里面的nginx添加了如上代码,新建路由访问时依然404。
最终在nginx.conf里面找到一句include enable-php.conf,里面有一句 try_files $uri =404; 是这句每次访问新路由时都是404。
[root@localhost conf]# vi enable-php.conf
注释掉try_files $uri =404;就行了就可以了,如下#。
location ~ [^/]\.php(/|$)
{
#try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
重启nginx即可访问:
[root@localhost conf]# service nginx restart
-
#2. 接下来解决No input file specified 问题:
这个问题等出现是因为 主机未开启 pathinfo
函数导致的。需要启用 cgi.fix_pathinfo 参数
参考:https://blog.csdn.net/a787031584/article/details/53400250
1)进入php.ini
文件。将cgi.fix_pathinfo
的值改成1
。
[root@localhost ~]# find / -name php.ini
/usr/local/php/etc/php.ini
[root@localhost ~]# vi /usr/local/php/etc/php.ini
2)然后到配置域名解析的文件下(一般是以域名命名的配置文件)。加上这三句:
比如我加在nginx.conf下【如果因为添加如下而导致nginx不能正常启动,请注释下面的代码的第一行即可,第二行和第三行不需要注释】:
astcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
-
3. 下载laravel最新版离线包:https://laravelacademy.org/resources-download ,
或者使用我的完整离线包: https://makeoss.oss-cn-hangzhou.aliyuncs.com/laravel58_run.7z
a. 将laravel离线包上传到centos上,并将laravel的bootstrap和storage两个目录设置成权限777;
b. 在php.ini里面设置cgi.fix_pathinfo=1来打开php报错调试;
c. 在laravel/config/app.php的调试打开:
'debug' => env('APP_DEBUG', true)
d. 在laravel目录添加.env文件,然后在此目录运行php artisan key:generate ,系统会自动生成一个key。
-
4. 最终laravel部署完毕,新建路由访问成功:
ThinkPHP5也成功(感叹一下,TP真的比laravel好部署万倍,各种省心):
-
-------拓展--------------
pathinfo URL写法:
TP5等URL模式比较方便,可以适用于pathinfo和兼容模式;laravel以上配置的是pathinfo模式,而且官方推荐等也是pathinfo
模式。
-------解决其他报错(从GiT上面拉下来的)----------
Warning: require(/home/wwwroot/default/laravel/public/../vendor/autoload.php): failed to open stream: No such file or directory in /home/wwwroot/default/laravel/public/index.php on line 24
Fatal error: require(): Failed opening required '/home/wwwroot/default/laravel/public/../vendor/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/wwwroot/default/laravel/public/index.php on line 24
我从GitHub上面clone下来的laravel,结果不含vendor目录,vendor里面的laravel目录就相当于tp5.1里面的thinkPHP目录,所以要么手动添上框架的framework,要么下载完整离线框架包。
Laravel学院提供的相关资源下载:https://laravelacademy.org/resources-download
tp5.1也会有类似的报错,添加核心框架即可。
-
nginx.conf里面的全部内容如下:
user www www;
worker_processes auto;
worker_cpu_affinity auto;
error_log /home/wwwlogs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
multi_accept off;
accept_mutex off;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
sendfile_max_chunk 512k;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
#limit_conn_zone $binary_remote_addr zone=perip:10m;
##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
server_tokens off;
access_log off;
server
{
listen 80 default_server reuseport;
#listen [::]:80 default_server ipv6only=on;
server_name _;
index index.html index.htm index.php;
root /home/wwwroot/default;
#astcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
location / {
try_files $uri $uri/ /index.php?$query_string;
}
include enable-php.conf;
location /nginx_status
{
stub_status on;
access_log off;
}
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/access.log;
}
include vhost/*.conf;
}