ToB企服应用市场:ToB评测及商务社交产业平台

标题: 探秘 Nginx:为何它成为服务器领域的宠儿? [打印本页]

作者: 笑看天下无敌手    时间: 2024-10-11 08:39
标题: 探秘 Nginx:为何它成为服务器领域的宠儿?
一、Web服务介绍

Web 服务是在网络情况中运行的应用程序,负责处置惩罚客户端的请求并提供相应的响应。在众多 Web 服务中,Apache 和 Nginx 是两款备受关注和广泛使用的服务器软件。
Apache

Apache 是历史久长且非常盛行的开源 Web 服务器。它具有以下特点:

例如,许多大型企业网站和政府机构网站都选择 Apache 作为其 Web 服务,由于其稳固可靠的性能能够满意高流量和复杂业务需求。
Apache prefork 模子

在 Prefork 模子中,服务器会预先启动多个子进程。每个子进程在等待毗连请求时处于空闲状态。当有新的毗连请求到达时,一个空闲的子进程会被激活来处置惩罚该请求。
这种模子的长处包括:

然而,Prefork 模子也存在一些缺点:

例如,在一个小型的企业内部网站,如果并发访问量不是特殊大,且使用了一些旧的不支持多线程的模块,Prefork 模子大概是一个符合的选择。但对于像大型电商网站那样的高并发场景,大概就需要思量其他更高效的模子或服务器软件。
Apache worker 模子

在 Worker 模子中,服务器会启动多个进程,每个进程又会生成多个线程。这些线程共同处置惩罚客户端的请求。
Worker 模子具有以下特点和上风:
长处

缺点

举例来说,对于一个流量适中、需要较好地节省资源并且对并发处置惩罚有一定要求的网站,Worker 模子大概是一个比力符合的选择。但如果网站使用了一些特定的不兼容模块,就需要审慎思量是否采用此模子。
Apache event模子

在 Event 模子中,它采用了异步非壅闭的方式来处置惩罚毗连。这意味着服务器能够在一个线程中同时处置惩罚多个毗连,而无需为每个毗连创建新的进程或线程。
Event 模子的主要特点和上风包括:
长处

缺点

例如,对于像双十一期间的电商平台这种瞬间流量巨大的情况,Apache 的 Event 模子能够更好地应对,确保网站的稳固运行和快速响应,制止出现服务器崩溃或响应迟缓的标题。但在使用之前,需要对网站所依赖的模块进行充实的测试,以确保其在 Event 模子下正常工作。
Nginx

Nginx 是一款高性能的 Web 服务器和反向代理服务器。

比如,一些高流量的互联网公司,如淘宝、腾讯等,会使用 Nginx 来处置惩罚海量的用户请求,确保网站的快速响应和稳固运行。
二、服务端 I/O 流程

服务端的 I/O(输入 / 输出)流程是指服务器处置惩罚来自客户端的数据输入以及向客户端发送数据输出的过程。
一般来说,服务端的 I/O 流程可以分为以下几个主要步骤:
在整个 I/O 流程中,大概会涉及到不同的 I/O 模式,如壅闭 I/O、非壅闭 I/O、异步 I/O 等,以适应不同的性能和场景需求。
例如,在一个在线游戏服务器中,当玩家进行操作时,服务器按照上述流程接收、处置惩罚请求,并及时发送响应,以实现游戏的实时交互。又比如,在文件下载服务器中,服务器接收客户端的下载请求,读取文件数据并发送给客户端,完成文件传输的 I/O 过程。
   服务器的  I/O      磁盘  I/O      网络  I/O :   一切皆文件  ,  本质为对  socket  文件的读写  磁盘 I/O

磁盘 I/O(输入 / 输出)是指计算机体系与磁盘装备之间的数据互换过程。
磁盘 I/O 主要包括读操作和写操作:
读操作
当体系需要从磁盘获取数据时,会发出读请求。操作体系会将请求发送到磁盘控制器,磁盘控制器控制磁盘的机器部件定位到存储所需数据的磁道和扇区,然后将数据读取到磁盘缓冲区,并终极传输到体系内存供应用程序使用。
写操作
当体系要将数据保存到磁盘时,会发起写请求。数据起首从内存传输到磁盘缓冲区,然后磁盘控制器将缓冲区中的数据写入到磁盘的指定位置。
磁盘 I/O 性能对计算机体系的团体性能有重要影响。一些影响磁盘 I/O 性能的因素包括:
例如,在数据库服务器中,如果频繁进行大量数据的读写操作,磁盘 I/O 性能不敷大概导致数据库响应迟缓,影响整个体系的运行服从。又比如,在视频编辑软件中,处置惩罚大型视频文件时,如果磁盘 I/O 速率跟不上,会导致视频编辑过程卡顿、渲染时间延伸等标题
      机器磁盘的寻道时间、旋转耽误和数据传输时间:        寻道时间:是指磁头移动到正确的磁道上所耗费的时间,寻道时间越短则   I/O   处置惩罚就越快,现在磁盘的寻道时 间一般在3-15   毫秒左右。        旋转耽误:是指将磁盘片旋转到数据所在的扇区到磁头下面所耗费的时间,旋转耽误取决于磁盘的转速,通常 使用磁盘旋转一周所需要时间的1/2   之一表现,比如   7200   转的磁盘均匀训传耽误大约为60*1000/7200/2=4.17毫秒,公式的意思为 (每分钟   60   秒   *1000   毫秒每秒   /7200   转每分   /2   ),如果是 15000转的则为   60*1000/15000/2=2   毫秒。   
     数据传输时间:指的是读取到数据后传输数据的时间,主要取决于传输速率,这个值等于数据大小除以传输速        率,现在的磁盘接口每秒的传输速率可以达到   600MB   ,因此可以忽略不计。        常见的机器磁盘均匀寻道时间值:        7200   转   /   分的磁盘均匀物理寻道时间:   9   毫秒        10000   转   /   分的磁盘均匀物理寻道时间:   6   毫秒        15000   转   /   分的磁盘均匀物理寻道时间:   4   毫秒        常见磁盘的均匀耽误时间:        7200   转的机器盘均匀耽误:   60*1000/7200/2 = 4.17ms        10000   转的机器盘均匀耽误:   60*1000/10000/2 = 3ms        15000   转的机器盘均匀耽误:   60*1000/15000/2 = 2ms        每秒最大   IOPS   的计算方法:        7200   转的磁盘   IOPS   计算方式:   1000   毫秒   /(9   毫秒的寻道时间   +4.17   毫秒的均匀旋转耽误时        间   )=1000/13.13=75.9 IOPS        10000   转的磁盘的   IOPS   计算方式:   1000   毫秒   /(6   毫秒的寻道时间   +3   毫秒的均匀旋转耽误时        间   )=1000/9=111IOPS        15000   转的磁盘的   IOPS   计算方式:   15000   毫秒   /(4   毫秒的寻道时间   +2   毫秒的均匀旋转耽误时        间   )=1000/6=166.6 IOPS     网络 I/O

