Nginx学习笔记(二)

四、Nginx的配置实例

1、反向代理

实例1
① 实现效果

1)打开浏览器,在浏览器地址栏输入www.123.com,跳转Linux系统中的tomcat主页面

② 准备工作

1)在Linux系统上安装tomcat,使用默认端口8080

  • 使用xftp上传tomcat压缩包,并解压
    在这里插入图片描述
  • 进入tomcat的bin目录中,使用 ./startup.sh 启动tomcat服务器
    在这里插入图片描述

2)对外开放访问的8080端口

firewall-cmd --add-port=8080/tcp --permanent # 开放8080端口 
firewall-cmd --reload # 重启防火墙

3)在浏览器中访问tomcat服务器
在这里插入图片描述

③ 访问过程分析

在这里插入图片描述

④ 具体配置

第一步 在windows系统的host文件进行域名和ip对应关系的配置
在这里插入图片描述
添加内容到host文件中。此配置表示访问www.123.com时,会转发请求到192.168.242.135上,此IP时我虚拟机的IP。
在这里插入图片描述
第二步 在nginx中进行请求转发的配置(反向代理配置)

  • 将server_name这一栏改为自己虚拟机的ip地址,因为我是在本机上配置的虚拟机,所以可以用localhost
  • 在location块中设置:proxy_pass http://127.0.0.1:8080
    在这里插入图片描述

如上配置,我们监听80端口,访问域名为www.123.com,不加端口号时默认为80端口,故访问域名时会跳转到127.0.0.1:8080路径上。在浏览器端输入www.123.com,结果如下

在这里插入图片描述

实例2
① 实现效果

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

  • nginx监听端口为9001
  • 访问http://虚拟机ip:9001/edu/ 直接跳转到127.0.0.1:8080
  • 访问http://虚拟机ip:9001/vod/ 直接跳转到127.0.0.1:8081
② 准备工作

1)准备两个tomcat服务器,一个8080端口,一个8081端口

  • 新建两个文件夹,分别来放两个tomcat服务器
mkdir tomcat8080
mkdir tomcat8081

在这里插入图片描述

  • 修改8081端口的tomca的配置文件
    在这里插入图片描述在这里插入图片描述

2)创建文件夹和测试页面

  • 进入tomcat8080的文件夹,在webapps目录下创建/edu目录,并在文件夹中创建一个测试页面在这里插入图片描述
    在这里插入图片描述
    另一个服务器同理。
③ 具体配置

1)找到nginx配置,进行反向代理配置
在这里插入图片描述
2)对外开放9001、8081、8080端口

④ 最终测试

在这里插入图片描述

在这里插入图片描述
location指令说明

该指令用于匹配URL
语法如下:

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

2、负载均衡

① 实现效果

1)浏览器地址栏输入http://虚拟机ip/edu/a.html,负载均衡效果,平均分发到8081和8080端口

② 准备工作

1)准备两台tomcat服务器,8080和8081
2)在两台tomcat里面的webapps目录中,创建名称edu文件夹,在edu文件夹中创建页面a.html,用于测试

③ 在nginx的配置文件中进行负载均衡的配置

在这里插入图片描述
这里填tomcat的默认ip 127.0.0.1好像也可以
在这里插入图片描述

④ 最终测试

在这里插入图片描述
在这里插入图片描述
每次刷新浏览器都会重新分发到另一个tomcat上

Nginx负载均衡的几种分配方式(策略)

  1. 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
  2. weight
    weight代表权,重默认为1,权重越高被分配的客户端越多。
    指定轮询几率,weight和访问比率成正比用于后端服务器性能不均的情况。
upstream server_pool{
	server 192.168.242.135:8080  weight=5	#8080端口权重为5
	server 192.168.242.135:8081  weight=10   #8081端口权重为10
}
  1. ip_hash
    每个请求按访问IP的hash结果分配,这样每个固定访问一个后端服务器,可以解决session问题。
upstream server_pool{
	ip_hash
	server server 192.168.242.135:8080
	server server 192.168.242.135:8081
}
  1. fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream server_pool{
	ip_hash
	server server 192.168.242.135:8080
	server server 192.168.242.135:8081
	fair
}

3、动静分离

① 什么是动静分离
  • Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat 处理动态页面。
  • 动静分离从目前实现角度来讲大致分为两种,
    1. 一种是纯粹把静态文件独立成单独的域名放在独立的服务器上,也是目前主流推崇的方案。
    2. 另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。

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

1)在linux系统中准备静态资源,用于进行访问
在这里插入图片描述
先在根目录下创建一个data文件夹,这里面有两个文件夹,一个放图片,一个用来存放html文件。

③ 具体配置

1)在nginx配置文件中进行动静分离配置
在这里插入图片描述
autoindex on : 表示是否将所有资源以列表的形式列举出来

④ 最终测试

1)浏览器中输入地址:http://192.168.242.137/image/

出现以下页面时因为配置文件中的 autoindex on

