配置LNMP遇到的问题页面空白,不能解析php等以及fastcgi和php-fom的关系

一、前言

      最近又配置了一遍LNMP的环境,本来以为是手到擒来,没想到还是遇到了一些坑,有些概念仍旧是不清楚,这里记录一下,希望以后不会再遇到这些坑。

二、开始配置LNMP

1、下载php,nginx,mysql等

参考我之前的博客:
debian下安装LNMP环境(一)

当然还会涉及到换下载源啊,这个网上百度就行,下载的时候,如果不清楚都可以下载什么版本的,可以使用搜索功能:

sudo apt-cache seatch 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 hx.happyrmb.com;
        root /var/www/pzapi/public;
#        server_name ip;
#       root /var/www/html;
        index index.php index.html;


        # 去除路径中的index.php
        location / {
                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

原文地址:https://blog.csdn.net/LJFPHP/article/details/100163762

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容介绍了“LNMP服务器环境配置实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
本篇内容主要讲解“OneinStack如何一键安装LNMP”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“OneinStack如何...
小编给大家分享一下如何解决LNMP安装composer install时出现Warning: putenv()问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅...
1.源码安装mysql鉴于前边的文章已经详细说过mysql的源码安装可以点击基于LAMP的Discuz论坛的实现(源码安装)自行查看这里为了节省时间用一个shell脚本进行mysql的源码安装用到的mysql依然是5.6.46没有源码包的同学可以点击【mysql-5.6.46.tar.gz提取码:nli5】进行下载
Linux是非常热门的技术,也是当下非常受欢迎的操作系统,具有独特的优势所在,广受大家的喜欢和追捧,今天为大家分享一下几款常用的Linux系统面板,希望对你有所帮助。1、宝塔面板:是一款使用方便、功能强大而且终身免费的服务器管理软件,支持Linux以及Windows系统,一键配置LAMP/LNMP
██【電:131.乀.1418.乀.6667】【薇q:9788.乀.9181】██柬埔寨东方明珠开户目录LAMP1.安装Mariadb2.安装PHP3.测试php和apache的协同4.修改MariaDB数据库配置5.测试数据库连接LNMP(未完待续)LAMP1.安装Mariadb在RaspberryPi中,MySQL无法安装,会自动建议安装Maria
关闭防火墙安装依赖包上传源码包解压源码包,安装nginx启动nginx安装mysql和PHP相关服务修改nginx配置文件,nginx和PHP进行整合重新加载nginx服务启动php-fpm书写PHP测试页测试网页 
一.lnmp的搭建1.准备一台纯净版的虚拟机2.下载Lnmp一键安装包命令:wget http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz【安装完整版的-推荐1.5版本】也可以本地下载好,通过rz上传:http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz3.开始安装命令:cdlnmp1.5-full 
1.LNMP理论fastcgi的主要优点:把动态语言和http服务器分离开来,使nginx可以处理静态请求和向后转发动态请求,而php/php-fpm服务器转移解析PHP动态请求使用fastcgi的原因:Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
keepalived高可用keepalived注意:任何软件都可以使用keepalived来做高可用keepalived如何实现高可用VRRP:虚拟路由冗余协议比如公司的网络是通过网关进行上网的,那么如果该路由器故障了,网关无法转发报文了,此时所有人都无法上网了,怎么办?通常做法是给路由器增加一台备节点,但是问
通过阿里云的服务器搭建lnmp架构以及部署wordpress个人博客,连接上域名所遇到的问题及解决办法注释:操作系统centos7.9第一步:购买阿里云ecs服务器,选择系统及其他硬件,下面是我自己购买的配置,可以参考(注意操作系统我购买的时候选错了,后来换成了centos7.9)然后在阿里云“云服
文章目录1.首先了解编译安装和yum安装的区别。2.yum安装准备工作---切换阿里云yum源3.编译安装lnmp**很不建议使用编译安装,麻烦且容易报错。**4.yum安装lnmp**可以先执行一下yumupdate**5.lnmp一键安装[参考网站](https://lnmp.org/)**不喜欢这种方式,所以没测试
电影院系统解压登录mysql创建电影院系统使用的数据库授权账户skyuc访问数据库讲系统部署到www.benet.com网站根目录下mv/usr/src/SKYUC.v3.4.2.SOURCE/wwwroot/*/var/www/benetcom/设置网站根目录所有者和权限客户机测试论坛系统部署解压复制文件到网站根目
下载:​ https://www.php.net/downloads​ https://www.php.net/distributions/php-8.0.6.tar.gz编译安装php:①安装依赖:yum-yinstalllibxml2-develsqlite-develbzip2-devellibcurl-devellibpng-devellibjpeg-develfreetype-devellibicu-develoniguruma-devellibxs
树莓派LNMP关键词:raspberrywebphpdnsmysq1LNMP、LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写,分别指Linux、Nginx/Apache、MySQL和PHP。这里演示如何在树莓派上搭建LNMP环境并配置多个站点。主要内容:树莓派安装nginx树莓派安装ph
官网:http://kodcloud.com/1、准备MySQL数据库 [root@cent8_yzl_20~]#yuminstall-ymysql-server[root@cent8_yzl_20~]#systemctlenable--nowmysqld[root@cent8_yzl_20~]#mysqlmysql>createdatabasekodbox;mysql>createuserkodbox@'10.0.0.
环境应用IP操作系统nginx192.168.122.131centos8mysql192.168.122.132centos8php192.168.122.133centos8准备工作//关闭防火墙#systemctldisable--nowfirewalld#setenforce0#vim/etc/selinux/configSELINUX=disabled安装nginx//安装依
1.购买vps或者外国云主机2.搭建ss服务端3.客户端配置服务端信息,即可。不废话,开始教程:ss-panel-v3简介ss-panel是一套功能齐全的shadowsocks用户管理面板,它可以实现用户注册、用户管理、流量控制、签到、添加多节点、充值购买、邀请返利等诸多功能,是目前网络上使用最广泛的一
LNMP架构数据迁移至NFS第一步:先将原有目录中数据移出数据存储到本地什么位置,获取方法1.通过网站页面右键点击,获取资源地址信息2.find命令利用-mmin53.利用inotify服务监控目录数据变化[root@web01wp-content]#cd/applicationginx/html/blog/wp-content/uploads[root@we
一 点睛业务上线之前最关键的一项任务便是环境部署,往往一个业务涉及多种应用环境,比如Web、DB、PROXY、CACHE等,本示例通过env.roledefs定义不同主机角色,再使用“@roles('webservers')”修饰符绑定到对应的任务函数,实现不同角色主机的部署差异。二 代码#coding=utf-8#!/usr