Fork me on GitHub

Nginx

注意:所有文章除特别说明外,转载请注明出处.

[TOC]

Nginx

概念

1.正向代理

如果将局域网外的Internet想象成一个巨大的资源库,则局域网内的客户端要访问Internet需要通过代理服务器来访问,这种代理服务就称为正向代理。

2.反向代理

客户端对代理无感知,因为客户端不需要任何配置都可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的代理服务器地址,隐藏了真是服务器IP地址。

3.负载均衡

反向代理服务器将客户端请求平均分担到各个服务器中。

4.动静分离

这里为了加快网站的解析速度,可以将动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

在服务器Tomcat中部署动态资源,然后在专门的静态资源服务器中部署静态资源。

安装配置

1. 安装编译工具和库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

2. 安装PCRE

pcre作用让Nginx支持rewrite功能。

1. wget http://...
2. 解压目录 tar -zxvf pcre...
3. 进入安装包
4. 编译安装 ./configure make && make install
5. 查看pcre版本

3. 安装Nginx

1. 获取资源 wget http://....
2. 解压目录 tar -zxvf nginx..
3. 进入安装目录
4. 编译安装 
    ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35 make && make install
5. 查看版本号
    /usr/local/webserver/nginx/sbin/nginx -v

4. Nginx配置

1. 创建Nginx运行使用的用户www

    /usr/sbin/groupadd www 

    /usr/sbin/useradd -g www www

2. 配置ngin.conf

3. 检查配置是否正确

    /usr/local/webserver/nginx/sbin/nginx -t

4. 启动Nginx

    /usr/local/webserver/nginx/sbin/nginx

提示:在上面所有的配置文件配置完成之后,如果在浏览器中访问不了网页,可能是因为Linux的防火墙开着,关闭防火墙便能够访问。在关闭防火墙之后还需要开放端口号才能够访问。

centos7防火墙:

    开启:systemctl start firewalld.service
    关闭:systemctl stop firewalld.service
    重启:systemctl restart firewalld.service

    systemctl status firewalld 查看firewalld状态

    firewall-cmd --zone=public --add-port=8080/tcp --permanent 开启端口号

    sudo firewall-cmd --add-port=8001/tcp --permanent 设置端口号8001

    sudo firewall-cmd --add-port=8080/tcp --permanent 设置端口号8080

    firewall-cmd --reload 重启防火墙

    firewall-cmd --list-all 查看防火墙列表

    ...

5. Nginx常用命令

提示:在我们使用Nginx操作命令前提条件是我们必须进入Nginx的目录。

1. 查看Nginx版本号

    在/sbin/目录下使用 ./nginx -v 命令

2. 启动Nginx

    ./nginx

3. 关闭Nginx  

    ./nginx -s stop

4. 重新加载Nginx

    ./nginx -s reload

提示:命令 ps -ef | grep nginx 查看Nginx进程。

配置文件

1. 全局块

配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令。

2. events块

配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

在该块中的配置指令主要影响Nginx服务器与用户的网络连接。

3. HTTP块

可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

该部分是Nginx中配置最为频繁的部分,代理、缓存和日志定义等绝大多数的功能和第三方的模块配置都在这里。

注意:http块也可以包括http全局块、server块。

3.1 http全局块

在http全局配置的指令包括文件引入、mime-type定义、日志自定义、连接超时时间、单链接请求数量上限等。

3.2 server块

配置虚拟主机的相关参数,一个http中可以有多个server。每个server块就相当于一个虚拟主机。

该块和虚拟主机有密切关系,虚拟主机从用户角度看和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个server又可以分为全局server块以及可以同时包括多个location块。

  1. 全局server块

最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称和IP配置。

  1. location块

一个server块可以配置多个location块,该块的主要作用是基于Nginx服务器接收到请求字符串,对虚拟主机名称(IP别名)之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,或其它第三方模块的配置。

配置请求的路由,以及各种页面的处理情况
########### 每个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }

    error_page 404 https://www.baidu.com; #错误页

    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}

上面是nginx的基本配置,需要注意的有以下几点:

