四、Nginx实例配置(反向代理、负载均衡、动静分离、主从备份)

一、Nginx配置实例之反向代理

实例一:

目的:在浏览器中输入地址www.123.com,跳转到Linux系统Tomcat主页面中

访问的过程:

步骤:
      1、在Linux中安装Nginx,具体步骤参考上面

      2、在Linux中安装Tomcat服务器,使用默认端口号8080

            (1)将Tomcat放到Linux系统中

            (2)执行:tar -xvf apache-tomcat-8.5.58.tar.gz解压Tomcat压缩包

            (3)进入Tomcat的bin目录,执行./startup.sh,启动Tomcat

            (4)防火墙开放8080端口:执行

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

      3、具体配置

           1、修改Windows系统的hosts文件中,配置域名ip映射

                文件地址:C:\Windows\System32\drivers\etc

                添加:192.169.40.129 www.123.com

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

                1、修改/user/local/nginx/conf/nginx.conf文件,添加如下配置

                2、退出并保存nginx.conf文件,进入/usr/local/nginx/sbin下执行:./nginx -s reload命令重新启动nginx

                3、浏览器中输入:www.123.com

实例二:

目的:
      使用nginx反向代理,根据访问的路径跳转到不同的端口的服务中。nginx监听端口为9001。

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

步骤:

      1、准备tomcat

            在/usr/src文件夹下创建两个文件夹tomcat8081和tomcat8082,并分别放入tomcat软件,修改server.xml中的端口后启动tomcat。在防火墙中添加开放端口8081、8082、9001

      2、创建测试页面

            在tomcat8081下的tomcat的webapps文件夹中创建文件夹中创建edu文件夹,并放入a.html文件
            在tomcat8082下的tomcat的webapps文件夹中创建文件夹中创建vod文件夹,并放入a.html文件

      3、配置反向代理

(1)找到nginx的配置文件nginx.conf,在http块中添加一个新的server{}块

(2)浏览器输入地址测试:

备注:location指令说明

location [ = | ~ | ~* | ^~] uri {
	
}

# 1、=:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理请求。
# 2、~:用于表示uri包含正则表达式,并且区分大小写。
# 3、~*:用于表示uri包含正则表达式,并且不区分大小写
# 4、^~:用于不含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
# 5、uri如果包含正则表达式,则必须要有~或者~*标识。

二、Nginx配置实例之负载均衡

目的:
      浏览器地址栏输入地址:http://192.168.40.129:9001/edu/a.html,负载均衡效果,平均8081和8082端口中

准备工作:
      1、准备两台tomcat服务器,一台8081,一台8082

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

      3、在nginx的配置文件中的http块中进行负载均衡配置

      4、在谷歌浏览器中进行测试,谷歌浏览器需要回车才能有效果

负载均衡:
      即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。nginx提供了以下几种分配方式(策略)。

      1、轮询(默认)
            每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

      2、weight
            weight代表权重。默认为1,权重越高被分配的客户端越多。如:

      3、ip_hash
            每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。如:
客户端A第一次访问被分配的服务器ip为192.168.5.21:80,则此客户端下一次访问被分配的服务器地址还是它。

      4、fair(第三方)
            按后端服务器的响应时间来分配请求,响应时间短的先分配,如:


三、Nginx配置实例之动静分离

      nginx动静分离简单来说就是把动态请求和静态请求分开,但不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上来说应该是动态请求和静态请求分开,可以理解成使用nginx处理静态页面,Tomcat处理动态页面。目前实现分为两种:
      一:把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。
      二:动态文件和静态文件一起发布,通过nginx分开。通过location指定不同的后缀名实现不同的请求转发。

      通过expires参数设置,可以时浏览器缓存过期时间,减少与服务器之间的请求和流量。具体Expires定义:是给一个资源设定一个过期时间,也就是说无需服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,此种方式非常适合不经常变动的资源。如果经常更新的文件,不建议使用Expires来缓存。如设置3d,表示在3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200.

准备工作:
      1、在linux根目录创建data文件夹,然后在此文件夹中创建image文件夹和www文件夹。image文件夹中放入1.jpg图片,www文件夹中创建a.html文件

      2、在nginx的配置文件中进行配置

      3、测试
            (1)浏览器中输入:http://192.168.40.129/image/1.jpg

            (2)浏览器中输入:http://192.168.40.129/www/a.html


