配置LNMP遇到的问题(页面空白,不能解析php等)以及fastcgi和php-fom的关系
文章目录
- 一、前言
- 二、开始配置LNMP
- 1、下载php,nginx,mysql等
- 2、配置nginx
- 3、启动ngin和php之后,去根目录新建文件
- 4、页面空白,F12查看请求,在response中可以看到php文件中的代码,但是页面没解析
- 5、9000端口的问题
- 6、修改域名和对应的root路径
- 三、php-fpm和fastcgi的关系
- 1、首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。
- 2、好了,CGI是个协议,跟进程什么的没关系。那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。
- (1)提高性能,那么`CGI`程序的性能问题在哪呢?
- (2)这明显不合理嘛!那么`Fastcgi`是怎么做的呢?
- 3、那PHP-FPM又是什么呢?是一个实现了Fastcgi的程序,被PHP官方收了。
- 4、php-fpm在5.3之前官方是没有php-fpm的。、
一、前言
最近又配置了一遍LNMP
的环境,本来以为是手到擒来,没想到还是遇到了一些坑,有些概念仍旧是不清楚,这里记录一下,希望以后不会再遇到这些坑。
二、开始配置LNMP
1、下载php,nginx,mysql等
参考我之前的博客:
debian下安装LNMP环境(一)
当然还会涉及到换下载源啊,这个网上百度就行,下载的时候,如果不清楚都可以下载什么版本的,可以使用搜索功能:
sudo apt-cache search php-fpm //搜索能下载的源//结果
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) (default)
php5.6-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.1-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.2-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.3-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.4-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
搜索完之后安装即可:
sudo apt-get install 你想安装的版本(例如:php-7.0-fpm)
2、配置nginx
为了方便配置nginx
多站点,建议不要直接在nginx.conf
配置,打开nginx.conf
文件我们可以看到,是引入的有 /etc/nginx/conf.d/*.conf
;也就是说我们在conf.d
文件夹下新建.conf
文件会都被认为是配置文件,从而进行解析
配置文件是在:/etc/nginx/conf.d/xxx.conf
。
新建a.conf
,按照博主之前配置的那个格式复制一下,root
改成根目录:
root /var/www/html;
3、启动ngin和php之后,去根目录新建文件
在根目录新增php
文件,然后访问ip
,发现文件被下载下来了。。代表不能解析php
文件啊。这个问题我之前就碰到一次,
参考:debian下安装LNMP环境(二)
仔细检查之后,发现并不是这个问题。后来想着本来就是要访问ip
的,我的server_name
目前是被注释的状态,本来以为注释掉也不会有什么影响的加上ip发现问题解决。
server_name 没有配置,直接给注释掉了,后改为:
server_name IP地址; (这里必须是ip)
4、页面空白,F12查看请求,在response中可以看到php文件中的代码,但是页面没解析
原因: 因为php文件的写法是:
<?php echo "1111"; ?> //输出1111
错误写法:
<? echo "1111"; ?> //原样输出
5、9000端口的问题
出现以上错误的时候,网上百度有些人是说9000
端口没起来的原因。但是对于php7
来说,,默认配置文件由:listen = 127.0.0.1:9000
变成了 listen = /var/run/php/php-7.0=fpm.sock
。
同样的,nginx
里面配置也是: fastcgi_pass unix:/var/run/php/php7.0-fpm.sock
; 这部分不用特意修改php-fpm
的配置和nginx
的配置让她监听9000
,真正的错误不在这儿。我们也不用非得强求监听9000
端口啊之类的,只要php-fpm
跑起来就可以的,网上很多说法都是针对老版本的,对php7
来说没这么麻烦。
6、修改域名和对应的root路径
测试通过之后,修改server
和root
的值,改为我们的域名和项目路径,此处以laravel
为例:
server {listen 80;server_name xxxxx.com;root /var/www/pzapi/public;
# server_name ip;
# root /var/www/html;index index.php index.html;# 去除路径中的index.phplocation / {index index.php index.html index.htm;try_files $uri $uri/ /index.php?$query_string;}#下面这个方法也能隐藏index.php# if (!-e $request_filename) {# rewrite ^/(.*) /index.php/$1 last;# }location ~ \.php$ {fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;# fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;include fastcgi_params;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ~ /\.git { deny all; }
}
遇到的问题: 修改完server
和root
之后,访问域名发现域名多了个index.php
,这个解决方案就是配置文件中注释的那部分,隐藏掉index.php
就好了。
三、php-fpm和fastcgi的关系
1、首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。
web server
(比如说nginx
)只是内容的分发者。比如,如果请求/index.html
,那么web server
会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php
,根据配置文件,nginx
知道这个不是静态文件,需要去找PHP
解析器来处理,那么他会把这个请求简单处理后交给PHP
解析器。Nginx
会传哪些数据给PHP
解析器呢?url
要有吧,查询字符串也得有吧,POST
数据也要有,HTTP header
不能少吧,好的,CGI
就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。仔细想想,你在PHP
代码中使用的用户从哪里来的。
当web server
收到/index.php
这个请求后,会启动对应的CGI
程序,这里就是PHP
的解析器。接下来PHP
解析器会解析php.ini
文件,初始化执行环境,然后处理请求,再以规定CGI
规定的格式返回处理后的结果,退出进程。web server
再把结果返回给浏览器。
2、好了,CGI是个协议,跟进程什么的没关系。那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。
(1)提高性能,那么CGI
程序的性能问题在哪呢?
“PHP解析器会解析php.ini文件,初始化执行环境”,就是这里了。标准的CGI对每个请求都会执行这些步骤(不闲累啊!启动进程很累的说!),所以处理每个时间的时间会比较长。
(2)这明显不合理嘛!那么Fastcgi
是怎么做的呢?
首先,Fastcgi
会先启一个master
,解析配置文件,初始化执行环境,然后再启动多个worker
。当请求过来时,master
会传递给一个worker
,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker
不够用时,master
可以根据配置预先启动几个worker
等着;当然空闲worker
太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi
的对进程的管理。
3、那PHP-FPM又是什么呢?是一个实现了Fastcgi的程序,被PHP官方收了。
大家都知道,PHP
的解释器是php-cgi
。php-cgi
只是个CGI
程序,他自己本身只能解析请求,返回结果,不会进程管理(皇上,臣妾真的做不到啊!)所以就出现了一些能够调度php-cgi
进程的程序,比如说由lighthttpd
分离出来的spawn-fcgi
。好了PHP-FPM
也是这么个东东,在长时间的发展后,逐渐得到了大家的认可(要知道,前几年大家可是抱怨PHP-FPM
稳定性太差的),也越来越流行。
4、php-fpm在5.3之前官方是没有php-fpm的。、
php-fpm
是作为一个第三方的补丁你才能用的。5.3
之后捏,官方就已经默认加入了,从此就不是一个补丁了。
参考:搞不清FastCgi与PHP-fpm之间是个什么样的关系
这段文字其实是抄的思否上面一个答主的回答,解释的是在是太清晰了,一目了解。之前在网上百度的时候,总是看到有配置fast-cgi
的,有配置php-fpm
的,感觉这些东西弄的一团糟(实际上是自己水平太低)。弄明白之后我们就清楚了,配置的时候以php-fpm
为主,具体的fast-cgi
的一些东西不用我们再去处理什么,php-fpm
会自己给他处理的。
end
配置LNMP遇到的问题(页面空白,不能解析php等)以及fastcgi和php-fom的关系相关推荐
- 【vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud】
vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud问答
- vue.config.js配置configureWebpack的optimization splitChunks页面空白
确实通过这种方式解决: vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud问答 原因可能是这个: Taro项目 ...
- Apache反向代理访问code-server登陆账户后页面空白该怎么办?
问题复现 添加反向代理:直接在宝塔面板的网站设置中添加反向代理,如图所示 这样操做会产生 Websocket 报错1006,导致登陆进去显示一片空白页面. 主要原因apache的反向代理需要手动添加W ...
- 树莓派配置php环境变量,树莓派PHP环境配置 解决页面空白
网上相关教程很多,这里就不细述了,主要是在安装完成后会出现页面空白,无法正常解析php. 1.安装php环境: sudo apt-get install nginx php5-fpm php5-cgi ...
- CentOS 5.5-yum安装配置LNMP
CentOS 5.5-yum安装配置LNMP [日期:2011-06-20] 来源:Linux社区 作者:fighter 一.安装所需的库文件和编译环境 yum -y install gcc ...
- Vite+Vue3页面空白、图标不显示问题解决
页面空白问题 由于项目部署在子文件夹下,因此需要配置vite.config.js const config = {base: './', } el-icon图标不显示.打包时mkdir无权限 在控制台 ...
- vue 打包路由报错_Vue下路由History模式打包后页面空白的解决方法
vue的路由在默认的hash模式下,默认打包一般不会有什么问题,不过hash模式由于url会带有一个#,不美观,而且在微信分享,授权登录等都会有一些坑.所以history模式也会有一些应用场景.新手往 ...
- vue项目dist编译文件部署到服务器:页面空白、F5刷新报错404、403报错、等等bug - 总结篇
文章目录 问题一. vue编译打包dist文件之后部署到线上服务器 ,访问页面却是空白? 问题二.如果不是空白,页面F5之后就又变成空白? 以Nginx服务器为例,(如下图FTP所示) `404报错: ...
- Atitit.php nginx页面空白 并返回500的解决
Atitit.php nginx页面空白 并返回500的解决 1.1. 空白问题起源1 1.2. Php.ini 开启display_err1 1.3. 修改www.conf ,并重启动.重启php ...
最新文章
- 如何用互联网上的广告来赚取广告费——有点吹牛吗?
- 九、探索性数据分析的应用
- 数据结构-Huffman树
- 轻松理解spring IOC
- QT c++ 中使用PostMessage/SendMessage实例
- vue 混入对象_特性和混入不是面向对象的
- 基础知识(十一)Eigen求解稀疏矩阵
- HTCondor下多台Linux计算集群的搭建
- 爬取 wallhaven图片到本地壁纸库
- AES加密SharePreference数据
- get请求和post请求参数中文乱码的解决办法
- 解决SpringCloud客户端启动报错:“Field XXX required a bean of type XXX that could not be found”
- springboot+宿舍管理小程序 毕业设计-附源码171008
- DFD图练习(图书管理系统)
- Laravel的介绍安装和启动
- 游戏陪玩app开发,高并发系统如何设计?
- ubuntu 进不去界面解决方案
- oppo计算机怎么添加到桌面,OPPO怎么把快捷方式添加到桌面 OPPO把快捷方式添加到桌面方法...
- hive URI ${systemjava.io.tmpdir%7D$%7Bsystemuser.name%7D
- 在codecademy上学习Python