四、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高可用集群已经部署完成