其中,Nginx作为web服务器,响应客户端发来的http请求,和Apache一样,本身只能处理静态请求,而对于动态请求,则需要Nginx与专门的语言解释器进行交互,例如PHP解释器,然后PHP解释器执行php脚本,其中会涉及到一些数据的操作,因此就需要到后端的数据库服务器中存取数据。最后php的执行结果交给nginx,nginx继而将结果返回给客户端。
fastcgi:
nginx收到的请求不能直接转发给php,因为php不认识,反过来,php处理后的结果也不能直接返回给nginx,因此需要在他们两者中间加入公共接口,即fastcgi,使得nginx和php都能够支持fastcgi,当nginx和php交互的时候,都需要通过fastcgi协议的处理。
PHP和php-fpm的关系:
php-fpm是php和fastcgi的管理器,它其实php的一个补丁,是为了将fastcgi的管理器整合到php中,这样一来,仅可以通过php-fpm服务,既可以管理fastcgi进程,也可以reload重新加载php(在修改php的配置文件php.ini后无需重新启动php)。
因此LNMP详细的工作流程是,Nginx收到浏览器的web请求后,Nginx 自身处理其中的静态请求,例如图片、视频等,对于动态请求,Nginx将其通过fastcgi处理后转发给php-fpm进程,php-fpm调用php解析器执行fastcgi处理后的php脚本,期间php再连接数据库进行数据的操作,php解析器处理完毕后,将结果转发给php-fpm进程,php-fpm将结果通过fastcgi交付给Nginx,最后Nginx将最终的结果返回给浏览器。
LNMP搭建过程:
① 安装Nginx,为了方便我这里使用yum安装,当然也可以使用源码编译安装,我使用的阿里云的epel源,直接在Linux中输入如下命令,就可以成功配置yum仓库。
[root@CentOS6 ~]# wget -O /etc/yum.repos.d/epel.repo
[root@CentOS6 ~]# yum makecache
[root@CentOS6 ~]# yum -y install nginx
我这里安装的nginx版本是1.10.2
② 安装数据库mysql,直接使用本地base源即可。
[root@CentOS6 ~]# yum -y install mysql-server
安装成功之后会发现也会为我们安装mysql客户端工具,用于连接mysql服务端。
然后创建用于存放数据的数据库wordpress,赋予用户wordpress使用该数据库的所有权限,并设置连接数据库的秘密centos,
[root@CentOS6 ~]# mysql
mysql> create database wordpress;
mysql> grant all on wordpress.* to wordpress@'%' identified by 'centos';
mysql> flush privileges;
③ 接下来就是php和及其扩展包的安装,同样使用base源即可
[root@CentOS6 ~]# yum -y install php php-mysql
④ 安装统一管理php解释器和fastcgi进程的工具php-fpm。
[root@CentOS6 ~]# yum -y install php-fpm
修改php-fpm的工作进程的用户和用户组为nobody.nobody(需要同Nginx工作进程的用户/用户组一致,我这里设置的是nobody.nobody),这样做的目的是限制php-fpm和Nginx的权限。php-fpm的配置文件是/etc/nginx/php-fpm.d/www.conf
修改后的内容如下,其他的指令保持默认。
⑤ 修改Nginx的配置,使其能将动态请求转发给php-fpm。
Nginx主配置文件的内容如下:
[root@CentOS6 nginx]# cat /etc/nginx/nginx.conf
user nobody nobody;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
keepalive_timeout 65;
charset utf-8;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf; # 引用server块的扩展配置文件
}
Nginx的server块的扩展配置文件内容如下,