网络 I/O(输入 / 输出)是指计算机体系通过网络进行数据的接收和发送过程。
在网络 I/O 中,主要包括以下几种常见的操作模式:
网络 I/O 性能受到多种因素的影响,如网络带宽、耽误、数据包丢失率等。
例如,在一个高并发的 Web 服务器中,如果采用不符合的网络 I/O 模式,大概会导致大量毗连请求被壅闭,服务器响应变慢。而使用高效的 I/O 多路复用或异步 I/O 模式,可以明显进步服务器的并发处置惩罚本领和性能。又如,在实时在线游戏中,低耽误的网络 I/O 对于保证游戏的流通性和玩家体验至关重要,如果网络 I/O 出现耽误或卡顿,大概会导致游戏中的操作不及时响应
网络I/O 处置惩罚过程

网络 I/O 的处置惩罚过程通常包括以下几个主要阶段:
例如,在一个文件下载的场景中:

在一个在线聊天应用中:

这些阶段共同构成了网络 I/O 的处置惩罚过程,不同的应用和网络情况大概会对这些阶段进行优化和调整,以实现更高效和可靠的网络通信。
不论磁盘和网络I/O

   每次  I/O  ,都要经由两个阶段:     第一步:将数据从文件先加载至内核内存空间(缓冲区),等待数据准备完成,时间较长     第二步:将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短   三、I/O 模子

I/O 模子相关概念

同步与异步


壅闭与非壅闭


 网络 I/O 模子

 I/O 的常见具体实现方式

 四、零拷贝

零拷贝(Zero-Copy)是一种在计算机体系中优化数据传输操作的技术,旨在淘汰数据在内存之间的不须要复制,从而进步数据传输的性能和服从。
在传统的数据传输过程中,通常需要多次的数据拷贝操作。例如,从磁盘读取文件并通过网络发送时,数据大概要从磁盘拷贝到内核缓冲区,然后再从内核缓冲区拷贝到用户空间缓冲区,最后从用户空间缓冲区拷贝到网络缓冲区进行发送。
而零拷贝技术通过制止或淘汰这些不须要的拷贝,直接将数据从源(如磁盘)传输到目的(如网络),大概在某些情况下,只进行一次须要的拷贝。
零拷贝技术的长处包括:
常见的实现零拷贝的方式有:
例如,在一个高性能的文件服务器中,如果需要频繁地将大文件发送给客户端,使用零拷贝技术可以极大地进步文件传输的速率,提拔服务器的团体性能和响应本领。
 五、Nginx 架构和安装

 Nginx 介绍

Nginx 是一款轻量级、高性能的 Web 服务器和反向代理服务器,具有以下明显特点和上风:
特点
上风
应用场景
例如,许多大型网站如淘宝、腾讯等都使用 Nginx 来处置惩罚高并发的用户请求,保证网站的快速稳固运行。对于中小企业的网站,Nginx 也能以其高效的性能和简朴的设置,满意业务需求,低落服务器成本。
 Nginx 功能介绍

Nginx 安装

   Nginx  安装可以使用  yum  或源码安装,但是推荐使用源码编译安装     yum  的版本比力旧     编译安装可以更方便自界说相关路径     使用源码编译可以自界说相关功能,更方便业务的上的使用    Nginx 编译安装

 上传安装包


解压缩
[root@nginx ~]# tar zxf nginx-1.24.0.tar.gz 

 下载存在的依赖关系
[root@nginx nginx-1.24.0]# yum install gcc pcre-devel zlib-devel openssl-devel -y
 

 情况检测

注意不能有报错

 开始编译






创建用户

启动

关闭

 测试

关闭nginx的debug功能


 编写情况变量(把nginx软件的命令实行路径添加到情况变量中)
[root@nginx ~]# vim ~/.bash_profile

 [root@nginx ~]# source ~/.bash_profile 

nginx的平滑升级及版本回滚

下载安装包
nginx: 下载
 


上传需要加载的模块

解压缩
[root@nginx ~]# tar zxf echo-nginx-module-0.63.tar.gz 
 [root@nginx ~]# tar zxf nginx-1.26.2.tar.gz

开始编译新版本
需要参加echo-nginx-module-0.63这个模块

编译完成make一下,注意不能make install

   把之前的旧版的  nginx  命令备份   
   

   把新版本的  nginx  命令复制已往    [root@nginx sbin]# \cp -f /root/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin/nginx     启动新版本的nginx     
     回收旧版本     
     
   
   
       版本回滚       如果升级的版本发现标题需要回滚   ,   可以重新拉起旧版本的   worker        
   
  可以选择隐蔽nginx的版本
需要编辑/root/nginx-1.24.0/src/core下的nginx.h这个文件
修个这块即可

Nginx的进程结构

主进程(Master Process)

工作进程(Worker Process)

缓存加载进程(Cache Loader Process)

缓存管理器进程(Cache Manager Process)

例如,假设一个网站在高峰期每秒收到 1000 个请求,Nginx 的多个工作进程可以同时处置惩罚这些请求,快速地将响应返回给客户端。而主进程则在后台监控整个体系的运行状态,确保一切正常。如果需要修改设置,比如增长新的虚拟主机设置,主进程会重新读取设置并指示工作进程应用新的设置,而整个过程中服务不会中断。
Nginx 进程间通信

信号(Signals)

共享内存(Shared Memory)

套接字(Sockets)

文件锁(File Locks)

六、 Nginx 模块介绍

焦点模块(Core Modules)

HTTP 模块(HTTP Modules)

负载均衡模块(Load Balancing Modules)

访问控制模块(Access Control Modules)

缓存模块(Caching Modules)

七、Nginx常用命令及参数 

      [root@nginx ~]# nginx -v        nginx version: nginx/1.18.0        Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]        Options:        -?,-h : this help        -v : show version and exit        -V : show version and configure options then exit #   表现版本和编译参数        -t : test configuration and exit #   测试设置文件是否异        -T : test configuration, dump it and exit #   测试并打印        -q : suppress non-error messages during configuration testing #   静默        模式        -s signal : send signal to a master process: stop, quit, reopen, reload #        发送信号   ,reload   信号 会生成新的   worker,   但   master   不会重新生成        -p prefix : set prefix path (default: /etc/nginx/) #   指定   Nginx    目次        -c filename : set configuration file (default: /etc/nginx/nginx.conf) #        设置文件路径        -g directives : set global directives out of configuration file #   设置全局指令   ,   注意和        设置文件不要同时设置   ,   否则冲突     

 


