1.nginx介绍
#Nginx WEB特点
1) Nginx处理静态网页并发性能5w/s,相当于Apache WEB性能的5-10倍;
2)可以实现负载均衡、反向代理功能;
3)消耗操作系统内存,CPU极低
4)对后端服务健康检测的功能
5)支持PHP-CGI和FastCGI协议(PHP-FPM解释器);
6)可以做为缓存服务器,邮件代理服务器;
7)Nginx配置文件比较简洁、容易理解、上手。
#Nginx web工作原理
1)Ngin是由Ngin core内核和各个模块组成的;
2)其中Nginx core内核设计非常小,代码简洁,器用途将用户的请求跟nginx配置文件匹配;
3)匹配配置文件中的Location配置段,Location其 后接访问的URI路径;
4)如果匹配成功的话,则调用location配置段各个指令对应的模块完成相应的工作。
#静态网页和动态网页区别
1)静态网页是跟后端数据库不发生交互的网页,网页内容很少更新、网页文件后缀命名.htm、 . html、.xml; ( . jpglpngljpeglgifIcssljs|txt)
2)动态网页跟后端数据库发生交互的网页,网页内容经常更新、或者随着后端数据库内容变化而更新,网页文件后缀命名.asp、 . jsp、 . php;
#LNMP WEB架 构原理
#Nginx编译部署核心步骤
1)预编译;
. /configure --prefix=/usr/ local/ nginx/ --user=www -- g roup=www --with-http_stub_status_module
作用:主要是检测Linux系统安装该所需的依赖环境、库文件,检测Linux系统是否存在GCc编译环境、
指定软件服务部署的路径,自定义软件服务特定模块、功能、参数、
最终会产生Makefile编译引导文件。
2)编译;
make
作用:主要是通过make编译工具,去读取第步预编译产生的Makefile文件,调用Linux系统下GCC编译器、将软件包中的源代码文件编译生成二进制文件Makefile文件用途,告知make编译工具在编译源代码文件时从哪个源码文件开始编译至哪个源码文件结束编译,以及记录编译时所需的依赖关系。
3)安装;
make instal l
作用:主要是将第二步编译产生的二进制文件,拷贝或者安装至Linux系统指定的安装日录--prefix=/usr/ local/nginx/。
#Nginx YUM部署核心步骤
1)要求Linux系统能够上外网;
2)默认Centos base源中服务器上是不存在Nginx软件包;
3)添加第三方的Epel-release扩展源;
4)通过yum install -y nginx即可从扩展源中安装Nginx;
5) systemctl restart nginx. service启动服务即可。
#LNMP WEB 架构原理
1 ) PHP动态网页Nginx是不能直接处理、解析的;
2) PHP网页程序交于PHP-FPM解释器解析,PHP-FPM可以将动态PHP文件解析为静态内容;
3) PHP-FPM不是WEB软件,不能对外发布;
4)借助Nginx+PHP-FPM整合起来,当用户访问index. php文件,Nginx发 现是动态网页;
5) Ng inx将index . php请求通过FastCGI协议转发给后端PHP-FPM解释器;
6)由PHP-FPM解释器将动态页面index.php进行解析,如果index.php页面连接后端数据库;
7)PHP程序如果需要连接后端MYSQL数据库,需要有连接驱动PHP-MYSQL。
2.LNMP架构
2.1LNMP用途
LNMP是一个服务器架构,通过在Linux系统上部署Nginx,Mysql,PHP这三个组件来实现一些以LNMP为环境架构的软件的发布。
2.2工作原理
client(客户端)发送请求给nginx服务器,如果是静态请求(.html,.xml,.htm),nginx会直接解析,如果是动态请求(php,jsp等)则会由nginx转发给php-ftp来进行解析,然后会调用数据库的相应数据运算返回。
2.3实战部署LNMP
A.PHP版本5.4
A2.3.1安装nginx
官网地址:nginx news
1)下载源码包解压
root@zzp113 ~]# wget -c https://nginx.org/download/nginx-1.22.1.tar.gz -P /usr/src/
[root@zzp113 ~]# cd /usr/src/
[root@zzp113 src]# ls
debug kernels nginx-1.22.1.tar.gz
[root@zzp113 src]# tar xzvf nginx-1.22.1.tar.gz
[root@zzp113 src]# cd nginx-1.22.1/
[root@zzp113 nginx-1.22.1]# ll
总用量 804
drwxr-xr-x. 6 1001 1001 4096 12月 13 20:33 auto
-rw-r--r--. 1 1001 1001 317399 10月 19 16:02 CHANGES
-rw-r--r--. 1 1001 1001 485035 10月 19 16:02 CHANGES.ru
drwxr-xr-x. 2 1001 1001 168 12月 13 20:33 conf
-rwxr-xr-x. 1 1001 1001 2590 10月 19 16:02 configure
drwxr-xr-x. 4 1001 1001 72 12月 13 20:33 contrib
drwxr-xr-x. 2 1001 1001 40 12月 13 20:33 html
-rw-r--r--. 1 1001 1001 1397 10月 19 16:02 LICENSE
drwxr-xr-x. 2 1001 1001 21 12月 13 20:33 man
-rw-r--r--. 1 1001 1001 49 10月 19 16:02 README
drwxr-xr-x. 9 1001 1001 91 12月 13 20:33 src
[root@zzp113 src]# ls -l os/unix/ngx_ ###.c 为源码文件,.h为引导文件
ngx_alloc.c ngx_freebsd_config.h ngx_process_cycle.c ngx_solaris_sendfilev_chain.c
~
2)预编译-----产生makefile引导文件
yum install -y gcc pcre-devel zlib-devel ###部署环境
./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module ##预编译
####预编译--检查依赖环境,指定属组属主,指定服务部署路径
[root@zzp113 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module
checking for OS
+ Linux 3.10.0-957.el7.x86_64 x86_64
checking for C compiler ... not found ####缺少gcc,c语言编译器
./configure: error: C compiler cc is not found
[root@zzp113 nginx-1.22.1]# yum install gcc -y ####安装gcc
####二次预编译
[root@zzp113 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module
checking for OS
~ ####报错:
./configure: error: the HTTP rewrite module requires the PCRE library. ####缺少pcre库文件
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
[root@zzp113 nginx-1.22.1]# find / -name libpcre*.so ####查找pcre库文件
find: ‘/proc/78172’: 没有那个文件或目录
[root@zzp113 nginx-1.22.1]# yum install pcre-devel -y ####安装pcre库文件
####三次预编译
[root@zzp113 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module
###报错:
./configure: error: the HTTP gzip module requires the zlib library. ###缺少gzip库,作用:nginx-web服务自压缩功能,节省带宽,减少传输时间
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
[root@zzp113 nginx-1.22.1]# yum install -y zlib-devel ####安装gzib库文件
[root@zzp113 nginx-1.22.1]# find / -name libz.so ####查看gzib库文件
/usr/lib64/libz.so
###四次预编译
[root@zzp113 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module
####成功,预编译完成,产生makefile引导文件
3)make编译 --生成二进制文件,这里存放的就是nginx的所有功能,.config则是指定开启哪些功能
[root@zzp113 nginx-1.22.1]# make ###编译
make -f objs/Makefile
make[1]: 进入目录“/usr/src/nginx-1.22.1”
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
~
sed -e "s|%%PREFIX%%|/usr/local/nginx/|" \ ###nginx目录
-e "s|%%PID_PATH%%|/usr/local/nginx//logs/nginx.pid|" \
-e "s|%%CONF_PATH%%|/usr/local/nginx//conf/nginx.conf|" \ ####配置文件,控制nginx开启的功能
-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx//logs/error.log|" \ ####错误日志
< man/nginx.8 > objs/nginx.8
make[1]: 离开目录“/usr/src/nginx-1.22.1”
4)安装---将二进制文件objs/nginx拷贝到/usr/local/nginx/sbin
[root@zzp113 nginx-1.22.1]# make install ####安装
make -f objs/Makefile install
make[1]: 进入目录“/usr/src/nginx-1.22.1”
test -d '/usr/local/nginx/' || mkdir -p '/usr/local/nginx/'
test -d '/usr/local/nginx//sbin' \
|| mkdir -p '/usr/local/nginx//sbin'
test ! -f '/usr/local/nginx//sbin/nginx' \
|| mv '/usr/local/nginx//sbin/nginx' \
'/usr/local/nginx//sbin/nginx.old'
cp objs/nginx '/usr/local/nginx//sbin/nginx' ###其实就是将二进制文件objs/nginx拷贝到/usr/local/nginx/sbin/nginx
[root@zzp113 nginx-1.22.1]# md5sum objs/nginx
abea76669d0523107e795fad8e09f209 objs/nginx
[root@zzp113 nginx-1.22.1]# md5sum /usr/local/nginx/sbin/nginx
abea76669d0523107e795fad8e09f209 /usr/local/nginx/sbin/nginx
5)启动nginx服务
[root@zzp113 nginx-1.22.1]# useradd -s /sbin/nologin www -M ###创建www用户,指定不可ssh登录,不创建家目录
[root@zzp113 nginx-1.22.1]# /usr/local/nginx/sbin/nginx ###启动服务
[root@zzp113 nginx-1.22.1]# ps -ef|grep nginx ###查看进程
root 86163 1 0 22:07 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 86164 86163 0 22:07 ? 00:00:00 nginx: worker process
root 86197 76088 0 22:08 pts/1 00:00:00 grep --color=auto nginx
[root@zzp113 nginx-1.22.1]#
6)访问测试
7)发布百度网站
[root@zzp113 nginx-1.22.1]# cd /usr/local/nginx/html/ ###网站发布目录
[root@zzp113 html]# ls
50x.html index.html
[root@zzp113 html]# rm -rf *
[root@zzp113 html]# rz
[root@zzp113 html]# ls
index.html
A2.3.2LNMP整合
8)安装php解析器,启动
php解释器php-fpm将动态php页面解析为静态发送给nginx,这样就nginx就可以解析php文件了
[root@zzp113 html]# yum remove php*
已加载插件:fastestmirror, langpacks
参数 php* 没有匹配
不删除任何软件包
[root@zzp113 html]# yum install php php-devel php-fpm -y ###安装
[root@zzp113 html]# systemctl start php-fpm ###启动
[root@zzp113 html]# ps -ef|grep php
root 89177 1 0 22:57 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
apache 89178 89177 0 22:57 ? 00:00:00 php-fpm: pool www
apache 89179 89177 0 22:57 ? 00:00:00 php-fpm: pool www
apache 89180 89177 0 22:57 ? 00:00:00 php-fpm: pool www
apache 89181 89177 0 22:57 ? 00:00:00 php-fpm: pool www
apache 89182 89177 0 22:57 ? 00:00:00 php-fpm: pool www
root 89196 76088 0 22:58 pts/1 00:00:00 grep --color=auto php
[root@zzp113 html]# cd /usr/local/nginx/conf/ ###进入nginx配置文件
[root@zzp113 conf]# ls
fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params
fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default
fastcgi_params koi-win nginx.conf scgi_params.default win-utf
[root@zzp113 conf]# vim nginx.conf ###编辑配置文件
nginx.conf修改内容:
location ~ \.php$ {
root /usr/local/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
[root@zzp113 conf]# /usr/local/nginx/sbin/nginx -t ###测试文件修改是否有错
nginx: the configuration file /usr/local/nginx//conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx//conf/nginx.conf test is successful
[root@zzp113 conf]# /usr/local/nginx/sbin/nginx -s reload ###重启生效
[root@zzp113 conf]#
创建index.php测试页面
[root@zzp113 conf]# cd /usr/local/nginx/html/
[root@zzp113 html]# ls
index.html
[root@zzp113 html]# vim index.html
[root@zzp113 html]# mv index.html index.php
测试文件内容:
<?php
phpinfo();
?>
B.PHP版本7.2
B2.3.2安装PHP-fpm7.2
1)卸载PHP旧版本;
yum remove php* -y
2)安装PHP 7.x源;
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
3)安装PHP7.2相关软件包;
yum install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml -y
4)查看PHP版本信息;
php -v
5)启动php-fpm服务;
systemctl restart php-fpm.service
6)查看PHP服务进程;
ps -ef|grep php-fpm
7)安装php-mysql
yum install -y php-mysql
B2.3.2LNMP整合
7)Nginx.conf配置文件代码如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/local/nginx/html;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root /usr/local/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
9)重新启动nginx
[root@zzp113 html]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx//conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx//conf/nginx.conf test is successful
[root@zzp113 html]# /usr/local/nginx/sbin/nginx -s reload
8)测试