Web服务器群集——Nginx动态网站架构(笔记)

Posted Pakho`

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web服务器群集——Nginx动态网站架构(笔记)相关的知识,希望对你有一定的参考价值。

一、fastcgi & php-fpm

静态网站 :Nginx服务器能处理的静态元素.html .jpg .mp4 .css

1.1 Nginx

ngx_fastcgi_modul

  • fastcgi 快速通用网关接口
  • 处理动态请求的接口
  • Nginx通过ngx_fastcgi_modul模块 链接php-fpm处理动态请求

1.2 PHP

php-fpm

  • PHP-FPM(FastCGI Process Manager :FastCGI进程管理器)是一个PHP GastCGI管理器
  • PHP通过php-fpm接受前台nginx的动态访问请求,如向后端mysql进行查询请求后,将查询结果返回给前台nginx

1.3 PHP-MySQL

  • php-mysql是php连接mysql的接口程序

1.4 MySQL

  • 存储数据

1.5 面试题

  • 什么是FastCGI
  • Nginx+FastCGI运行原理
  • LNMP的运行原理:用户向网站请求,当请求静态元素时,由Nginx独立返回用户,当为动态请求时,将通过fastcgi模块连接php程序传达动态请求,php程序通过fpm接口管理器接受到其请求之后,再通过php-mysql程序向MySQL数据库进行数据存储(口头描述)。

二、PHP-FPM优化

2.1 了解php-fpm相关配置文件

2.1.1 核心配置文件

[root@lnmp ~]# vim /etc/php.ini
;date.timezone =                    date.timezone=PRC 设置PHP的时区
;open_basedir =                     oepn_basedir
  • open_basedir:设置PHP脚本允许访问的目录
  • open_basedir 将php所能打开的文件限制在指定的目录树中,包括文件本身,当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查,当文件在指定的目录树之外,程序将拒绝打开

2.1.2 全局配置文件

[root@lnmp ~]# vim /etc/php-fpm.conf
pid = /run/php-fpm/php-fpm.pid          #pid存放的位置
error_log = /var/log/php-fpm/error.log  #日志存放的位置
;log_level = notice                     #日志级别
daemonize = yes                         #守护进程,将fpm转至后台允许 默认no

2.1.3 扩展配置文件

[root@lnmp ~]# vim /etc/php-fpm.d/www.conf
user = nginx
listen.allowed_clients = 127.0.0.1  #监听允许谁访问,如分离部署填对方IP地址
listen = 127.0.0.1:9000             #fpm监听端口,即nginx中php处理的地址,一般默认值即可,可用格式'ip :port'
slowlog = /var/log/php-fpm/$pool-slow.log #慢查询日志

pm = dynamic                      #动态模式进程管理开启
pm.start_servers = 5              #最初开启多少进程
pm.min_spare_servers = 5          #最小的多余进程数,最少空闲,用户访问会消耗进程,为了满足后续服务随时开启进程保持空闲数为5
pm.max_children = 50              #最大进程数,限定php程序最大进程数
pm.max_spare_servers = 10         #空闲进程超过35个之后 立刻杀死多余进程只保留35个进程
pm.max_requests = 500            # 每个子进程能相应的请求数量 超过500次请求立刻杀死

在这里插入图片描述

2.2 初始化php-fpm

生产环境下常用数值

[root@lnmp ~]# vim /etc/php-fpm.d/www.conf
#设置生产环境下常用数值
pm = dynamic               #启动动态管理模式
pm.start_servers = 32      #初始启动32个进程
pm.max_children = 512      #最大进程数(子进程会在最大和最小数范围之间变化)

pm.min_spare_servers = 32  #随着用户访问的增加,保持32个空闲进程
pm.max_spare_servers = 64  #随着用户离去,杀死大量进程来节约资源
;pm.max_requests = 1500    #每个子进程处理1500个请求,默认为unlimiter(1024个)
[root@lnmp ~]# systemctl restart php-fpm

2.2.1 初始化后

[root@lnmp ~]# ps -aux | grep php | wc -l

2.3 启动php动态监控页面功能

2.3.1 启动测试页功能

[root@lnmp ~]# vim /etc/php-fpm.d/www.conf 
;pm.status_path = /status                   #去掉注释
pm.status_path = /php_status                #更改为如前所示

2.3.2 Nginx 配置页面转发

[root@lnmp ~]# vim /etc/nginx/nginx.conf   #在Server中添加页面转发功能
...
        location = /php_status{
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; 
        include fastcgi_params;
        }
...
[root@lnmp ~]# systemctl restart nginx php-fpm

2.3.3 访问测试页

http://192.168.100.10/php_status

在这里插入图片描述

三、Nginx Location

Location只影响之后带的路径!

启用身份验证模块配置到Server中,应用全局

1)生成账户密码文件

[root@lnmp ~]# yum -y install httpd-tools #安装密码生成工具
[root@lnmp ~]# htpasswd -cm /etc/nginx/conf.d/passwd user10

2)启用身份认证应用至server中

[root@lnmp ~]# vim /etc/nginx/nginx.conf
    server {
        auth_basic "nginx access test!";               #提示消息
        auth_basic_user_file /etc/nginx/conf.d/passwd; #引用认证文件
...
[root@lnmp ~]# systemctl restart nginx

在这里插入图片描述

将身份认证加入status

[root@lnmp ~]# vim /etc/nginx/nginx.conf
    server {

        location = /php_status{
        auth_basic "nginx access test!";
        auth_basic_user_file /etc/nginx/conf.d/passwd;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        include fastcgi_params;
        }
...
[root@lnmp ~]# systemctl restart nginx

访问主页能够正常访问
在这里插入图片描述访问location 限制之后的php_status页面需要输入账户
在这里插入图片描述

3.1 Location 语法规则

location [=|~|~*|!~|!~*|^~] /uri/{
	module;
	module;
}


=   表示精确匹配,优先级也是最高的
~   区分大小写的正则匹配
~*  不区分大小写的正则匹配
/   通用匹配,任何请求都会匹配到
^~  以某些字符串开头
!~ 非 (区分大小写的匹配的正则)
!~* 非 (不区分大小写匹配的正则)

优先级 精准匹配 > 模糊匹配 > 正则匹配 >

3.2 Location 示例

目的:通过不同的表达式,观察表达式之间的优先级

[root@lnmp ~]# vim /etc/nginx/nginx.conf
#        root         /usr/share/nginx/html;
#        location / {
#       index index.php index.html;
#        }                                             #将主配置文件部分进行注释

root /abcd;                                            #添加如下测试页面
index index.html;

location = / { index a.html; }
location ~ / { index b.html; }
location / { index c.html; }
[root@lnmp abcd]# systemctl restart nginx

在这里插入图片描述

#location = / { index a.html; }
[root@lnmp abcd]# systemctl restart nginx

在这里插入图片描述

#location ~ / { index b.html; }
[root@lnmp abcd]# systemctl restart nginx

在这里插入图片描述

#location / { index c.html; }
[root@lnmp abcd]# echo index > index.html
[root@lnmp abcd]# systemctl restart nginx

在这里插入图片描述

四、Nginx 平滑升级

4.1 Nginx信号控制表

信号说明
TERM,INT立刻停止进程
QUIT等待进程结束后再结束进程
HUP平滑地重读配置文件(开启一个新的worker进程读取配置文件,然后关闭旧进程)
USR1重读日志,分割日志时使用
USR2平滑地升级Nginx
WINCH等待进程结束后关闭旧进程(配合USR2来进行升级)

4.2 平滑升级流程解析

例:如平滑升级1.12版本到1.14版本

一、编译安装新版本的nginx,指定安装目录为新目录

二、查看旧的nginx的主程序号和工作进程号
在这里插入图片描述

三、替换旧的执行程序
在这里插入图片描述

四、给主程序发送USR2信号

信号 1 为立刻重启
信号 2 为工作完毕后重启
在这里插入图片描述

  • 旧版本的主程序将重命名它的pid文件为.oldbin(例如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新版本的可执行程序,依次启动新的主程序和新的工作进程

五、给进程发送WINCH信号

等待进程结束后关闭旧进程(配合USR2来进行升级)
在这里插入图片描述

以上是关于Web服务器群集——Nginx动态网站架构(笔记)的主要内容,如果未能解决你的问题,请参考以下文章

部署Nginx+Tomcat负载均衡群集

Web服务器群集之LAMP平台部署(LAMP架构搭建)

haporxy搭建web群集

haporxy搭建web群集

haporxy搭建web群集

Nginx高可用群集架构(Keepalived+nginx+ipvsadm)