1、几个常见配置项:

 1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
 2.$remote_user :用来记录客户端用户名称;
 3.$time_local : 用来记录访问时间与时区;
 4.$request : 用来记录请求的url与http协议;
 5.$status : 用来记录请求状态;成功是200;
 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
 7.$http_referer :用来记录从那个页面链接访问过来的;
 8.$http_user_agent :记录客户端浏览器的相关信息;

2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
3、每个指令必须有分号结束。

第2章 Nginx反向代理配置

1. 在Windows系统的hosts文件中进行域名和IP对应关系的配置。

2. 在Nginx中进行请求转发的配置(反向代理配置)

3. 访问网站

2.1 Nginx实现反向代理

  1. 效果

在使用Nginx反向代理,根据访问的路径不同跳转到不同的端口的服务中。

1. Nginx的监听端口为 9001。

2. 访问http://localhost:9001/edu/ 跳转到localhost:8008/
3. 访问http://localhost:9001/vod/ 跳转到localhost:8089/
  1. 准备工作

    1. 准备两个Tomcat服务器,一个8080端口,一个8081端口。

      提示:如果这里配置了两个tomcat但只有一个能访问,并且配置文件server.xml文件中三个端口号没有冲突的情况下,那么可能是配置的端口号没有开放对外访问。此时应该设置设置防火墙的开放端口号。

    2. 创建文件夹以及测试文件放到tomcat的目录下。

      在tomcat目录的webapps目录下创建将要访问的文件和文件夹。

  2. 具体配置

    1. 找到Nginx的配置文件,然后在里面做反向代理配置

      server {

      listen       9001;
      server_name  192.168.8.122;
      
      location ~ /edu/ {
          proxy_pass: http://127.0.0.1:8080;
      }
      
      location ~ /vod/ {
          proxy_pass: http://127.0.0.1:8089;
      }
      

      }

    2. 开放对外访问的端口号

      1. 查看已经开放端口号

      2. 增加开放端口号

      3. 测试增加开放端口号是否能访问

        提示:如果有些时候在配置好之后还是无法访问,可以重启一下tomcat,可能是之前的配置没有生效,重启之后让之前的配置生效。

  3. 配置nginx.conf配置文件的反向代理设置之后,重启Nginx

2.2 Nginx实现负载均衡

  1. 实现效果

浏览器输入地址http://192.168.8.122/edu/a.html。负载均衡效果,平均分配到8080和8089端口中去。

  1. 准备工作

    1. 准备两台tomcat服务器,一台8080,一台8089。

    2. 在两台tomcat里面webapps目录下创建名称为edu的文件夹,在edu文件夹下创建页面a.html,用于测试。

  2. 在Nginx的配置文件中进行负载均衡的配置

2.3 Nginx实现动静分离

  1. 准备工作

    1. 在Linux中准备静态资源

2.4 Nginx高可用集群

  1. 在Linux中配置两个ip

    1. 在/etc/sysconfig/network-scripts/目录下修改ifcfg-ens2文件

      IPADDR1=…//加入新的ip

    2. 重启更新网络服务

      systemctl restart network

    3. 查看是否配置成功

      ip addr

      提示:这里使用ipconfig命令查看不了新配置的IP。

高可用,在Nginx宕机的情况下,整个服务还能够正常运行。

1. 在这里配置的时候需要两台Nginx服务器

2. 需要keepalived

3. 需要虚拟IP
  1. 准备工作

    1. 需要两个服务器

    2. 在两台服务器上安装Nginx

    3. 在两台服务器上安装keepalived

      1. 在两台服务器上使用命令 yum 进行安装

        yum install keepalived -y

      2. 在安装完成之后,在etc目录里面生成目录keepalived,有文件keepalived.conf

    4. 完成高可用配置(主从配置)

      1. 修改/etc/keepalived/keepalived.conf配置文件

      2. 在/usr/local/src添加检测脚本

      3. 启动两台服务器上的Nginx和keepalived

        1. 启动Nginx ./nginx

        2. 启动keepalived systemctl start keepalived.service

      4. 测试

Nginx的原理