八、Nginx服务的启动脚本编写

[root@nginx ~]# vim /lib/systemd/system/nginx.service

    Description                  形貌
  After                              启动nginx服务时,这些服务会被主动激活
  wants                            依赖性
  Type                              类型
  PIDFile                          pid的路径
  ExecStartPre                启动nginx服务时,检查设置文件是否有错误
  ExecStart                      真实启动的命令              
  
 九、Nginx全局设置参数优化调整


设置文件阐明

      nginx    官方帮助文档:   http://nginx.org/en/docs/        Nginx   的设置文件的构成部分:        主设置文件:   nginx.conf        子设置文件   : include conf.d/*.conf        fastcgi   ,    uwsgi   ,   scgi    等协议相关的设置文件        mime.types   :支持的   mime   类型,   MIME(Multipurpose Internet Mail Extensions)   多用途互联网邮        件扩展类型,   MIME   消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某        种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会主动        使用指定应用程序来打开。多用于指定一些客户端自界说的文件名,以及一些媒体文件打开方式。     nginx 设置文件格式阐明

      设置文件由指令与指令块构成        每条指令以   ;   分号末端,指令与值之间以空格符号分隔        可以将多条指令放在同一行   ,   用分号分隔即可   ,   但可读性差   ,   不推荐        指令块以   { }   大括号将多条指令组织在一起   ,   且可以嵌套指令块        include   语句允许组合多个设置文件以提拔可维护性        使用   #   符号添加解释,进步可读性        使用   $   符号使用变量        部分指令的参数支持正则表达式     主设置文件结构:四部分

      main block   :主设置段,即全局设置段,对   http,mail   都有用        #   事件驱动相关的设置        event {        ...        }        #http/https    协议相关设置段        http {       ...        }        #   默认设置文件不包括下面两个块        #mail    协议相关设置段        mail {        ...        }        #stream    服务器相关设置段        stream {        ...        }     
   默认的nginx.conf 设置文件格式阐明

      #   全局设置端,对全局生效,主要设置   nginx   的启动用户   /   组,启动的工作进程数目,工作模式,   Nginx   的   PID   路        径,日志路径等。        user nginx nginx;        worker_processes 1; #   启动工作进程数数目        events { #events #   设置快,主要影响   nginx   服务器与用户的网络毗连,比如是否允许同时继承多        个网络毗连,使用哪种事件驱动模子    #   处置惩罚请求,每个工作进程可以同时支持的        最大毗连数,是否开启对多工作进程下的网络毗连进行序列化等。        worker_connections 1024; #   设置单个   nginx   工作进程可以继承的最大并发,作为   web   服务器        的时候最大并发数为    #worker_connections *        worker_processes   ,作为反向代理的时候为        #(worker_connections * worker_processes)/2        }        http { #http   块是   Nginx   服务器设置中的重要部分,缓存、代理和日志格        式界说等绝大多数功能和第三方模块都    #   可以在这设置,   http   块可        以包含多个   server   块,而一个   server   块中又可以包含多个   location   块,        #server   块可以设置文件引入、   MIME-Type   界说、日志自界说、是        否启用   sendfile   、毗连超时时间和    #   单个链接的请求上限等。        include mime.types;        default_type application/octet-stream;        sendfile on; #   作为   web   服务器的时候打开   sendfile   加速静态文件传输,指定是        否使用        #sendfile   体系调用来传输文件        #sendfile   体系调用在两个文件形貌符之间直接传递数据   (   完全在        内核中操作   )        #   从而制止了数据在内核缓冲区和用户缓冲区之间的拷贝,操作服从        很高,被称之为零拷贝,        #   硬盘    >> kernel buffer (   快速拷贝到   kernelsocket        buffer) >>   协议栈。        keepalive_timeout 65; #   长毗连超时时间,单元是秒        server { #   设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多        个   location   模块        #   比如本虚拟机监听的端口、本虚拟机的名称和   IP   设置,多个        server    可以使用一个端口比如都使用    #80   端口提供   web   服务        listen 80; #   设置   server   监听的端口           server_name localhost; #    本    server    的名称,当访问此名称的时候    nginx    会调用当前    serevr           内部的设置进程匹配。           location / { #location    其实是    server    的一个指令,为    nginx    服务器提供比力           多而且机动的指令           #    都是在    location    中表现的,主要是基于    nginx    继承到的请求字符           串           #    对用户请求的    UIL    进行匹配,并对特定的指令进行处置惩罚           #    包括地址重定向、数据缓存和应答控制等功能都是在这部分实现           #    另外许多第三方模块的设置也是在    location    模块中设置。           root html; #    相当于默认页面的目次名称,默认是安装目次的相对路径,可以使           用绝对路径设置。           index index.html index.htm; #    默认的页面文件名称           }           error_page 500 502 503 504 /50x.html; #    错误页面的文件名称           location = /50x.html { #location    处置惩罚对应的不同错误码的页面定           义到    /50x.html           #    这个跟对应其    server    中界说的目次下。           root html; #    界说默认页面所在的目次           }           }           #    和邮件相关的设置           #mail {           # ...           # } mail     协议相关设置段           #tcp    代理设置,    1.9    版本以上支持           #stream {           # ...           # } stream     服务器相关设置段           #    导入其他路径的设置文件           #include /apps/nginx/conf.d/*.conf           }      

 

[root@nginx ~]# vim /etc/security/limits.conf


 十、Nginx设置中的root和alias

   root  :指定  web  的家目次,在界说  location  的时候,文件的绝对路径等于   root+location         alias   :界说路径别名,会把访问的路径重新界说到其指定的路径   ,   文档映射的另一种机制   ;   仅能用于        location   上下文   ,   此指令使用较少         root #   给定的路径对应于   location   中的   /uri   左侧的   /        alias #   给定的路径对应于   location   中的   /uri   的完备路径    我们新建一个子设置文件(注意要写在前面,写到后面不生效)



写解析


root


alias

