文章目录

  • 一、前言
  • 二、开始配置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路径

测试通过之后,修改serverroot的值,改为我们的域名和项目路径,此处以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; }
}

遇到的问题: 修改完serverroot之后,访问域名发现域名多了个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-cgiphp-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的关系相关推荐

  1. 【vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud】

    vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud问答

  2. vue.config.js配置configureWebpack的optimization splitChunks页面空白

    确实通过这种方式解决: vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud问答 原因可能是这个: Taro项目 ...

  3. Apache反向代理访问code-server登陆账户后页面空白该怎么办?

    问题复现 添加反向代理:直接在宝塔面板的网站设置中添加反向代理,如图所示 这样操做会产生 Websocket 报错1006,导致登陆进去显示一片空白页面. 主要原因apache的反向代理需要手动添加W ...

  4. 树莓派配置php环境变量,树莓派PHP环境配置 解决页面空白

    网上相关教程很多,这里就不细述了,主要是在安装完成后会出现页面空白,无法正常解析php. 1.安装php环境: sudo apt-get install nginx php5-fpm php5-cgi ...

  5. CentOS 5.5-yum安装配置LNMP

    CentOS 5.5-yum安装配置LNMP [日期:2011-06-20]    来源:Linux社区  作者:fighter 一.安装所需的库文件和编译环境  yum -y install gcc ...

  6. Vite+Vue3页面空白、图标不显示问题解决

    页面空白问题 由于项目部署在子文件夹下,因此需要配置vite.config.js const config = {base: './', } el-icon图标不显示.打包时mkdir无权限 在控制台 ...

  7. vue 打包路由报错_Vue下路由History模式打包后页面空白的解决方法

    vue的路由在默认的hash模式下,默认打包一般不会有什么问题,不过hash模式由于url会带有一个#,不美观,而且在微信分享,授权登录等都会有一些坑.所以history模式也会有一些应用场景.新手往 ...

  8. vue项目dist编译文件部署到服务器:页面空白、F5刷新报错404、403报错、等等bug - 总结篇

    文章目录 问题一. vue编译打包dist文件之后部署到线上服务器 ,访问页面却是空白? 问题二.如果不是空白,页面F5之后就又变成空白? 以Nginx服务器为例,(如下图FTP所示) `404报错: ...

  9. Atitit.php  nginx页面空白 并返回500的解决

    Atitit.php  nginx页面空白 并返回500的解决 1.1. 空白问题起源1 1.2. Php.ini 开启display_err1 1.3. 修改www.conf ,并重启动.重启php ...

最新文章

  1. 如何用互联网上的广告来赚取广告费——有点吹牛吗?
  2. 九、探索性数据分析的应用
  3. 数据结构-Huffman树
  4. 轻松理解spring IOC
  5. QT c++ 中使用PostMessage/SendMessage实例
  6. vue 混入对象_特性和混入不是面向对象的
  7. 基础知识(十一)Eigen求解稀疏矩阵
  8. HTCondor下多台Linux计算集群的搭建
  9. 爬取 wallhaven图片到本地壁纸库
  10. AES加密SharePreference数据
  11. get请求和post请求参数中文乱码的解决办法
  12. 解决SpringCloud客户端启动报错:“Field XXX required a bean of type XXX that could not be found”
  13. springboot+宿舍管理小程序 毕业设计-附源码171008
  14. DFD图练习(图书管理系统)
  15. Laravel的介绍安装和启动
  16. 游戏陪玩app开发,高并发系统如何设计?
  17. ubuntu 进不去界面解决方案
  18. oppo计算机怎么添加到桌面,OPPO怎么把快捷方式添加到桌面 OPPO把快捷方式添加到桌面方法...
  19. hive URI ${systemjava.io.tmpdir%7D$%7Bsystemuser.name%7D
  20. 在codecademy上学习Python

热门文章

  1. c语言 结构体映射,内存管理之4:页面映射中的结构体
  2. Navicat连接mysql数据库
  3. mysql comment
  4. Python查找相同元素,不同元素
  5. python 逻辑回归
  6. Tensorflow tf.placeholder函数
  7. windows 关闭端口被占用脚本
  8. 青龙羊毛——火源星球新脚本(搬运)
  9. Qos和区分服务(DiffServ)
  10. BGP 路由属性 公认必遵 ORIGIN