文章目录
-
- Keepalived
-
-
- 1、概述
- 2、配置文件说明
- 3、简洁版配置过程
- 4、keepalived+lvs配置
- [5、主lvs不可用 可能性](#5、主lvs不可用 可能性)
- 6、防止脑裂,解决方式
- 7、keepalived的配置补充
-
- [keepalived+nginx 高可用配置](#keepalived+nginx 高可用配置)
-
- nginx的负载均衡
- nginx遇到的问题之负载均衡后获取客户端IP
- nginx配置中upstream的server关键字
- [nginx遇到的问题之 session一致性问题](#nginx遇到的问题之 session一致性问题)
- Nginx的常见负载均衡算法实战
- [nginx 四层代理,七层代理](#nginx 四层代理,七层代理)
Keepalived
1、概述
keepalived是为lvs设计的,用于管理和监控lvs集群系统中各个服务节点的状态,后面又加入了VRRP虚拟路由冗余协议,可以实现路由器高可用,原理是多台提供路由功能的服务器组成一个路由组,一个master和多个backup,master有vip,可以发组播,当backup收不到就认为master挂了,这时候需要优先级确认下一位master这样就可以保证路由的高可用(lvs是通过ip公网访问,lvs调度私网web服务器。DR模式有vip,web坏掉一台,另一台还是可以访问的,lvs调度服务器挂了就不行了,lvs加上keepalived的话,keepalived就相当于配置了lvs的多个备份,坏掉一台,另一台顶上去)。
Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL、vsnfsd等)的高可用解决方案软件
2、配置文件说明
! 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.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#vrrp协议的配置
vrrp_instance VI_1 {
#工作模式
state MASTER
#监听的网卡
interface ens33
#虚拟路由id 需要和备服务器一致
virtual_router_id 51
#权重 优先级
priority 100
#vrrp包的发送周期 1s
advert_int 1
#权限验证
authentication {
auth_type PASS
auth_pass 1111
}
#需要绑定切换的VIP
virtual_ipaddress {
192.168.1.200
}
}
3、简洁版配置过程
keepalived 用于管理和监控lvs集群,并具有vrrp虚拟路由冗余协议,可以实现路由器的高可用
主配置文件 /etc/keepalived/keepalived.conf
VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
keepalived+lvs(DR模式)配置过程
1.lvs服务器配置
安装ipvsadm,开启ip_vs模块
配置vip(虚拟ip)地址
配置bl命令,完成lvs的调度功能
关闭重定向
安装keepalived,配置/etc/keepalived/keepalived.conf文件
2.lvs备份服务器配置
安装ipvsadm,开启ip_vs模块
配置vip(虚拟ip)地址
配置bl命令,完成lvs的调度功能
关闭重定向
安装keepalived,配置/etc/keepalived/keepalived.conf文件
3.多台web服务器配置
安装httpd服务,并配置网页
关闭重定向
配置vip(虚拟ip)地址
4. 启动两台lvs服务器 (主lvs先启动)
5.测试
[root@hd1 ~]# ip addr|grep 1.113
inet 192.168.1.113/32 scope global ens33
[root@hd8 ~]# curl 192.168.1.113
this is 192.168.1.13
6.验证keepalived的高可用性
停掉192.168.1.11的keepalived的服务
[root@hd1 ~]# systemctl stop keepalived(keepalived.server)
查看vip地址现在在哪里?(应该在192.168.1.12上)
[root@hd2 ~]# ip addr |grep 1.113
inet 192.168.1.113/32 scope global ens33
通过客户端继续访问192.168.1.113 还是可以正常访问 后台的1.13和1.14的
高可用配置
4、keepalived+lvs配置
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件
keepalived是以VRRP协议为基础实现的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议 (冗余:多个)
虚拟路由冗余协议,
可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各种检查方式。
vrrp模块是来实现VRRP协议的。
3、keepalived组成和原理
Keepalived软件主要是通过VRRP协议实现高可用功能的。
作用:VRRP的目的是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。
keepalived的配置文件
keepalived只有一个配置文件
/etc/keepalived/keepalived.conf
里面主要包括以下几个配置区域,分别是
global_defs、
static_ipaddress、
static_routes、
vrrp_script、
vrrp_instance和virtual_server。
环境准备
四台服务器
主lvs 192.168.8.11 vip 192.168.8.111
备lvs 192.168.8.12 vip 192.168.8.111
web1 192.168.8.138 vip 192.168.8.111
web2 192.168.8.139 vip 192.168.8.111
主lvs
root@hd1 ~]#yum -y install ipvsadm
root@hd1 ~]#modprobe ip_vs
root@hd1 ~]#cat /proc/net/ip_vs
配置关闭icmp重定向
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
cat /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/ens33/send_redirects
安装keepalived
[root@hd1 ~]# yum -y install keepalived
配置keepalived的主配置文件
清空配置文件的内容
[root@hd1 ~]# > /etc/keepalived/keepalived.conf
[root@hd1 ~]# cat /etc/keepalived/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.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.8.111
}
}
virtual_server 192.168.8.111 80 {
delay_loop 6
lb_algo rr
lb_kind DR
net_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.8.138 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
real_server 192.168.8.139 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
第二台lvs192.168.1.12的配置
安装工具包
[root@hd2 ~]# yum -y install ipvsadm
[root@hd2 ~]# modprobe ip_vs
[root@hd2 ~]# cat /proc/net/ip_vs
配置关闭icmp重定向
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
cat /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/ens33/send_redirects
安装keepalived
[root@hd2 ~]# yum -y install keepalived
配置keepalived的配置文件
[root@hd2 ~]# > /etc/keepalived/keepalived.conf
[root@hd2 ~]# cat /etc/keepalived/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.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90 #优先级要变低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.8.111
}
}
virtual_server 192.168.8.111 80 {
delay_loop 6
lb_algo rr
lb_kind DR
net_mask 255.255.255.0
persistence_timeout 50 #持续的超时时间50s
protocol TCP
real_server 192.168.8.138 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
real_server 192.168.8.139 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
配置192.168.1.13为web1服务器
[root@hd3 ~]# yum -y install httpd
[root@hd3 ~]# echo "this is the web1 " >/var/www/html/index.html
[root@hd3 ~]# systemctl start httpd
[root@hd3 ~]# yum -y install net-tools
[root@hd3 ~]#ifconfig lo:0 192.168.8.111 broadcast 192.168.8.111 netmask 255.255.255.255 up
[root@hd3 ~]#route add -host 192.168.8.111 dev lo:0
vi /etc/sysctl.conf
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
7>重启
sysctl -p
2. 配置192.168.1.14为web2服务器
[root@hd4 ~]# yum -y install httpd
[root@hd4 ~]# echo "this is the web2 " >/var/www/html/index.html
[root@hd4 ~]# systemctl start httpd
[root@hd4 ~]# yum -y install net-tools
[root@hd4 ~]#ifconfig lo:0 192.168.8.111 broadcast 192.168.8.111 netmask 255.255.255.255 up
[root@hd4 ~]#route add -host 192.168.8.111 dev lo:0
[root@hd4 ~]#vi /etc/sysctl.conf
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
重启
[root@hd4 ~]#sysctl -p
5. 启动两台lvs服务器 (主lvs先启动)
在主lvs192.168.1.11上
[root@hd1 ~]# systemctl start keepalived
在备lvs192.168.1.12上
[root@hd2 ~]# systemctl start keepalived
6.测试
查看vip地址是否落到了192.168.1.11上
[root@hd1 ~]# ip addr|grep 1.113
inet 192.168.1.113/32 scope global ens33
[root@hd8 ~]# curl 192.168.1.113
this is 192.168.1.13
7.验证keepalived的高可用性
停掉192.168.1.11的keepalived的服务
[root@hd1 ~]# systemctl stop keepalived(keepalived.server)
查看vip地址现在在哪里?(应该在192.168.1.12上)
[root@hd2 ~]# ip addr |grep 1.113
inet 192.168.1.113/32 scope global ens33
通过客户端继续访问192.168.1.113 还是可以正常访问 后台的1.13和1.14的
5、主lvs不可用 可能性
服务器整机不可用,常见于服务器断网,或者断电关机等。
方法一:模拟主服务器断电关闭
#关闭主服务器 VIP所在服务器
shell > poweroff
方法二:模拟主服务器断网
#关闭VIP所在服务器的网卡 使其不能够联网
shell > service network stop
方法三:停掉主服上keepalived服务
shell > systemctl stop keepalived
通过以上实验检测,发现当主服务器整机不可用时,VIP会切换到备用服务器
6、防止脑裂,解决方式
四、实现服务HA
默认keepalived实现的是服务器的高可用,并没有实现基于某个程序的高可用(nginx、lvs)
但是实际情况下,往往并不是服务器整机不可用,只是对应的服务或者软件不可用。
比如说:lvs提供负载均衡,lvs down掉了,但是主服务器依然可用,vip地址还在本地
实现过程分析:
VIP实际是由keepalived进行绑定的,所以当nginx服务不可用时,就关闭当前机器的keepalived即可,释放VIP。进而绑定到其他备用服务器。
①编写服务检测脚本,实现检测nginx是否可用,不可用则关闭当前所在主机的keepalived
②在keepalived配置中调用检测服务脚本
1、Nginx服务可用检测脚本
主备服务器都要实现此脚本
①编写测试脚本 赋予执行权限
shell > cd /etc/keepalived
shell > vim check_nginx.sh
脚本内容:
#!/bin/bash
nginx_status=`ps -C nginx --no-header | wc -l`
if [ $nginx_status -eq 0 ];then
systemctl stop keepalived
fi
赋予脚本执行权限 方便之后其他软件调用执行
shell > chmod +x check_nginx.sh
②测试脚本可用性
启动nginx和keepalived
关闭nginx 执行脚本 查看keepalived是否也关闭
2、模拟宕机实现服务切换
在多台服务器中配置keepalived定时触发检测nginx的脚本模块
#在vrrp_instance外上面定义
vrrp_script check_nginx {
#调用脚本地址
script /etc/keepalived/check_nginx.sh
#检测间隔时间
interval 3
}
#在vrrp_instance里调用
track_script {
#上线定义的名称
check_nginx
}
3、实现web服务器高可用
以上案例已经实现了,服务不可用VIP切换到可用服务器。
现在需求用户的服务是连续不间断的,故用户需要通过VIP进行访问
①解析域名到VIP
②模拟用户访问
7、keepalived的配置补充
五、keepalived的配置补充
脑裂(裂脑):vip出现在了多台机器上。网络不通畅,禁用了数据包,主备服务器没法通讯,造成备服务器认为主服务器不可用,绑定VIP,主服务器VIP不会释放。
解决方案:
①双备或者多备模式 BACKUP 通过priority权重来区分谁的优先级更高
②单播(定向广播)的方式 (一些特定环境禁用了组播方式)
③时间不同步 服务器时间校时
1、非抢占模式
①nopreempt
在主备服务器的配置文件,vrrp_instance段中
②设置state工作模式为BACKUP
两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,会根据优先级来选举一个MASTER出来。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。
2、单播模式
一些特定环境下不允许发送组播,造成备服务器无法收到vrrp包,可能会造成脑裂现象。可以通过单播的方式解决。
单播示例配置:注意此语法在keepalived1.2.11版本以上支持
unicast_src_ip 192.168.1.10##(本地IP地址)
unicast_peer {
192.168.1.11##(对端IP地址)此地址一定不能忘记
}
主服务器server01配置
#在vrrp_instace段中加入
#本地IP
unicast_src_ip 192.168.1.11
unicast_peer {
#对象IP 发送vrrp包给备服务器
192.168.1.10
}
备服务器server03配置
#在vrrp_instace段中加入
#本地IP
unicast_src_ip 192.168.1.10
unicast_peer {
#对象IP 发送vrrp包给备服务器
192.168.1.11
}
tcpdump抓vrrp包的方式:
shell > tcpdump vrrp -n -i ens33
keepalived+nginx 高可用配置
所有的请求流量,都要经过负载均衡服务器,负载均衡服务器压力很大,防止它宕机,导致后端服务所有都不可用,需要对负载均衡服务器,做高可用
给负载均衡服务器做一台备用服务器,通过keepalived实现高可用。
通过keepalived实现VIP在负载均衡服务器组的切换。
server03 master LB 192.168.1.11
server04 backup LB 192.168.1.14
主负载均衡的keepalived配置
vrrp_instance VI_1 {
state BACKUP
interface eth0
#虚拟路由ID 新ID 不要之前的冲突
virtual_router_id 52
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#添加新VIP
192.168.1.100
}
track_script {
check_nginx
}
}
备负载均衡的keepalived配置
vrrp_instance VI_1 {
state BACKUP
interface eth0
#修改route_id
virtual_router_id 52
priority 99
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#unicast_src_ip 192.168.1.12
#unicast_peer {
# 192.168.1.11
#}
virtual_ipaddress {
#新VIP
192.168.1.100
}
track_script {
check_nginx
}
}
nginx的负载均衡
负载均衡
负载均衡:分发流量、请求到不同的服务器。使流量平均分配(理想的状态的)
作用:服务器容灾 流量分发
主要作用:
①流量分发 请求平均 降低单例压力
其他作用:
②安全 隐藏后端真实服务
③屏蔽非法请求(七层负载均衡)
实现方式分类:
①软件级别 性价比高 可控性强
②硬件级别 性能好 价格高 几万到几十万不等
硬件是实现方式:
F5 BIG-IP 四层和七层
七层 Nginx、HAProxy
四层 LVS、HAProxy、Nginx(1.9版本后)
1)二层负载均衡(mac)
根据OSI模型分的二层进行负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后,再分配后端实际的MAC地址响应
2)三层负载均衡(ip)
一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后,再分配后端实际的IP地址响应
3)四层负载均衡(tcp) 网络运输层面的负载均衡
在三层负载均衡的基础上,用ip+port接收请求,再转发到对应的机器
4)七层负载均衡(http) 智能型负载均衡
根据虚拟的url或IP,主机接收请求,再转向(反向代理)相应的处理服务器
架构分析:
①用户访问请求Nginx负载均衡服务器
②Nginx负载均衡服务器再分发请求到web服务器
实际配置负载均衡,只需修改作为负载均衡服务器的Nginx即可。
①在客户端解析域名到负载均衡服务器
②在192.168.1.11上安装nginx做负载均衡
[root@localhost ~]#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]#yum -y install epel-release
[root@localhost ~]#yum -y install nginx
shell > cat /etc/nginx/nginx.conf
配置文件示例:
worker_processes 1;
events {
worker_connections 1024;
}
http {
#在http段进行配置
#分发请求到后端服务器
upstream shop {
#web1 server01
server 192.168.1.12;
#web2 server02
server 192.168.1.13;
}
#修改之前的shop的server段配置
server {
listen 80;
server_name www.a.com;
location / {
#匹配到上面的upstream
proxy_pass http://shop;
#以下两条配置,实质是设置了传输的header头信息
#传输域名给后端服务器 进行识别 方便匹配对应server虚拟主机
proxy_set_header Host $host;
#发送客户端IP 给后端服务器 用来方便后端服务器识别用户真实IP
proxy_set_header X-Real-IP $remote_addr;
}
}
#重启nginx服务
[root@localhost nginx]# systemctl restart nginx
==方法一:在不同服务器写入不同信息==
①分别修改web服务器的信息
shell11 > echo wo shi 192.168.1.12 >>/usr/share/nginx/html/index.html
shell12 > echo wo shi 192.168.1.13 >>/usr/share/nginx/html/index.html
测试:
[root@localhost ~]# curl 192.168.1.11
wo shi 1.13
[root@localhost ~]# curl 192.168.1.11
wo shi 1.12
可以停掉其中一台web服务器进行测试
#停掉192.168.1.13
省略15个字......
#再次访问nginx负载均衡发现 1.13故障机器自动被踢出,说明nginx负载均衡默认就具备健康检查功能
[root@localhost ~]# curl 192.168.1.11
wo shi 1.12
[root@localhost ~]# curl 192.168.1.11
wo shi 1.12
方法二:查看后端web服务器的访问日志,有没有记录真正客户端的ip地址
shell > cat /var/log/nginx/access.log
nginx遇到的问题之负载均衡后获取客户端IP
负载均衡之后,在后端的web服务器获取到的是负载均衡服务器的IP,而不能够获取到客户端的真实IP。
需要进行以下特殊配置:
①首先在负载均衡服务器中配置,转发客户端IP给后端web服务器
location{
..........
#发送客户端IP 给后端服务器 用来方便后端服务器识别用户真实IP
proxy_set_header X-Real-IP $remote_addr;
}
②后端web服务器需要配置,识别从负载均衡服务器传输过来的客户端真实IP
set_real_ip_from 192.168.1.11;(负载均衡的ip)
官方网址:http://nginx.org/en/docs/http/ngx_http_realip_module.html
使用ngx_http_realip_module模块提供的set_real_ip_from语法,默认此模块没有安装,需要编译时添加编译参数
web服务器上配置set_real_ip_from 代表从哪儿来源的IP,需要识别真实客户端IP
示例配置:
#此配置在web服务器上的nginx
#可配置到http、server、location中,推荐配置到server中
#配置需要识别的IP来源 负载均衡的IP
set_real_ip_from 192.168.1.11;
nginx配置中upstream的server关键字
upstream中的分发之后的几个关键字:
backup 备 其他的没有backup标识的都无响应,才分发到backup
down 此条配置,不会被分发到
upstream shop {
server 192.168.1.12 ;
server 192.168.1.13 backup;
}
nginx遇到的问题之 session一致性问题
访问管理后端页面,登录发现验证码不通过
分析原因:
①比如分发到web1服务器,生成验证码,存储到session中,默认在服务器本地
②再次校验的时候,请求分发到web2服务器了,所有验证码一直校验不通过
解决方案思路:
①生成和验证session都请求同一台服务器
②共享session nfs mysql ==内存缓存软件(memcached、redis)==
Nginx的常见负载均衡算法实战
Nginx 官方默认3种负载均衡的算法
①==Round-Robin RR轮询(默认)== 一次一个的来(理论上的,实际实验可能会有间隔)
②==weight 权重== 权重高多分发一些 服务器硬件更好的设置权重更高一些
③==ip_hash== 同一个IP,所有的访问都分发到同一个web服务器
Tip:
第三方模块实现的调度算法 需要编译安装第三方模块
④fair 根据后端服务器的繁忙程度 将请求发到非繁忙的后端服务器
⑤url_hash 如果客户端访问的url是同一个,将转发到同一台后端服务器
验证一:验证加权轮询算法
示例配置:
upstream shop {
#web1 server01
server 192.168.1.12 weight=5;
#web2 server02
server 192.168.1.13 weight=3;
}
server01 web 1 1 1 1 1 1
server03 web 2 1 1 1
8次中,server01分发5次,server03分发3次
验证二:ip一致性算法
示例配置:
upstream shop {
#ip hash 一致性算法配置 设置此项 weight就失效了
ip_hash;
#web1 server01
server 192.168.1.12 weight=5;
#web2 server02
server 192.168.1.13 weight=3;
}
nginx 四层代理,七层代理
nginx两种反向代理区别
7层反向代理和4层反向代理
在nginx中,upstream和stream都是指向不同类型的模块。
upstream模块用于HTTP协议的负载均衡,主要用于将客户端请求分发到多个后端服务器,从而提高系统的稳定性和执行效率。
stream模块用于TCP/UDP协议的负载均衡,主要用于将客户端请求分发到多个后端服务器,从而提高系统的稳定性和执行效率,也可以用于TCP代理和UDP代理。
因此,upstream和stream的区别在于它们适用的协议不同。
upstream适用于HTTP协议的负载均衡,stream适用于TCP/UDP协议的负载均衡和代理。
nginx做七层反向代理
以下是使用nginx做七层反向代理的步骤:
1. 安装nginx:在Linux系统中使用包管理器安装nginx,或者从官网下载源码后编译安装。
2. 配置nginx:修改nginx配置文件,一般在/etc/nginx/nginx.conf(/usr/local/nginx/nginx.conf),增加以下内容:
http {
upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
其中,
upstream定义了后端服务器集群,
server定义了监听的端口和域名,
location定义了访问路径。
3. 重启nginx:执行以下命令重启nginx服务,使新的配置生效。
# 查看nginx进程
ps -ef | grep nginx
# 重启nginx
/usr/local/nginx/sbin/nginx -s reload
/etc/nginx/sbin/nginx -s reload
测试反向代理:
访问配置的域名,可以看到nginx反向代理到后端服务器集群,将请求分发到多个后端服务器(负载均衡)处理,并返回响应。
nginx做四层反向代理
以下是使用nginx做四层反向代理的步骤:
1. 安装nginx:在Linux系统中使用包管理器安装nginx,或者从官网下载源码后编译安装。
2. 配置nginx:修改nginx配置文件,一般在/etc/nginx/nginx.conf,增加以下内容:
stream {
upstream backend {
server backend1.example.com:8080;
server backend2.example.com:8080;
}
server {
listen 80;
proxy_pass backend;
}
}
其中,
stream定义了四层代理,
upstream定义了后端服务器集群,
server定义了监听的端口和代理地址。
1. 重启nginx:执行以下命令重启nginx服务,使新的配置生效。
# 查看nginx进程
ps -ef | grep nginx
# 重启nginx
/usr/local/nginx/sbin/nginx -s reload
/etc/nginx/sbin/nginx -s reload
测试反向代理:
使用TCP客户端工具(如telnet、netcat、nc等)连接nginx代理地址,
可以看到nginx反向代理到后端服务器集群,将请求分发到多个后端服务器处理,并返回响应。