四、Nginx配置实例之主从备份

单击版nginx配置存在问题:如果nginx服务宕机,系统将不可使用

高可用之主从备份方案
      当发送请求时,如果主nginx服务器宕机,则将请求转发到备份服务器处理请求。通过keepalived来进行检测服务器是否正常,如果不正常,则进行切换到备份服务器。主服务器和备用服务器需要提供一个虚拟ip,将这个虚拟ip绑定到两台服务器中,外部请求实际访问的是对外提供的虚拟ip

准备工作:
(1)需要两台nginx服务器,在两台服务器上都安装nginx软件
(2)需要在两台服务器上都安装keepalived
(3)需要虚拟ip

步骤:
(1)准备两台服务器192.168.40.129和192.168.40.130,分别在上面安装nginx软件并启动,安装步骤参考上面

(2)分别在两台服务器上安装keepalived
      执行:yum intasll keepalived -y
      执行:rpm -q -a keepalived 查看是否安装成功

keepalived安装文件路径:/etc/keepalived/keepalived.conf

(3)完成高可用配置

      以192.168.40.130服务器为主服务器进行配置

      (1)修改keepalived.conf文件如下:

! Configuration File for keepalived

# 全局定义
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.40.130 # 服务器地址
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   # vrrp_skip_check_adv_addr
   # vrrp_strict
   # vrrp_garp_interval 0
   # vrrp_gna_interval 0
}

# 检测脚本
vrrp_script chk_http_port{
	script "/usr/local/src/nginx_check.sh" # 检测脚本文件路径
	interval 2	# 检测脚本的执行间隔
	weight 2
}

vrrp_instance VI_1 {
    state MASTER	# 备份服务器上将MASTER改为BACKUP
    interface ens33	# 网卡
    virtual_router_id 51	# 主、备机的virtual_router_id必须相同
    priority 100	# 主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1	
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.40.50	# 对外提供的虚拟IP地址
    }
}

      (2)创建脚本文件nginx_check.sh,并将其放置在/usr/local/src/路径下,脚本文件如下:

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

      (3)启动keepalived:systemctl start keepalived.service
               查看是否启动:ps -ef |grep keepalived

      (4)在/usr/local/nginx/sbin下启动nginx:./nginx

            以192.168.40.129服务器为从服务器进行配置

            (1)修改keepalived.conf文件如下:

! Configuration File for keepalived

# 全局定义
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.40.129 # 服务器地址
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   # vrrp_skip_check_adv_addr
   # vrrp_strict
   # vrrp_garp_interval 0
   # vrrp_gna_interval 0
}

# 检测脚本
vrrp_script chk_http_port{
	script "/usr/local/src/nginx_check.sh" # 检测脚本文件路径
	interval 2	# 检测脚本的执行间隔
	weight 2
}

vrrp_instance VI_1 {
    state BACKUP	# 备份服务器上将MASTER改为BACKUP
    interface ens33	# 网卡
    virtual_router_id 51	# 主、备机的virtual_router_id必须相同
    priority 50	# 主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1	
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.40.50	# 对外提供的虚拟IP地址
    }
}

            (2)创建脚本文件nginx_check.sh,并将其放置在/usr/local/src/路径下,脚本文件如下:

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

            (3)启动keepalived:systemctl start keepalived.service
                     查看是否启动:ps -ef |grep keepalived

            (4)在/usr/local/nginx/sbin下启动nginx:./nginx

测试:
(1)访问虚拟ip地址:192.168.40.50

(2)在主服务器执行ip a命令查看

(3)此时执行:

       ./nginx -s stop停掉nginx
       systemctl stop keepalived.service停掉keepalived

       再次访问虚拟地址:192.168.40.50

       此时再次在主服务器执行ip a命令进行查看,此时主服务器已经解除虚拟ip绑定,从服务器添加了虚拟ip绑定

       至此,nginx高可用集群已经部署完成

posted @ 2021-09-01 16:13  码农小匠  阅读(909)  评论(0编辑  收藏  举报