十一、Nginx-location用法详解


      在一个   server   中   location   设置段可存在多个,用于实现从   uri   到文件体系的路径映射;        ngnix   会根据用户请求的   URI   来检查界说的全部   location   ,按一定的优先级找出一个最佳匹配,        而后应用其设置在没有使用正则表达式的时候,   nginx   会先在   server   中的多个   location   选取匹配度最        高的一个   uri        uri   是用户请求的字符串,即域名后面的   web   文件路径        然后使用该   location   模块中的正则   url   和字符串,如果匹配成功就竣事搜索,并使用此   location   处置惩罚        此请求。          #   语法规则:        location [ = | ~ | ~* | ^~ ] uri { ... }        = #   用于标准   uri   前,需要请求字串与   uri   准确匹配,大小敏感   ,   如果匹配成功就制止向下匹配并立        即处置惩罚请求        ^~ #   用于标准   uri   前,表现包含正则表达式   ,   并且匹配以指定的正则表达式开头        #   对   uri   的最左边部分做匹配检查,不区分字符大小写        ~ #   用于标准   uri   前,表现包含正则表达式   ,   并且区分大小写        ~* #   用于标准   uri   前,表现包含正则表达式   ,   并且不区分大写        不带符号    #   匹配起始于此   uri   的全部的   uri        \ #   用于标准   uri   前,表现包含正则表达式并且转义字符。可以将    . * ?   等转义为普通符号      优先级
  (~* = ~)> 不带符号  >  ^~  >   =
  


= #用于标准uri前,需要请求字串与uri准确匹配,大小敏感,如果匹配成功就制止向下匹配并立


两个比力一下(无符号的优先级大于 “=”  的优先级)


   ^~ #  用于标准  uri  前,表现包含正则表达式  ,  并且匹配以指定的正则表达式开头     #  对  uri  的最左边部分做匹配检查,不区分字符大小写  

 


 

~ #用于标准uri前,表现包含正则表达式,并且区分大小写


 







 十二、Nginx下的用户认证


 由 ngx_http_auth_basic_module 模块提供此功能



 十三、Nginx自界说错误页面

   自 界说错误页,同时也可以用指定的响应状态码进行响应  ,   可用位置:  http, server, location, if in     location   


十四、Nginx自界说日志



十五、Nginx中的文件检测

   try_files  会按次序检查文件是否存在,返回第一个找到的文件或文件夹(末端加斜线表现为文件夹),如果全部文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI  的指向。最后一个参数是回退  URI  且必须存在,否则会出现内部500  错误。     语法格式       Syntax: try_files file ... uri;        try_files file ... =code;        Default: —        Context: server, location     

 十六、Nginx中的长链接的管理


      keepalive_timeout timeout [header_timeout]; #   设定保持毗连超时时长,   0   表现克制长毗连,        默认为   75s        #   通常设置在   http   字段作为站点全局设置        keepalive_requests    数字   ; #   在一次长毗连上所允许请求的资源的最大数目        #   默认为   100   次   ,   建议适当调大   ,   比如   :500              keepalive_requests 3;           keepalive_timeout 65 60;           #    开启长毗连后,返回客户端的会话保持时间为    60s    ,单次长毗连累计请求达到指定次数请求或    65    秒就会被断           开,第二个数字    60    为发送给客户端应答报文头部中表现的超时时间设置为    60s    :如不设置客户端将不表现超时时           间。           Keep-Alive:timeout=60 #    浏览器收到的服务器返回的报文           #    如果设置为    0    表现关闭会话保持功能,将如下表现:           #Connection:close     浏览器收到的服务器返回的报文        [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
这里是主设置文件不是子设置文件

 下载测试工具

   
   
    五秒断开   
  十七、Nginx下载服务器的设定及优化

      ngx_http_autoindex_module    模块处置惩罚以斜杠字符    "/"    末端的请求,并生成目次列表   ,   可以做为下载服务设置使用        相关指令:
      autoindex on | off; #   主动文件索引功能,默为   off        autoindex_exact_size on | off; #   计算文件确切大小(单元   bytes   ),   off    表现大概大小(单元   K   、        M)   ,默认   on        autoindex_localtime on | off ; #   表现本机时间而非   GMT(   格林威治   )   时间,默认   off        autoindex_format html | xml | json | jsonp; #   表现索引的页面文件风格,默认   html        limit_rate rate; #   限制响应客户端传输速率   (   除   GET   和   HEAD   以外的全部方法   )   ,单元 B/s,bytes/second,    #   默认值   0,   表现无穷制   ,   此指令由        ngx_http_core_module   提供        set $limit_rate 4k; #   也可以通变量限速   ,   单元   B/s,   同时设置   ,   此项优级高   .     


 点击可直接下载
这里的时间不是当地的时间,是格林尼治时间


 文件粗略大小


限速(默认不限速)


十八、Nginx的状态页面

   基于  nginx   模块   ngx_http_stub_status_module   实现,     在编译安装  nginx  的时候需要添加编译参数   --with-http_stub_status_module     否则设置完成之后监测会是提示法错误           #    设置示例:           location /nginx_status {           stub_status;           auth_basic "auth login";           auth_basic_user_file /apps/nginx/conf/.htpasswd;           allow 192.168.0.0/16;           allow 127.0.0.1;           deny all;           }           #    状态页用于输出    nginx    的基本状态信息:           #    输出信息示例:           Active connections: 291           server accepts handled requests           16630948 16630948 31070465           上面三个数字分别对应    accepts,handled,requests    三个值           Reading: 6 Writing: 179 Waiting: 106           Active connections: #    当前处于活动状态的客户端毗连数           #    包括毗连等待空闲毗连数    =reading+writing+waiting           accepts    :     #    统计总值,    Nginx    自启动后已经继承的客户端请求毗连的总数。           handled: #    统计总值,    Nginx    自启动后已经处置惩罚完成的客户端请求毗连总数           #    通常等于    accepts    ,除非有因    worker_connections    限制等被拒绝的           毗连           requests: #    统计总值,    Nginx    自启动后客户端发来的总的请求数               Reading: #     当前状态,正在读取客户端请求报文首部的毗连的毗连数              #     数值越大     ,     阐明列队现象严重     ,     性能不敷              Writing: #     当前状态,正在向客户端发送响应报文过程中的毗连数     ,     数值越大     ,     阐明              访问量很大              Waiting: #     当前状态,正在等待客户端发出请求的空闲毗连数              开启      keep-alive     的情况下     ,     这个值等于     active –              (reading+writing)            


 但是状态也不能随便让人去看,需要指定


