8、LNMP架构搭建(Nginx)
LNMP架构搭建(Nginx)
一、Nginx的优点
1、处理高并发性更好
2、系统资源利用率比较高,损耗率很低,稳定(C语言开发)
3、Nginx是异步IO模型,一个进程对应多个连接;Apache是同步IO模型,一个进程对应一个连接。
4、处理静态网页的能力更好
二、Nginx环境的搭建
1、安装Nginx环境,首先需要安装Nginx的运行库/开发环境软件包。
开发环境软件包什么样:后缀带”-devel”的软件包。
安装Nginx的开发环境/运行库:yum install pcre-devel
、yum install zlib-devel
(在安装系统时选中了开发环境,因此该软件包已安装完毕)
2、源码包的方式安装Nginx服务器:
源码包老套路,检查编译环境并指定安装路径、程序用户和组,各子目录生成Makefile文件: ./configure --prefix=/usr/local/nginx --with-file-aio() --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --user=nginx --group=nginx --with-http_stub_status_module
编译和安装:make
、make install
3、创建Nginx的进程/程序用户,使Nginx程序单独由该用户管理,以保证Nginx服务的安全性:useradd -M -s /sbin/nologin nginx
(不要家目录,不可登录)
4、nginx的prefix工作目录下开启nginx服务:./nginx
./nginx -?
#查看nginx帮助
./nginx -s
#给nginx进程发信号 stop 停止服务
三、Nginx服务器配置文件介绍
Nginx主配置文件:PREFIX/conf/nginx.conf
1-10行全局配置、11-14行I/O事件配置、17行以后全是http配置
第3行左右: worker_processes 1;
#Nginx服务使用的CPU核心数
第13行左右:worker_connections 1024;
#每个进程处理的最大连接数
35行左右:listen 80
#监听端口
36行左右:server_name localhost
#服务IP地址
43行左右:location / { root html; index index.html index.htm;}
#定义Nginx网页根目录和网页主页索引值
四、源码包安装PHP并使Nginx可以解析PHP
Nginx默认不支持PHP解析
1、PHP的依赖开发环境/运行库:libxml2-devel
、libjpeg-devel
、libpng-devel
2、压缩源码包
3、 ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
–with-gd:支持php处理图形的扩展库GD库
–with-zlib:支持提供数据压缩用的函式库zlib库
-with-config-file-path=/usr/local/php5:指定自己的php.ini路径
–enable-mbstring :mbstring扩展库用于处理多字节字符串(有点像unicode补丁)
–enable-fpm:开启php-fpm(PHP FastCGI Process Manager)模块,PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。
–with-jpeg-dir=/usr/lib:设置libjpeg库的安装路径(支持jpeg图片格式)
4、编译安装:make
、make install
5、先修改php配置文件(PREFIX/etc/php-fpm.conf)的default后缀(默认有后缀);并将源码路径中的php.ini-development主配置文件拷贝一份到PREFIX/etc/php.ini(默认没有这个主配置文件)
6、执行Prefix/sbin/php-fpm从而管理fastcgi(PHP)程序,开启后9000端口也随之开启。
7、配置nginx服务器,使其支持PHP脚本并且指定FastiCGI管理服务的IP和端口
方法1、
PREFIX/conf/fastcgi_params
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
加此条配置目的是告诉php-fpm管理进程php脚本的名字。
PREFIX/conf/nginx.conf
66 location ~ \.php$ {
67 root html;
68 fastcgi_pass 127.0.0.1:9000;
69 fastcgi_index index.php;
70 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
71 include fastcgi_params;
72 }
方法2、
PREFIX/conf/nginx.conf
66 location ~ \.php$ {
67 root html;
68 fastcgi_pass 127.0.0.1:9000;
69 fastcgi_index index.php;
70 include fastcgi_conf;
71 }使用fastcgi_conf的话,配置文件里已经存在了
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
五、LAMP的PHP和LNMP的PHP有什么不同?
LAMP中PHP是Apache的一个模块;而在LNMP中PHP独立存在,PHPCgi由PHP-FPM管理,PHP-FPM拥有自己的端口专门处理PHP解析。
引自:https://www.cnblogs.com/donghui521/p/10334776.html
目前主流的nginx+php的运行原理如下:
1、nginx的worker进程直接管理每一个请求到nginx的网络请求。
2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。
3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了fastcgi功能的进程管理器,php-fpm就是其中的一种。再提一点,php-fpm作为一种fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们通常输入命令 netstat -nlpt|grep php-fpm 会得到:
1 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1057/php-fpm这里的127.0.0.1:9000 就是监听本机9000端口的意思。
4、关于fastcgi的配置文件,目前fastcgi的配置文件一般放在nginx.conf同级目录下,配置文件形式,一般有两种:
1
2 fastcgi.conf 和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常重要的区别:fastcgi_parames文件中缺少下列配置:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;我们可以打开
fastcgi_params
文件加上上述行,也可以在要使用配置的地方动态添加。使得该配置生效。
5、当需要处理php请求时,nginx的worker进程会将请求移交给php-fpm的worker进程进行处理,也就是最开头所说的nginx调用了php,其实严格得讲是nginx间接调用php。
六、LNMP的缺点
PHP-FPM的负载能力有限,如果访问量特别大的话,PHP-FPM容易陷入僵死状态,浏览器显示:502 bad gateway错误。