多个worker和一个master机制的优势

  1. 可以使用 nginx -s reload 命令进行热部署操作

  2. 对于每个worker进程来说,独立的进程不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,会方便很多。然后独立进程,进程之间不会相互影响,一个进程结束之后,其它进程还在工作,服务不会中断。

  3. 合适数量的worker的数量设置,Nginx与Redis类似,都采用了IO多路复用机制,每个worker都是一个独立的进程,每个进程只有一个主线程,通过异步非阻塞的方式处理请求。所以worker的数量和服务器CPU核心数相等最好。

连接数 worker_connection

1. 发送请求占用了worker的几个连接数(2或者4个)

2. Nginx有1个master和4个worker,每个worker支持最大的连接数为1024,支持最大的并发数是多少?

    普通的静态访问最大并发数是:

        worker_connections * worker_process / 2

    如果是HTTP作为反向代理来说,支持最大并发数量是:

        worker_connections * worker_process / 4

第3章 Nginx的基本配置和优化

3.2 Nginx的虚拟主机配置

虚拟主机,将服务器上的主机分成一台台“虚拟”主机,每台虚拟主机都可以是一台独立的网站,同一台服务器的虚拟主机之间是独立的。

提示:Nginx可以配置多种类型的虚拟主机。1.基于IP的虚拟主机。2.基于域名的虚拟主机。3.基于端口的虚拟主机。

3.2.1 基于IP的虚拟主机
http
{
    #第一个虚拟主机
    server
    {
        listen  ...:..;
        server_name  ...;
        access_log logs/...;
        location /
        {
            #默认首页文件
            index index.html index.htm;

            #html文件存放的目录
            root /data/htdocs/..;

        }
    }

    #第一个虚拟主机
    server
    {
        listen  ...:..;
        server_name  ...;
        access_log logs/...;
        location /
        {
            #默认首页文件
            index index.html index.htm;

            #html文件存放的目录
            root /data/htdocs/..;

        }
    }

    ...

}

提示:从上面配置文件我们可以得到一段server{}文件表示一个虚拟主机。如果需要配置多段虚拟主机,那么配置多段server{}即可。

注意:如果需要在eth0网卡设备上添加两个IP别名 192.168.8.122 | 192.168.2.132 可以通过 ifconfig | route 命令操作。

3.2.2 配置基于域名的虚拟主机

基于域名的虚拟主机配置最常见的虚拟主机配置,只需要配置DNS服务器,然后将主机名映射到正确的IP地址,然后配置Nginx服务器,令其识别不同的主机名便可。

http
{
    #第一个虚拟主机
    server
    {
        #监听的端口
        listen  80;
        #主机名字
        server_name  ...;
        access_log logs/...;
        location /
        {
            #默认首页文件,顺序从左到右
            index index.html index.htm;

            #html文件存放的目录
            root /data/htdocs/..;

        }
    }

    #第一个虚拟主机
    server
    {
        listen  ...:..;
        server_name  ...;
        access_log logs/...;
        location /
        {
            #默认首页文件
            index index.html index.htm;

            #html文件存放的目录
            root /data/htdocs/..;

        }
    }

    ...

}

3.3 Nginx日志文件配置与切割

在虚拟主机开始的配置文件中配置的时候,就已经使用了access_log进行了日志记录。这里再说Nginx日志记录,与日志记录的指令包括:log_format用来设置日志的格式。access_log用来设置日志文件的存放路径、格式和缓存大小。

日志文件的切割最常见的就是按照天数切割。具体配置。

3.4 Nginx的压缩输出配置

经过gzip压缩之后页面大小可以变为原来的0.3左右,这样浏览器访问速度将会更快。

3.5 Nginx的自动列目录配置

location / {
    autoindex on;
}

3.6 Nginx浏览器本地缓存设置

浏览器缓存可以通过 expires 指令输出 header 头来实现。

expires [time|epoch|off]

第6章 Nginx HTTP负载均衡和反向代理的配置与优化