十九、Nginx的数据压缩功能

   Nginx  支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文     件大小将比源文件明显变小,样有助于低落出口带宽的使用率,低落企业的  IT  支出,不过会占用相     应的  CPU  资源。     Nginx  对文件的压缩功能是依赖于模块   ngx_http_gzip_module,  默认是内置模块        设置指令如下:                #     启用或禁用     gzip     压缩,默认关闭              gzip on | off;              #     压缩比由低到高从     1     到     9     ,默认为     1     ,值越高压缩后文件越小,但是消耗     cpu     比力高。基本设定未     4     大概     5              gzip_comp_level 4;              #     禁用     IE6 gzip     功能,早期的     IE6     之前的版本不支持压缩              gzip_disable "MSIE [1-6]\.";              #gzip     压缩的最小文件,小于设置值的文件将不会压缩              gzip_min_length 1k;              #     启用压缩功能时,协议的最小版本,默认     HTTP/1.1              gzip_http_version 1.0 | 1.1;              #     指定     Nginx     服务需要向服务器申请的缓存空间的个数和大小     ,     平台不同     ,     默认     :32 4k     大概     16 8k;              gzip_buffers number size;              #     指明仅对哪些类型的资源实行压缩操作     ;     默认为     gzip_types text/html     ,不用表现指定,否则出错              gzip_types mime-type ...;              #     如果启用压缩,是否在响应报文首部插入     “Vary: Accept-Encoding”,     一般建议打开              gzip_vary on | off;              #     预压缩,即直接从磁盘找到对应文件的     gz     后缀的式的压缩文件返回给用户,无需消耗服务器     CPU              #     注意     :      来自于     ngx_http_gzip_static_module     模块              gzip_static on | off;            在nginx的主设置文件参加


二十、Nginx中的变量

   nginx  的变量可以在设置文件中引用,作为功能判定大概日志等场景使用     变量可以分为内置变量和自界说变量     内置变量是由  nginx  模块自带,通过变量可以获取到众多的与客户端访问相关的值。  内置变量

   官方文档    Alphabetical index of variables (nginx.org)  常用内置变量 

      $remote_addr;        #   存放了客户端的地址,注意是客户端的公网   IP        $args;        #   变量中存放了   URL   中的全部参数        #   例如   :https://search.jd.com/Search?keyword=   手机   &enc=utf-8        #   返回效果为   : keyword=   手机   &enc=utf-8        $is_args        #   如果有参数为   ?    否则为空        $document_root;        #   保存了针对当前资源的请求的体系根目次   ,   例如   :/webdata/nginx/timinglee.org/lee   。        $document_uri;        #   保存了当前请求中不包含参数的   URI   ,注意是不包含请求的指令        #   比如   :http://lee.timinglee.org/var?\id=11111   会被界说为   /var        #   返回效果为   :/var        $host;        #   存放了请求的   host   名称        limit_rate 10240;        echo $limit_rate;        #   如果   nginx   服务器使用   limit_rate   设置了表现网络速率,则会表现,如果没有设置, 则表现   0        $remote_port;        #   客户端请求   Nginx   服务器时随机打开的端口,这是每个客户端自己的端口        $remote_user;        #   已经经过   Auth Basic Module   验证的用户名        $request_body_file;        #   做反向代理时发给后端服务器的当地资源的名称        $request_method;           #    请求资源的方式,    GET/PUT/DELETE    等           $request_filename;           #    当前请求的资源文件的磁盘路径,由    root    或    alias    指令与    URI    请求生成的文件绝对路径,           #    如    :webdata/nginx/timinglee.org/lee/var/index.html           $request_uri;           #    包含请求参数的原始    URI    ,不包含主机名,相当于    document_uri?$args,           #    例如:    /main/index.do?id=20190221&partner=search           $scheme;           #    请求的协议,例如    :http    ,    https,ftp    等           $server_protocol;           #    保存了客户端请求资源使用的协议的版本,例如    :HTTP/1.0    ,    HTTP/1.1    ,    HTTP/2.0    等           $server_addr;           #    保存了服务器的    IP    地址           $server_name;           #    虚拟主机的主机名           $server_port;           #    虚拟主机的端口号           $http_user_agent;           #    客户端浏览器的详细信息           $http_cookie;           #    客户端的全部    cookie    信息           $cookie_<name>           #name    为恣意请求报文首部字部    cookie    的    key    名           $http_<name>           #name    为恣意请求报文首部字段    ,    表现记录请求报文的首部字段,    ame    的对应的首部字段名需要为小写,如果有横线需要替换为下划线        


 自界说变量

假如需要自界说变量名称和值,使用指令set $variable value;
 


二十一、Nginx中的rewrite模块功能

      Nginx   服务器使用    ngx_http_rewrite_module    模块解析和处置惩罚   rewrite   请求        此功能依赖    PCRE(perl compatible regular expression)   ,因此编译之前要安装   PCRE   库        rewrite   是   nginx   服务器的重要功能之一,用于实现   URL   的重写,   URL   的重写是非常有用的功能        比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的        链接,就可以设置为访问        另外还可以在一定水平上进步网站的安全性。       if 指令

     用于条件匹配判定,并根据条件判定效果选择不同的   Nginx   设置,可以设置在   server   或   location   块中进行设置,Nginx   的   if   语法仅能使用   if   做单次判定,不支持使用   if else   大概   if elif   如许的多重判定,用法如下:                if      (条件匹配)      {              action              }              使用正则表达式对变量进行匹配,匹配成功时  if  指令认为条件为  true  ,否则认为  false  ,变量与表达式之间使用以下符号链接:           = #    比力变量和字符串是否相称,相称时    if    指令认为该条件为    true    ,反之为    false           != #    比力变量和字符串是否不相称,不相称时    if    指令认为条件为    true    ,反之为    false           ~ #    区分大小写字符,可以通过正则表达式匹配,满意匹配条件为真,不满意匹配条件为假           !~ #    区分大小写字符    ,    判定是否匹配,不满意匹配条件为真,满意匹配条件为假           ~* #    不区分大小写字符,可以通过正则表达式匹配,满意匹配条件为真,不满意匹配条件为假           !~* #    不区分大小字符    ,    判定是否匹配,满意匹配条件为假,不满意匹配条件为真           -f     和     !-f #    判定请求的文件是否存在和是否不存在           -d     和     !-d #    判定请求的目次是否存在和是否不存在           -x     和     !-x #    判定文件是否可实行和是否不可实行           -e     和     !-e #    判定请求的文件或目次是否存在和是否不存在    (    包括文件,目次,软链接    )           #    注意:           #    如果    $    变量的值为空字符串或    0    ,则    if    指令认为该条件为    false    ,其他条件为    true    。           #nginx 1.0.1    之前    $    变量的值如果以    0    开头的恣意字符串会返回    false        



break 指令

   用于中断当前相同作用域  (location)  中的其他  Nginx  设置     与该指令处于同一作用域的  Nginx  设置中,位于它前面的设置生效     位于后面的   ngx_http_rewrite_module   模块中指令就不再实行     Nginx  服务器在根据设置处置惩罚请求的过程中遇到该指令的时候,回到上一层作用域继承向下读取设置,该指令可以在server  块和  locationif  块中使用   