在这里插入图片描述
2) 在浏览器地址栏输入地址
http://192.168.242.137/www/a.html
在这里插入图片描述

4、高可用的集群

① 什么是高可用
  • 一般情况下,我们通过主服务器发送请求,当主服务器的nginx宕机了,自动切换到从服务器,通过从服务器的nginx去访问tomcat,此时从服务器作为主服务器来完成请求过程。
  • 此过程需要keepalived的软件来完成,keepalived通过脚本来监测nginx是否宕机,如果宕机了,那就切换到从服务器。
  • 因为主从服务器IP不同,需要对外声明一个虚拟IP,将这个虚拟IP绑定到两台服务器上,通过虚拟IP来访问主从服务器。
    在这里插入图片描述
    1)需要两个nginx服务器
    2)需要keepalived
    3)需要虚拟ip
② 配置高可用的准备工作

1)需要配置两台linux服务器

nginx1:192.168.242.137
nginx2:192.168.242.130

在这里插入图片描述

2)在两台服务器上安装nginx

Nginx的安装在我的Nginx学习笔记(一)

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

使用yum命令安装

yum install keepalived -y

查看一下是否安装成功
在这里插入图片描述
keepalived的文件目录为:/etc/keepalived,里面有一个配置文件
在这里插入图片描述

③ 完成高可用配置(主从配置)

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

主机配置文件

# 全局配置
global_defs{
   router_id LVS_DEVELBACK  # 主机的名字,通过它访问到主机。在/etc/下的hosts文件里面设置
   script_user root
}
# 脚本配置
vrrp_script chk_nginx{
   script " /usr/local/src/nginx_check.sh"     # 脚本文件的路径
   interval 2     # 脚本的执行间隔
   weight 2     # 权重
   user root
}
# 虚拟ip配置
vrrp_instance VI_1 {
   state MASTER   # 指定主从服务器,从机为BACKUP
   interface ens33   # 网卡
   virtual_router_id 51  # 主从机的virtual_router_id 必须相同
   priority 130   # 主从机取不同的优先级,主机值较大,从机值较小
   advert_int 1   # 每隔一秒检测服务器是否宕机
   authentication {
      auth_type PASS
      auth_pass 1111
   }
   virtual_ipaddress {
      192.168.242.50 #指定虚拟ip
   }
   track_script {
      chk_nginx
   }
}

从机配置文件

global_defs{
   router_id LVS_DEVELBACK 
   script_user root
}
vrrp_script chk_nginx{
   script " /usr/local/src/nginx_check.sh"
   interval 2
   weight 2
   user root
}
vrrp_instance VI_1 {
   state BACKUP
   interface ens33
   virtual_router_id 51
   priority 130
   advert_int 1
   authentication {
      auth_type PASS
      auth_pass 1111
   }
   virtual_ipaddress {
      192.168.242.50
   }
   track_script {
      chk_nginx
   }
}

配置成功时,使用ip addr 可以查看到虚拟ip
在这里插入图片描述
2)在 /usr/local/src 下添加检测脚本nginx_check.sh

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

使脚本可以运行:

chown 777 /usr/local/src/nginx_check.sh

3)把两台服务器的nginx和keepalived启动
nginx:

/usr/local/nginx/sbin/nginx

keepalived:

systemctl start keepalived.service

④ 最终测试

1)在浏览器地址栏输入 虚拟ip地址 192.168.242.50
在这里插入图片描述
这里我为了做区分,在主服务器的nginx中配置了反向代理,让他转发到tomcat的默认页面。

2)把主服务器的nginx和keepalived停止,在输入

systemctl stop keepalived.service
./nginx -s stop

在这里插入图片描述
这一次就访问到了nginx的默认页面

5、Nginx的原理

① master和worker

通过查看进程,可以发现nginx启动后,有两个进程,一个master和一个worker
在这里插入图片描述
在这里插入图片描述

② worker如何进行工作

在这里插入图片描述
发送请求,先到master进程,相当于管理员,管理员得到一个任务后派发给worker,worker通过争抢机制获取到任务,然后进行反向代理转发给tomcat。

③ 一个master和多个worker的好处

1)可以使用nginx -s reload热部署
2)每个worker是独立的进程,如果有其中的一个worker出现问题,其他worker独立的,可以继续争抢实现请求过程,不会造成服务中断。

④ 这是多少个worker合适
  • Nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是千上万个请求也不在话下。
  • 每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu数相等是最为适宜的。设少了会浪费cou,设多了会造成cpu频繁切换上下文带来的损耗。
⑤ 连接数 worker_connection
  1. 发送请求,占用了worker2个或者4个连接数
    在这里插入图片描述
    在这里插入图片描述
  2. nginx有一个master,有四个worker,每个worker支持的最大连接数是1024,支持的最大并发数为:
  • 普通的静态访问最大并发数是 worker_connections * worker_processes/2
  • HTTP作为反向代理来说,最大并发数量应该是 worker_connections * worker_ processes/4
    因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务器的连接,会占用两个连接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值