8、LNMP架构搭建(Nginx)

LNMP架构搭建(Nginx)

一、Nginx的优点

1、处理高并发性更好

2、系统资源利用率比较高,损耗率很低,稳定(C语言开发)

3、Nginx是异步IO模型,一个进程对应多个连接;Apache是同步IO模型,一个进程对应一个连接。

4、处理静态网页的能力更好

二、Nginx环境的搭建

1、安装Nginx环境,首先需要安装Nginx的运行库/开发环境软件包。

开发环境软件包什么样:后缀带”-devel”的软件包。

安装Nginx的开发环境/运行库yum install pcre-develyum 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

编译和安装makemake 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-devellibjpeg-devellibpng-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、编译安装:makemake 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错误。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器