return 指令

   return  用于完成对请求的处置惩罚,并直接向客户端返反响应状态码,比如  :  可以指定重定向  URL(  对于特殊重     定向状态码,  301/302  等  )   大概是指定提示文本内容  (  对于特殊状态码  403/500  等  )  ,处于此指令后的全部配     置都将不被实行,  return  可以在  server  、  if   和   location  块进行设置   




rewrite 指令

   通过正则表达式的匹配来改变  URI  ,可以同时存在一个或多个指令,按照次序依次对  URI  进行匹配,rewrite主要是针对用户请求的  URL  大概是  URI  做具体处置惩罚     语法格式 :           rewrite regex replacement [flag];         rewrite  将用户请求的  URI  基于  regex  所形貌的模式进行检查,匹配到时将其替换为表达式指定的新的  URI     注意:如果在同一级设置块中存在多个  rewrite  规则,那么会自下而下逐个检查  ;  被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,  但不凌驾  10  次  ;  如果凌驾,提示  500  响应码,  [flag]  所表现的标志位用于控制此循环机制     如果替换后的  URL  是以  http://  或  https://  开头,则替换效果会直接以重定向返回给客户端  ,   即永世重定向301     正则表达式格式            . #    匹配除换行符以外的恣意字符           \w #    匹配字母或数字或下划线或汉字           \s #    匹配恣意的空缺符           \d #    匹配数字           \b #    匹配单词的开始或竣事           ^ #    匹配字付串的开始           $ #    匹配字符串的竣事           * #    匹配重复零次或更多次           + #    匹配重复一次或更多次           ? #    匹配重复零次或一次           (n) #    匹配重复    n    次           {n,} #    匹配重复    n    次或更多次           {n,m} #    匹配重复    n    到    m    次           *? #    匹配重复恣意次,但尽大概少重复           +? #    匹配重复    1    次或更多次,但尽大概少重复               ?? #     匹配重复     0     次或     1     次,但尽大概少重复              {n,m}? #     匹配重复     n     到     m     次,但尽大概少重复              {n,}? #     匹配重复     n     次以上,但尽大概少重复              \W #     匹配恣意不是字母,数字,下划线,汉字的字符              \S #     匹配恣意不是空缺符的字符              \D #     匹配恣意非数字的字符              \B #     匹配不是单词开头或竣事的位置              [^x] #     匹配除了     x     以外的恣意字符              [^lee] #     匹配除了     magedu      这几个字母以外的恣意字符             rewrite flag 使用介绍

   使用  nginx  的  rewrite  的指令,可以实现  url  的重新跳转,  rewrite  有四种不同的  flag  ,分别是  redirect(  临时重定向302)  、  permanent(  永世重定向  301)  、  break  和  last  。其中前两种是跳转型的  flag  ,后两种是代理型     跳转型指由客户端浏览器重新对新地址进行请求     代理型是在  WEB  服务器内部实现跳转     rewrite   格式            Syntax: rewrite regex replacement [flag]; #    通过正则表达式处置惩罚用户请求并返回替换后的数据包。           Default: —           Context: server, location, if         flag 阐明
   
     redirect;        #   临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新   URL   给客户端        #   由客户端重新发起请求   ;   使用相对路径   ,   大概   http://   或   https://   开头,状态码:   302          permanent;        #   重写完成后以永世重定向方式直接返回重写后生成的新   URL   给客户端        #   由客户端重新发起请求,状态码:   301          break;        #   重写完成后   ,   制止对当前   URL   在当前   location   中后续的别的重写操作        #   而后直接跳转至重写规则设置块之后的别的设置,竣事循环,建议在   location   中使用        #   适用于一个   URL   一次重写          last;        #   重写完成后   ,   制止对当前   URI   在当前   location   中后续的别的重写操作,        #   而后对新的   URL   启动新一轮重写检查,不建议在   location   中使用        #   适用于一个   URL   多次重写,要注意制止出现凌驾十次以及   URL   重写后返回错误的给用户     rewrite案例: 域名永世与临时重定向

   域名的临时的调整,后期大概会变,之前的域名大概  URL  大概还用、大概跳转的目的域名和  URL  还会跳转,这种情况浏览器不会缓存跳转,  临时重定向不会缓存域名解析记录  (A  记录  )  ,但是永世重定向会缓存。     
   
  




rewrite 案例: break last











二十二、Nginx-rewrite的企业示例及防盗链

rewrite案例: 主动跳转 https

创建目次

制作认证文件


编写设置文件

测试访问




不用输https直接跳转
判定文件是否存在

防盗链

   防盗链基于客户端携带的  referer  实现,  referer  是记录打开一个页面之前记录是从哪个页面跳转过来的标志信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的  referer  信息有以下几种:            none    :     #    请求报文首部没有    referer    首部,           #    比如用户直接在浏览器输入域名访问    web    网站,就没有    referer    信息。           blocked    :     #    请求报文有    referer    首部,但无有用值,比如为空。           server_names    :     #referer    首部中包含本主机名及即    nginx     监听的    server_name    。           arbitrary_string    :     #    自界说指定字符串,但可使用    *    作通配符。示例    : *.timinglee.org           www.timinglee.*           regular expression    :     #    被指定的正则表达式模式匹配到的字符串    ,    要使用    ~    开头,例如:           ~.*\.timinglee\.com        



二十三、Nginx的反向代理及动静分离实现

什么是反向代理

反向代理是位于客户端和后端服务器之间的服务器。与正向代理(代表客户端向服务器发起请求)不同,反向代理接收来自客户端的请求,并将这些请求转发给后端的一个或多个服务器。然后,它将后端服务器的响应返回给客户端,就好像这个响应是直接来自反向代理服务器自己一样。
Nginx 反向代理的工作原理