负载均衡,多台服务器之间协同工作,提高计算机系统处理能力和计算强度,满足当前业务需求。在多个设备之间实现合理业务分配的方法。是多个服务器之间组成一个服务器集合,每台服务器都具有等价的地位,都可以单独的对外提供服务而无需其它服务的辅助。

反向代理,以代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络的服务器,将从服务器上得到的结果返回给Internet上请求的客户端。

6.1 Nginx代理服务设置

1. 设置404页面导向地址

    error_page 404 https://...;#错误页
    proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或大于400,设置的error_page配置起作用,默认为off

2. 如果我们的代理只允许接受get、post请求方法一种

    proxy_method get; #支持客户端的请求方法 post/get

3. 设置支持的HTTP协议版本

    proxy_http_version 1.0; #Nginx服务器提供代理服务的HTTP协议版本

4. 解决负载均衡采用轮询方式时,有一台服务器挂掉导致客户端一直等待的问题。

    proxy_connect_timeout 1;  #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
    proxy_read_timeout 1; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
    proxy_send_timeout 1; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
    proxy_ignore_client_abort on;  #客户端断网时,nginx服务器是否终端对被代理服务器的请求。默认为off。

5. 如果upstream指令配置了一组服务器作为被代理服务器,服务器中的访问算法遵循配置的负载均衡规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺序交由下一组服务器处理

    proxy_next_upstream timeout; #反向代理upstream中设置的服务器组出现故障时,被代理服务器返回的状态值。


6. 如果需要通过HTTP获取用户的真实ip而非代理ip作设置

    proxy_set_header Host $host; #
    proxy_set_header X-Real-IP $remote_addr; #将源ip赋值给x-real-ip,这样可以在程序中$X-Real-IP来获取源ip
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #在Nginx作为代理服务器时,设置的ip列表会将经过的机器ip代理机器ip都记录下来

6.2 Web负载均衡方法

1. 手动选择方式

    如我们在网页上下载的时候让我们选择电信1、电信2、连通1、连通2等方式

2. DNS轮询方式

    很多域名注册商都对同一主机名添加多条A记录,这就是DNS轮询,DNS将解析请求按照A记录的顺序随机分配到不同的IP上,从而完成了负载均衡。

    缺点:

        1.可靠性低


        2.负载分配不均衡

            DNS负载均衡采用的是简单的轮询负载方法,不能区分服务器的差异,不能反映服务器当前的情况。

3. 四/七层负载均衡

    1. 四层负载均衡:基于IP+端口的负载均衡,通过虚拟IP+端口接收请求,然后再分配到真实的服务器

        主要通过报文中的目标地址和端口,再加上负载均衡设置的服务器选择方式,决定最终的内部服务器。

    2. 七层负载均衡:基于URL等应用层信息的负载均衡,通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器

        或称为内容交换,主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

    3. 二层负载均衡:基于MAC地址,通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址。

    4. 三层负载均衡:基于IP地址,通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址。

    5. 四到七层负载均衡:表示在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。

         1. 负载均衡器通常称为四层交换机或七层交换机

            1. 四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。

            2. 七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息。
6.2.1 Nginx负载均衡详解

Upstream配置是写一组被代理的服务器地址,然后配置负载均衡的算法,这里被代理的服务器地址有两种写法:

1. 
    upstream mysvr {
        server 192.168.1.12:2050;
        server 192.168.1.8:1204;
    }
    server {
        ...
        location ~*^.+$ {
            proxy_pass http://mysvr; #请求转向mysvr定义的服务器列表
        }
    }

    1. 热备:当一台服务器发生事故时,才启用第二台服务器提供服务。

        upstream mysvr {
            server 127.0.0.1:5252;
            server 192.168.10.125:5524 backup; #热备
        }

    2. 轮询:Nginx默认就是轮询其权重都默认为1,服务器处理在多个之间转换,如果后端服务器down掉,能自动剔除

        upstream mysvr {
            server 127.0.0.1:2525;
            server 192.168.25.25:1245;
        }

    3. 加权轮询:根据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置则默认是1。权重越大分配到的访问越多。

        upstream mysvr {
            server 127.0.0.1:2525 weight=1;
            server 192.168.52.2 weight=2;
        }

    4. ip_hash:Nginx会让相同的客户端ip请求相同的服务器(每个访客固定访问一个后端服务器)。

        upstream mysvr {
            server 127.0.0.1:1245
            server 192.168.12.145:1246
            ip_hash;
        }

    5. Nginx负载均衡配置状态参数

        1. down 表示当前的server暂时不参与负载均衡

        2. backup 预留的备份机器

        3. max_fails 允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误

        4. fail_timeout 在经理max_fails次失败之后,暂停服务的时间

            upstream mysvr { 
                server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
                server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
            }

        5. fair 按照服务器的响应时间来分配请求,响应时间短的优先分配

