Nginx入门

1、Nginx基本概念

1.1、什么是Nginx

Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

其特点是占有内存少,并发能力强。

Nginx 是一个很强大的高性能Web反向代理服务,它能够支持高达 50,000 个并发连接数的响应。

1.2、正向代理

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

代理对象是客户端,不知道服务端是谁。

 

1.3、反向代理

客户端不需要任何配置就能访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外就一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址。

代理对象是服务端,不知道客户端是谁。

   

1.4、负载均衡

客户端发送多个请求到服务器,服务器处理请求,有些可能要访问数据库,服务器处理完毕后再将结果返回客户端。

这种架构模式单一,适合并发请求少的情况,但并发量大的时候如何解决?

  

首先可能想到升级服务器配置,但硬件的性能提升不能满足日益增长的需求,此时想到服务器集群,增加服务器数量,然后将原先请求单个服务器的情况改为将请求分发到多个服务器上,将负载分发到多个服务器上,也就是我们讲的负载均衡

   

1.5、动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,减少服务器压力,加快解析速度。

 

2、Nginx安装

 2.1进入Nginx官网下载安装包

http://nginx.org/

nginx-1.21.3.tar.gz

需要安装依赖:pcre、openssl、zlib

 2.2安装依赖

(1)安装pcre依赖

压缩文件解压后进入目录执行./configure

使用 make && make install 编译安装

安装后查看版本号:

 pcre-config --version

(2)安装openssl

(3)安装zlib

#连网安装 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2.3安装Nginx

压缩文件 nginx-1.21.3.tar.gz 解压后进入目录执行./configure

使用 make && make install 编译安装

tar -xvf nginx-1.21.3.tar.gz
cd nginx-1.21.3
./configure
make && make install 

安装成功后,会生成文件夹 /usr/local/nginx/ ,nginx的sbin文件夹里包含了启动脚本

cd /usr/local/nginx/sbin
./nginx

查看启动状态:

ps -ef|grep nginx

nginx默认监听80端口,浏览器访问IP显示

 

若访问不了,检查防火墙

查看开放端口号

firewall-cmd --list-all

设置开放端口号

firewall-cmd --add-service=http --permanent

sudo firewall-cmd --add-port=80/tcp --permanent

重启防火墙

firewall-cmd --reload

 

3、Nginx常用命令和配置

3.1、Nginx操作常用命令

(1)使用Nginx命令必须进入Nginx目录

cd /usr/local/nginx/sbin

(2)查看Nginx版本

./nginx -v

(3)启动Nginx

./nginx

(4)关闭Nginx

./nginx -s stop

(5)重新加载Nginx(修改配置文件后不重启更新)

./nginx -s reload

3.2、Nginx配置文件

(1)配置文件路径: /usr/local/nginx/conf/nginx.conf

(2)配置文件由三部分组成:全局块、events、http。

  全局块:设置一些影响Nginx服务器整体运行的配置指令。比如worker_processes 1;worker_processes 值越大可以支持的并发数量越多。

  events:涉及的指令主要影响Nginx服务器与用户的网络连接。比如worker_connections  1024;支持的最大连接数。

  http:Nginx配置中最频繁的部分:代理、缓存、日志、负载均衡...

    http块又包含http全局、server块。

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

    server块与虚拟主机有密切联系。http块可以包含多个server块,而每个server块相当于一个虚拟主机。

      每个server块包含全局server块和location块

      全局server块:最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

      location块:一个server块可以配置多个location块。

  location块主要作用是基于Nginx服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

 

4、Nginx配置实例-反向代理1

 4.1实现效果

浏览器输入 www.123.com,跳转到linux系统tomcat主页

 4.2准备工作

(1)linux系统安装tomcat使用默认端口8080,启动

(2)对外开放访问端口

  firewall-cmd --add-port=8080/tcp --permanent

  firewall-cmd --reload

(3)测试,浏览器访问tomcat

 

 4.3访问过程分析

 

 4.4具体配置

(1)在windows系统的hosts文件中进行域名和ip对应关系的配置

C:\Windows\System32\drivers\etc\hosts

添加:192.168.0.104 www.123.com

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

 

 (3)测试,浏览器访问www.123.com展示tomcat主页

 

  

5、Nginx配置实例-反向代理2

 5.1实现效果

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