Nginx 反向代理的上风

   Nginx   除了可以在企业提供高性能的  web  服务之外,另外还可以将   nginx   自己不具备的请求通过某种预     界说的协议转发至别的服务器处置惩罚,不同的协议就是  Nginx  服务器与其他服务器进行通信的一种规范,主     要在不同的场景使用以下模块实现不同的功能            ngx_http_proxy_module: #    将客户端的请求以    http    协议转发至指定服务器进行处置惩罚           ngx_http_upstream_module #    用于界说为    proxy_pass,fastcgi_pass,uwsgi_pass           #    等指令引用的后端服务器分组           ngx_stream_proxy_module: #    将客户端的请求以    tcp    协议转发至指定服务器处置惩罚           ngx_http_fastcgi_module: #    将客户端对    php    的请求以    fastcgi    协议转发至指定服务器助理           ngx_http_uwsgi_module: #    将客户端对    Python    的请求以    uwsgi    协议转发至指定服务器处置惩罚       反向代理设置参数 

      proxy_pass; #   用来设置将客户端请求转发给的后端服务器的主机        #   可以是主机名   (   将转发至后端服务做为主机头首部   )   、   IP   地址:端口的方式        #   也可以代理到预先设置的主机群组,需要模块   ngx_http_upstream_module   支持               proxy_hide_header field; #    用于    nginx    作为反向代理的时候           #    在返回给客户端    http    响应时           #    隐蔽后端服务器相应头部的信息           #    可以设置在    http,server    或    location    块                    proxy_pass_header field; #     透传              #     默认     nginx     在响应报文中不传递后端服务器的首部字段     Date, Server, X-Pad, X-Accel     等参数              #     如果要传递的话则要使用      proxy_pass_header field     声明将后端服务器返回的值传递给客户端              #field      首部字段大小不敏感                         proxy_pass_request_body on | off;                 #      是否向后端服务器发送      HTTP      实体部分      ,      可以设置在      http,server      或      location      块,默认即为开启                             proxy_pass_request_headers on | off;                    #       是否将客户端的请求头部转发给后端服务器,可以设置在       http,server       或       location       块,默认即为开启                                   proxy_set_header;                 #         可更改或添加客户端的请求头部信息内容并转发至后端服务器,比如在后端服务器想要获取客户端的真实         IP         的时候,就要更改每一个报文的头部                                             proxy_connect_timeout time;                             #          设置          nginx          服务器与后端服务器尝试创建毗连的超时时间,默认为          60          秒                             用法如下:          proxy_connect_timeout 6s;                             #60s          为自界说          nginx          与后端服务器创建毗连的超时时间          ,          超时会返回客户端          504          响应码                                      proxy_read_timeout time;                             #          设置          nginx          服务器向后端服务器或服务器组发起          read          请求后,等待的超时时间,默认          60s                                      proxy_send_timeout time;                             #          设置          nginx          项后端服务器或服务器组发起          write          请求后,等待的超时 时间,默认          60s                                      proxy_http_version 1.0;                             #          用于设置          nginx          提供代理服务的          HTTP          协议的版本,默认          http 1.0                                      proxy_ignore_client_abort off;                             #          当客户端网络中断请求时,          nginx          服务器中断其对后端服务器的请求。即如果此项设置为          on          开启,则服务器会忽略客户端中断并一直等着代理服务实行返回,如果设置为off          ,则客户端中断后          Nginx          也会中断客户端请求并立即记录499          日志,默认为          off          。                                                
   
   





动静分离



二十四、Nginx反向代理的缓存功能

缓存的作用

缓存的工作原理

      proxy_cache zone_name | off;    默认   off        #   指明调用的缓存,或关闭缓存机制   ;Context:http, server, location        #zone_name    表现缓存的名称   .   需要由   proxy_cache_path   事先界说               proxy_cache_key string;           #    缓存中用于    “    键    ”    的内容,默认值:    proxy_cache_key $scheme$proxy_host$request_uri;          proxy_cache_valid [code ...] time;           #    界说对特定响应码的响应内容的缓存时长,界说在    http{...}    中                   在     http     设置界说缓存信息              proxy_cache_path /var/cache/nginx/proxy_cache #     界说缓存保存路径,     proxy_cache     会主动创建levels=1:2:2 #界说缓存目次结构层次              #1:2:2     可以生成 2^4x2^8x2^8=2^20=1048576个目次              keys_zone=proxycache:20m #     指内存中缓存的大小,主要用于存放     key     和     metadata              (如:使用次数)              #     一般     1M     可存放     8000     个左右的     key              inactive=120s #     缓存有用时间              max_size=10g; #     最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值              #     调用缓存功能,需要界说在相应的设置段,如     server{...};     大概     location     等              proxy_cache proxycache;              proxy_cache_key $request_uri; #     对指定的数据进行     MD5     的运算做为缓存的     key              proxy_cache_valid 200 302 301 10m; #     指定的状态码返回的数据缓存多长时间              proxy_cache_valid any 1m; #     除指定的状态码返回的数据以外的缓存多长时间     ,     必须设置     ,              否则不会缓存              proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 |              http_502 | http_503 | http_504 | http_403 | http_404 | off ; #     默认是     off              #     在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端              #     示例              proxy_cache_use_stale error http_502 http_503;              proxy_cache_methods GET | HEAD | POST ...;              #     对哪些客户端请求方法对应的响应进行缓存,     GET     和     HEAD     方法总是被缓存            非缓存场景压测
[root@web1 ~]# ab -n1000 -c100 http://www.timingtc.org/static/index.html
主设置文件


 测试
[root@web1 ~]# ab -n1000 -c100 http://www.timingtc.org/static/index.html


二十五、Nginx的反向代理负载均衡

负载均衡的作用

负载均衡的工作原理

 http upstream设置参数

      #   自界说一组服务器,设置在   http   块内        upstream name {        server .....        ......        }        #   示例        upstream backend {        server backend1.example.com weight=5;        server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;        server unix:/tmp/backend3;        server backup1.example.com backup;        }        server address [parameters];        #   设置一个后端   web   服务器,设置在   upstream   内,至少要有一个   server   服务器设置。               #server    支持的    parameters    如下:           weight=number #    设置权重,默认为    1,    实现类似于    LVS    中的    WRR,WLC    等           max_conns=number #    给当前后端    server    设置最大活动链接数,默认为    0    表现没有限制           max_fails=number #    后端服务器的下线条件    ,    当客户端访问时    ,    对本次调度选中的后端服务器连续进行检           测多少次    ,    如果都失败就标志为不可用    ,    默认为    1    次    ,    当客户端访问时    ,    才会使用    TCP    触发对探测后端服务器康健性           检查    ,    而非周期性的探测           fail_timeout=time #    后端服务器的上线条件    ,    对已经检测到处于不可用的后端服务器    ,    每隔此时间隔断再           次进行检测是否规复可用,如果发现可用    ,    则将后端服务器参与调度    ,    默认为    10    秒           backup #    设置为备份服务器,当全部后端服务器不可用时    ,    才会启用此备用服务器           down #    标志为    down    状态    ,    可以平滑下线后端服务器                   resolve #     当     server     界说的是主机名的时候,当     A     记录发生厘革会主动应用新     IP     而不用重启              Nginx                        hash KEY [consistent];                 #      基于指定请求报文中首部字段大概      URI      等      key      做      hash      计算,使用      consistent      参数,将使用      ketama      一致性                 hash      算法,适用于后端是      Cache      服务器(如      varnish      )时使用,      consistent      界说使用一致性      hash      运算,一致                 性      hash      基于取模运算                 hash $request_uri consistent; #      基于用户请求的      uri      做      hash                        hash $cookie_sessionid #       基于       cookie       中的       sessionid       这个       key       进行       hash       调度       ,       实现会话绑                    定                            ip_hash;                       #        源地址        hash        调度方法,基于的客户端的        remote_addr(        源地址        IPv4        的前        24        位或整个        IPv6        地址        )        做        hash        计算,以实现会话保持                                least_conn;                          #         最少毗连调度算法,优先将客户端请求调度到当前毗连最少的后端服务器         ,         相当于         LVS         中的         WLC                                       反向代理示例: 后端多台 web服务器

          172.25.254.129 #Nginx     代理服务器           172.25.254.128 #    后端    web A    ,    Apache    摆设           172.25.254.10 #    后端    web B    ,    Apache    摆设        