6.3 Nginx负载均衡与反向代理

upstream指令用于设置一组可以在 proxy_pass 和 fastcgi_pass 指令中使用的代理服务器,默认的负载均衡方式为轮询。upstream模块中的server指令用于指定后端服务器的名称和参数,名称可以是ip、域名、端口号后socket。

在server{…}虚拟主机内,通过 proxy_pass 和 fastcgi_pass 指令设置进行反向代理的 upstream 服务器集群。

proxy_set_header指令用于在反向代理的后端web服务器发起请求时添加指定的header头信息。

在后端web服务器有多个 基于域名的虚拟主机 时,要通过添加Header头信息Host,用于指定请求的域名,这样后端web服务器才能识别该反向代理访问请求由哪一个虚拟主机来处理。

在使用反向代理之后,后端web服务器不能通过 $_SERVER["REMOTE_ADDR"] 变量来获取用户的真是ip,获取到的将是Nginx负载均衡服务器的ip。需要添加Nginx反向代理时的头信息 X-Forwarded-For得到真实的ip。
6.3.2 Nginx负载均衡与反向代理实现动、静态网页分离

动、静态分离就是让动态Java等程序网页去访问JavaWeb服务器,让缓存页、图片、JavaScript、CSS、Flash去访问squid等缓存服务器。

通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使得浏览器缓存过期时间,减少与服务器之前的请求和流量。具体的expires定义:给一个资源设置一个过期时间,也就是无需去服务器验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。

6.4 Nginx负载均衡的HTTP upstream模块

upstream提供一个简单方法来实现轮询和客户端ip之间的后端服务器负载均衡,并可以对后端服务器进行健康检查。

6.4.1 ip_hash指令

ip_hash指令能够将客户端ip的请求通过哈希算法定位到同一个后端服务器,也就是说当再访问此ip下的其它URL时,还是会定位到该服务器上。

ip_hash指定无法保证后端服务器的负载均衡。

如果后端服务器有时需要从Nginx负载均衡(已使用ip_hash)中摘除一段时间,需要标记其为down,而不是直接从配置文件中删掉或注释掉该后端服务器的信息。

6.4.2 server指令

该指令用于指定后端服务器的名称和参数,服务器的名称可以是一个域名、ip地址、端口号或者socket。

参数:

    1. weight 权重,权重数值越高,被分配到的客户端请求数越多。默认为1

    2. max_fails 在fail_timeout指定时间内对后端服务器请求失败的次数。

    3. fail_timeout 在经过max_fails次数后,暂停的时间。

    4. down 标记服务器永久离线。

    5. backup 仅在非backup服务器全部繁忙或死机才启用。
6.4.3 upstream指令

设置一组可以在 proxy_pass 和 fastcgi_pass 指令中使用的代理服务器,默认的负载均衡方式是轮询。

6.5 Nginx负载均衡服务器的双机高可用

在Web服务器集群当做一个城池的话,那么负载均衡服务器相当于城门,城门破了,那么服务就不能正常提供。

  1. 双机高可用的方式目前有两种:

    1. 一台主服务器加一台从服务器,在主服务器宕机之后,从服务器接管主服务器的虚拟IP继续提供服务

    2. 两台负载均衡服务器都处于活动状态,各自绑定一个公网虚拟IP,提供负载均衡服务

第7章 Nginx的rewrite规则

