linux环境配置安装php+nginx

PHP是超文本预处理器,是一种开源在服务器端执行的脚本语言。

yum是一个在centos中的shell前端软件包管理器,基于PRM包管理,能够从指定的服务器自动下周RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

通过yum安装php

yum install php

为了让Nginx可以操作PHP请求,需要安装php-fpm ,php与nginx连接软件

yum -y install php-fpm

随后为了让MariaDB与PHP相连接,需要安装php-mysqlnd,mysqlnd是一种效率更高的php和mysql的连接方式。

yum -y install php-mysqlnd    php与mysql连接软件

yum -y install php-mbstring 为了使PHP不出现中文乱码,再安装上php-mbstring  php的中文编码库

yum install php-xml ,php与xml连接软件,使得PHP可以解析XML

启动php-fpm,并设置php-fpm开机自启

service php-fpm start

chkconfig php-fpm on

在相应的目录下找到nginx.conf配置文件,这里是在默认目录下,开启Nginx支撑PHP的模块,下面是修改内容

保存完修改后的配置,重启一下nginx,让配置生效,我们就可以通过nginx来处理PHP请求了。

可以自己在nginx的网页根目录写一个php文件要验证Nginx是否已经可以处理PHP请求了,这里在/use/local/nginx/html(Nginx默认位置)中创建one.php文件,然后写上简单的数字。

重新启动nginx 

创建一个 ayu.php文件,随意输入字符,然后通过相应的URL访问该php文件,如果Nginx不支持PHP请求,浏览器就会弹出下载one.php文件提示框,若Nginx支持PHP请求,就会相应相应的PHP界面。

重启nginx后访问后发现无法访问

查看nginx的error日志发现

[error] 53643#0: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.122.1, server: localhost, request: "GET /one.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.122.1"

是无法连接到php-fpm,打开php-fpm的配置文件www.conf,发现与nginx.conf里面的端口不匹配,一种是unix socket,一种是tcp端口,改成统一

gedit /etc/php-fpm.d/www.conf

改成

保存退出重新加载php-fmp

(注:这里可能会有个坑:在nginx配置下的conf.d文件下如果有php-fmp,内容可能未更改为ip通信方式,会导致nginx与php-fmp通信失败。)

访问one.php

搞定

五、php-fpm与Nginx的关系

从上面的配置中,我们知道了Nginx需要安装php-fpm后就可以响应PHP请求,但是其中Nginx与PHP是如何通过php-fpm进行协同工作的呢?

要弄明白上面的问题,首先就要知道CGI (Common Gateway Interface) 和 FastCGI 这两个协议

CGI是Web Server与后台语言交互的协议,通过这个协议,开发者可以使用任何语言来处理Web Server发来的请求,动态生成相应的内容,但是CGI对每个请求都需要生成出一个全新的进程来处理,处理完后又会将对应的进程关闭,随着Web的发展,高并发的情景越来常见,CGI这种方式已经不能满足这样的需求了,所以FastCGI就诞生了,看名字就知道,就是快速的CGI,它可以在一个进程内处理多个请求,而不会在请求处理完后结束进程,这样在性能上有很大的提高

而PHP-fpm是FastCGI协议PHP的实现,也就是说,任何实现了FastCGI协议的Web Server都可以与之通信(Nginx就实现了FastCGI),PHP-fpm对应标准的FastCGI还提供了一些增强功能

PHP-fpm是一个PHP进程管理器,它包含master进程(主进程)和worker进程(工作进程),其中master进程负责监听端口,默认配置是监听9000端口,接收来自Web Server的请求,而worker进程一般有多个,具体要多少个,可以对配置文件进行配置,默认是6个,每个worker进程中都内嵌了一个PHP解释器,是PHP代码真正执行的地方

php-fpm就是来管理启动一个master进行和多个worker进程的程序

php-fastcgi 只是一个cgi程序,只会解析php请求,并且返回结果,不会管理

php-cgi执行效率低下,因此被php-fastcgi取代。

可以通过下面命令查看系统中php-fpm的情况

ps -ef | grep fpm

从Nginx角度来讲,Nginx处理可以进行HTTP请求的代理还可以进行其他许多协议请求的代理,其中就有与php-fpm相关的FastCGI协议,为了能够让Nginx理解FastCGI协议,Nginx通过FastCGI模块来将HTTP请求映射为对应的FastCGI请求

Nginx的FastCGI模块提供了fastcgi_param指令来处理相应的映射关系,可以看一下Nginx中FastCGI的配置文件,就发现该模块的主要工作就是将Nginx中的变量映射为PHP中能理解的变量

到这里再仔细看一下nginx.conf这个配置文件

可以看出,Nginx新建了一个虚拟主机,监听80端口的请求,根目录为html(/usr/local/nging/html),默认主页为index.html或index.htm

接着就看到开启PHP支持的配置,可以看出将所有以.php结尾的请求都交给FastCGI模块处理,其监听端口为9000,而就像上面讲的,FastCGI模块将变量映射成PHP变量,将请求交给了PHP—fpm来处理,当用户对Nginx发起PHP请求时,Nginx首先从80端口接收到PHP请求,然后将该请求发送给9000端口,经FastCGI模块处理交给了在监听9000端口的PHP-fpm,PHP-fpm的master进程将PHP执行任务交个下面的worker进程,worker进程使用内嵌的php解释器来执行PHP并将获得的结果层层返回,最终通过Nginx发出,结果就显示在用户眼前了

原文出自:https://blog.csdn.net/adolph_qiang/article/details/107609496(部分补充)

你可能感兴趣的:(linux环境配置安装php+nginx)