参加算法




实现 Nginx 四层负载均衡

 tcp负载均衡设置参数
      stream { #   界说   stream   相关的服务;        Context:main        upstream backend { #   界说后端服务器        hash $remote_addr consistent; #   界说调度算法        server backend1.example.com:12345 weight=5; #   界说具体   server        server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;        server unix:/tmp/backend3;        }        upstream dns { #   界说后端服务器        server 10.0.0.1:53; #   界说具体   server        server dns.example.com:53;        }        server { #   界说   server        listen 12345; #   监听   IPORT        proxy_connect_timeout 1s; #   毗连超时时间        proxy_timeout 3s; #   转发超时时间        proxy_pass backend; #   转发到具体服务器组        }        server {        listen 127.0.0.1:53 udp reuseport;        proxy_timeout 20s;        proxy_pass dns;        }        server {        listen [::1]:12345;        proxy_pass unix:/tmp/stream.socket;        }        }     负载均衡实例: MySQL

   后端服务器安装   MySQL     
     [root@web2 ~]# vim /etc/my.cnf.d/mariadb-server.cnf   
  
   
   
   
   

 [root@web1 ~]# mysql -utc -ptc -h172.25.254.129 -e "select @@server_id"
  [root@web2 ~]# mysql -utc -ptc -h172.25.254.129 -e "select @@server_id"
二十六、Nginx源码编译php

      CGI   的由来:        最早的   Web   服务器只能简朴地响应浏览器发来的   HTTP   请求,并将存储在服务器上的   HTML   文件返回给浏 览器,也就是静态html   文件,但是后期随着网站功能增多网站开发也越来越复杂,以至于出现动态技术,比如像php(1995   年   )   、   java(1995)   、   python(1991)   语言开发的网站,但是   nginx/apache   服务器并不能直接运行 php   、   java   如许的文件,   apache   实现的方式是打补丁,但是   nginx   缺通过与第三方基于协议实现,即通过某种特定协议将客户端请求转发给第三方服务处置惩罚,第三方服务器会新建新的进程处置惩罚用户        的请求,处置惩罚完成后返回数据给   Nginx   并回收进程,最后   nginx   在返回给客户端,那这个约定就是通用网关接口(common gateway interface   ,简称   CGI)   ,   CGI   (协议) 是   web   服务器和外部应用程序之间的接口标准,是cgi   程序和   web   服务器之间传递信息的标准化接口。         为什么会有   FastCGI   ?        CGI   协议虽然解决了语言解析器和    Web Server    之间通讯的标题,但是它的服从很低,由于    Web Server每收到一个请求都会创建一个CGI   进程,   PHP   解析器都会解析   php.ini   文件,初始化情况,请求竣事的时候再关闭进程,对于每一个创建的CGI   进程都会实行这些操作,以是服从很低,而   FastCGI   是用来进步   CGI   性        能的,   FastCGI   每次处置惩罚完请求之后不会关闭掉进程,而是保留这个进程,使这个进程可以处置惩罚多个请求。如许的话每个请求都不用再重新创建一个进程了,大大提拔了处置惩罚服从。        什么是   PHP-FPM   ?        PHP-FPM(FastCGI Process Manager   :        FastCGI   进程管理器   )   是一个实现了   Fastcgi   的程序,并且提供进程管理的功能。        进程包括   master   进程和   worker   进程。   master   进程只有一个,负责监听端口,继承来自   web server的请求        worker   进程一般会有多个,每个进程中会嵌入一个   PHP   解析器,进行   PHP   代码的处置惩罚。      FastCGI设置指令  

   Nginx  基于模块  ngx_http_fastcgi_module  实现通过  fastcgi  协议将指定的客户端请求转发至  php-fpm  处     理,其设置指令如下:    fastcgi_pass address:port;      
       #    转发请求到后端服务器,    address    为后端的    fastcgi server    的地址,可用位置:    location, if in           location           fastcgi_index name;           #fastcgi    默认的主页资源,示例:    fastcgi_index index.php;           fastcgi_param parameter value [if_not_empty];           #    设置传递给    FastCGI    服务器的参数值,可以是文本,变量或组合,可用于将    Nginx    的内置变量赋值给自界说           key           fastcgi_param REMOTE_ADDR $remote_addr; #    客户端源    IP           fastcgi_param REMOTE_PORT $remote_port; #    客户端源端口           fastcgi_param SERVER_ADDR $server_addr; #    请求的服务器    IP    地址           fastcgi_param SERVER_PORT $server_port; #    请求的服务器端口           fastcgi_param SERVER_NAME $server_name; #    请求的    server name           Nginx    默认设置示例:           location ~ \.php$ {           root /scripts;           fastcgi_pass 127.0.0.1:9000;           fastcgi_index index.php;           fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #    默认脚本路径           #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;           include fastcgi_params; #    此文件默认体系已提供    ,    存放的相对路径为           prefix/conf           }        源码编译PHP

上传需要的安装包

 解压缩

 编译nginx





下载大概需要的依赖

 开始编译php

 注意编译过程中的报错
 出现下面的界面表现成功



二十七、Nginx-PHP的设置方法

 

   指定  pid  文件存放位置   



生成php主设置文件

修改时区

生成启动脚本






二十八、Nginx和php的整合

 写入情况变量






测试一下

二十九、Nginx和php的缓存优化

 测试一下
[root@nginx ~]# ab -n1000 -c10 http://www.timingtc.org/index.php


 上传相关的压缩包

解压缩


















 测试



三十、Nginx-memcache高速缓存

 上传需要的压缩包并解压缩

编写设置文件
[root@nginx conf.d]# vim php.conf

测试
[root@nginx conf.d]# ab -n1000 -c10 http://www.timingtc.org/index.php




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4