Nginx监听端口为9001

访问http://192.168.0.104:9001/edu/ 直接跳转到 http://127.0.0.1:8080/

访问http://192.168.0.104:9001/vod/ 直接跳转到 http://127.0.0.1:8081/

 5.2准备工作

(1)准备两个tomcat,端口分别是8080、8081

(2)创建文件夹和测试界面

8080端口tomcat/webapps/edu/a.html

<h1>8080</h1>

 8081端口tomcat/webapps/vod/a.html

<h1>8081</h1>

 5.3 具体配置

(1)Nginx配置文件:/usr/local/nginx/conf/nginx.conf

添加配置:

    server {
        listen  9001;
        server_name 192.168.0.104;

        location ~ /edu/ {
                proxy_pass http://127.0.0.1:8080;
        }

        location ~ /vod/ {
                proxy_pass http://127.0.0.1:8081;
        }
    }

(2)防火墙开放端口 9001、8080、8081

firewall-cmd --add-port=9001/tcp --permanent

firewall-cmd --reload

(3)Nginx重新加载

 5.4 测试

 

 

  

 5.4 配置中location指令说明

  1. 以=开头表示精确匹配,如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
  2. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
  3. ~ 开头表示区分大小写的正则匹配;
  4. ~* 开头表示不区分大小写的正则匹配
  5. / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

顺序 no优先级:

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

  

6、Nginx配置实例-负载均衡

 6.1实现效果

(1)浏览器访问http://192.168.0.104/edu/a.html ,负载均衡使请求平均分发到8080和8081端口

6.2准备工作

(1)准备两个tomcat,端口分别是8080、8081

(2)创建文件夹和测试界面

8080端口tomcat/webapps/edu/a.html

<h1>8080</h1>

 

 

  8081端口tomcat/webapps/edu/a.html

<h1>8081</h1>

 6.3 负载均衡配置

(1)Nginx配置文件:/usr/local/nginx/conf/nginx.conf

配置:

http {
......
        upstream myserver{
            server 192.168.0.104:8080;
            server 192.168.0.104:8081;
        }
....
        server{
            listen       80;
          server_name  192.168.0.104;
            location / {
                .....
                proxy_pass http://myserver;
                proxy_connect_timeout 10;
            }
            ....        
        }
}

 

 6.4 测试

浏览器访问http://192.168.0.104/edu/a.html

 

 6.5 Nginx分配服务器策略

(1)轮询(默认)

每个请求按时间先后顺序分配到后端服务器,服务器down掉则删除。

(2)weight

权重默认为1,数值越大分配请求越多

upstream myserver{
    server 192.168.0.104:8080 weight=5;
    server 192.168.0.104:8081 weight=10;
}

(3)ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。

upstream myserver{
    ip_hash;
    server 192.168.0.104:8080;
    server 192.168.0.104:8081;
}

(4)fair(第三方)

按照后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream myserver{  
    server 192.168.0.104:8080;
    server 192.168.0.104:8081;
  fair; }

7、Nginx配置实例-动静分离

 7.1准备工作

(1)在linux系统中准备一些静态资源,用于访问

  /data/file/a.html

  /data/image/bg.jpg

 7.2具体配置

server {
        listen       80;
        server_name  192.168.0.104;      

        location /file/ {
            root   /data/;
            index  index.html index.htm;
        }
        location /image/ {
                root /data/;
                autoindex on;
        }
autoindex on;//列出文件目录

 7.3具体配置

(1)浏览器访问 http://192.168.0.104/image/

(2)浏览器访问 http://192.168.0.104/file/a.html

 

8、Nginx配置实例-高可用

 

 8.1实现效果

(1)主Nginx服务器宕机后自动切换到备用Nginx服务器

  

 

 

 8.2配置高可用准备工作

(1)两台虚拟机环境 192.168.0.103、192.168.0.104,均需安装Nginx (可使用vware克隆功能)

(2)两台虚拟机安装 keepalived

  yum install keepalived -y

  rpm -q -a keepalived 查询安装结果

  安装位置 /etc/keepalived 配置文件 keepalived.conf

#keepalived常用指令
systemctl start keepalived.service
systemctl stop keepalived.service
systemctl restart keepalived.service

 

 8.3高可用配置(主从配置)

(1)修改/etc/keepalived/keepalived.conf

 

   主要是配置这两个节点,下方其他的是配置的lvs,我们不需要修改。

  修改如下:

global_defs {

   notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个

     acassen@firewall.loc  #  收件人邮箱1

     failover@firewall.loc #  收件人邮箱2

     sysadmin@firewall.loc #  收件人邮箱3

   }

   notification_email_from Alexandre.Cassen@firewall.loc  #邮件发件人

   smtp_server 192.168.200.1  # 邮件服务器地址

   smtp_connect_timeout 30   # 超时时间

   router_id LVS_DEVEL   # 机器标识 局域网内唯一即可

   vrrp_skip_check_adv_addr # 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。

   #vrrp_strict   # 严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。

   vrrp_garp_interval 0  # 小数类型,单位秒,在一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0,一个发送的消息=n组 arp报文

   vrrp_gna_interval 0 # 小数类型,单位秒, 在一个网卡上每组na消息之间的延迟时间,默认为0

}

 