Rewrite主要功能是实现URL的重写,Nginx的rewrite规则采用PCRE。通过rewrite规则,可以实现规范的URL,根据变量来做URL转向及选择配置。

7.2 Nginx Rewrite相关指令

1. break指令

2. if指令,该指令不支持嵌套和多个条件&&和||处理

    ~ 表区分大小写字母匹配
    ~* 表示不区分大小写字母匹配

    !~ 和!~* 作用相反,表示不匹配

    -f 和 !-f 判断文件是否存在

    -d 和 !-d 判断目录是否存在

    -e 和 !-e 判断文件或目录是否存在

    -x 和 !-x 判断文件是否可执行

3. return

4. rewrite指令,该指令根据表达式来重定向URI或者修改字符串

5. set指令,用于定义一个变量并赋值。

第9章 Nginx的Web缓存服务与新浪的开源NCACHE模块

Web缓存服务中,最著名的数Squid。

9.2 Nginx的Web缓存服务

9.2.1 proxy_cache相关指令集
1. proxy_cache 该指令用于设置哪个缓存区将被使用。

2. proxy_cache_path 设置缓存文件的存放路径

    该指令只能在http标签内配置

3. proxy_cache_methods 用于设置缓存哪些http方法,默认缓存http get/head方法,不缓存http post方法

4. proxy_cache_min_use 该指令用于设置缓存的最小使用次数,默认1

5. proxy_cache_valid 用于对不同返回状态码URL设置不同缓存时间

6. proxy_cache_key 设置Web缓存的key值
9.2.3 fastcgi_cache相关指令集
1. fastcgi_cache 该指令用于设置哪个缓存区将被使用

2. fastcgi_cache_path 设置缓存文件存放路径

    只能在http标签内使用

3. fastcgi_cache_methods 设置缓存哪些http方法,默认http get/head方法,不缓存http post方法

4. fastcgi_cache_min_use 设置缓存的最小使用次数,默认值是1

5. fastcgi_cache_valid 对不同返回状态码的URL设置不同的缓存时间

6. fastcgi_cache_key 设置Web缓存的key值

9.3 基于Nginx的NCACHE缓存-新浪开源

第12章 Nginx的核心模块

Nginx的模块分为核心模块、标准HTTP模块、可选HTTP模块、邮件模块、第三方模块和补丁。

核心模块包括:1.主模块 2.事件模块

12.1 主模块指令

1. daemon 在生产环境不使用daemon | master_process指令,其只用于开发调试 
2. env 定义变量集合

3. debug_points 调试器内设置断点

4. error_log 错误日志记录

    级别:

        main部分:error

        http部分:crit

        server部分:crit

5. lock_file Nginx可采用异步互斥进行访问控制

6. master_process 开发调试

7. pid pid文件内记录当前Nginx主进程id好

8. ssl_engine 设置首选的ssl引擎

9. user 指定Nginx Worker进程的用户和组,默认的用户名和组名都是nobody。

10. worker_rlimit_core 指定每个Nginx进程的最大core文件大小

11. worker_rlimit_nofile 指定Nginx进程可以打开的最大文件描述符数量

...

12.3 事件模块指令

1. accept_mutex 连接互斥锁进行顺序的accept()调用

2. accept_mutex_delay 

第13章 Nginx的标准HTTP模块

HTTP模块在编译Nginx时自动编译进来,除非使用configure命令禁止编译这些模块。

13.1 HTTP核心模块

13.2 HTTP Upstream模块

HTTP Upstream 模块是与反向代理、负载均衡相关的模块,包含ip_hash | server | upstream等指令。

13.3 HTTP Access模块

1. allow 允许指定的ip或ip段地址访问虚拟主机或目录

2. deny 拒绝..

13.4 HTTP Auth Basic模块

该模块采用基于HTTP基本身份验证的用户名和密码登录方式,来保护虚拟主机和目录。

1. auth_basic 指定弹出登录框中提示的名称

13.10 geo模块

geo模块主要负责做全局负载均衡,可以根据不同的客户端ip访问到不同的服务器。

本文标题:Nginx

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:03:42

原始链接:http://bangjinhu.github.io/undefined/Nginx/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.