# vrrp实例  我们集群设置 多机配置,除了state和priority不一样,其他都一样

vrrp_instance VI_1 {

    state MASTER  # 服务器状态 MASTER是主服务器  BACKUP是备份服务器 主服务器的priority要比备份服务器大

    interface ens33 # 通信端口 通过ip addr可以看到 根据自己的机器配置

    virtual_router_id 51  # vrrp实例id  keepalived集群,实例id必须一致

    priority 100  # 权重比 主服务器的priority要比备份服务器大

    advert_int 1  # 心跳间隔  单位秒  keepalived多机器集群 通过心跳检测,如果发送心跳没反应 就立刻接管;

    authentication { # 服务器之间通信密码

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress { # 自定义虚拟IP 

        192.168.91.199

    }

}

  把这个配置复制到从服务器上,state改为BACKUP,从服务器的priority改小

  到这里我们高可用就初步完成了,可以开启nginx和keepalived测试了

  

(2)在 /sur/local/src目录下添加检测脚本,检测Nginx是否活着

  • 上面的配置已经可以初步测试nginx的高可用,比如我们关掉主服务器的keepalived,从服务器的nginx就会替代主nginx。
  • 但如果是我们的主nginx挂掉而主keepalived没挂,我们从nginx就不能替代主nginx,实际情况中nginx比keepalived更容易挂掉
  • 我们可以在keepalived添加脚本,当检测到我们的nginx挂掉之后而keepalived没挂掉,我们可以让脚本主动尝试重启nginx服务,如果实在重启不了nginx,我们让脚本主动关闭keepalived好让从nginx替代上来

修改keepalived.conf

在这个位置添加脚本配置

 

 

vrrp_script chk_http_port {
 script "/home/nginx_check.sh" #脚本地址
 interval 2 #检测脚本执行的间隔
 weight 2 #比重
}

然后相对应的地址创建nginx_check.sh

#!/bin/bash
echo 'xxxxxx'
count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l`
echo $count_nginx
if [ $count_nginx -eq 0 ];then
    systemctl start nginx.service
    sleep 2
    if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then
        systemctl stop keepalived.service
    fi  
fi

 

(3)启动Nginx、keepalived

./nginc

systemctl star keepalived.service

 8.4测试

(1)访问虚拟 ip,然后把主 Nginx 或者 keepalived 停掉,重新访问虚拟ip仍然可以访问

 

9、Nginx原理解析

 

marst&worker

 

 master接收信号后将任务分配给worker进行执行,worker可有多个。

  

worker如何工作

客户端发送一个请求到master后,worker获取任务的机制不是直接分配也不是轮询,而是一种争抢的机制,“抢”到任务后再执行任务,即选择目标服务器tomcat等,然后返回结果。

worker_connection

发送请求占用了woker两个或四个连接数。

普通的静态访问最大并发数是:worker_connections *worker_processes/2

若是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。

当然了,worker数也不是越多越好,worker数和服务器的CPU数相等时最适宜的。

优点

  • 可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
  • 每个 woker 是独立的进程,若其中一个woker出现问题,其他继续进行争抢,实现请求过程,不会造成服务中断
posted @ 2021-10-11 15:10  何至于此  阅读(205)  评论(0编辑  收藏  举报