Nginx的反向代理
nginx的第二大功能:代理(帮客户主机找到相应的web服务器)
作为代理服务器时有两大功能:
- 调度器(轮询算法),负载均衡,满足更大的并发量
- 健康检查(智能判断某个服务器是否能够提供服务),网站高可用
一.需求:
使用nginx实现web反向代理功能,实现如下功能:
- 后端web服务器两台,可是使用httpd实现
- nginx采用轮询的方式调用后端web服务器
- 两台web服务器的权重要求设置为不同的值
- 最大失败次数为1,失败超时时间为30s
二.方案:
使用4台虚拟机,其中一台作为nginx代理服务器,该服务器需要配置两块网卡。IP地址分别为192.168.19.100和192.168.20.100,两台web服务器地址为192.168.20.30和192.168.20.40,客户端测试主机IP地址为192.168.19.1。(IP可以发生改变,只要符合web服务器和测试机不在同一个网段即可)
主机 | ip |
---|
测试机 | 192.168.19.1 | nginx代理 | eth0 192.168.19.100 | | ehh1 192.1688.20.100 | web1 | 192.168.20.30 | web2 | 192.168.20.40 |
三.步骤
1.先部署后端web服务器
在两台web服务器上安装httpd
web1
yum -y install httpd
echo "this 192.168.20.30" >/var/www/html/index.html
systemctl restart httpd
firewall-cmd --set-default-zone=trusted
setenforce 0
web2
yum -y install httpd
echo "this 192.168.20.40" >/var/www/html/index.html
systemctl restart httpd
firewall-cmd --set-default-zone=trusted
setenforce 0
2.配置nginx服务器,添加服务器池,实现反向代理功能
1)修改/usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
....
upstream webserver{
server 192.168.20.30:80;
server 192.168.20.40:80;
}
server {
listen 80;
server_name www.a.com;
location / {
proxy_pass http://webserver;
root html;
index index.html index.htm;
}
}
...
重启服务
/usr/local/nginx/sbin/nginx -s reload
开始测试(验证负载均衡)
验证(健康检查)
我们可以先关闭某一个web服务器,再次访问,看是否轮询,或者报错
web1
systemctl stop httpd
再次启动服务,动态查看nginx健康检查
web1
systemctl restart httpd
在次测试
3.配置upstream服务器集群池属性
1)设置失败次数,超时时间,权重
- weight:设置服务器权重值,权重默认为1
- max_fails设置最大失败次数
- fail_timeout:设置失败超时时间,单位为秒
- down: 标记服务器已关机,不参与集群调度
- 长时间不能恢复使用down,短时间可以使用fail——timeout,权重越高,服务器越繁忙
vim /usr/local/nginx/conf/nginx.conf
...
http {
...
upstream webserver{
server 192.168.20.30:80 weight=1 max_fails=1 fail_timeout=30;
server 192.168.20.40:80 weight=2 max_fails=1 fail_timeout=30;
server 192.168.20.50:80 weight=2 max_fails=1 fail_timeout=30 down;
}
server {
listen 80;
server_name www.a.com;
location / {
proxy_pass http://webserver;
root html;
index index.html index.htm;
}
}
}
重启服务
/usr/local/nginx/sbin/nginx -s reload
4.配置upstream服务器集群的调度算法
1)相同客户端访问相同web服务器
客户端登录web服务器,如果刷新,因为轮询算法,所以要重新登录
2)解决方案:
修改默认算法,修改为 ip_hash
vim /usr/local/nginx/conf/nginx.conf
....
upstream webserver{
ip_hash;
#通过ip_hash设置调度规则为:相同客户端访问相同的服务器
server 192.168.20.30:80; #使用server定义集群中的具体服务器和端口
server 192.168.20.40:80;
}
server {
listen 80;
server_name www.a.com;
location / {
proxy_pass http://webserver;
root html;
index index.html index.htm;
}
}
...
重启服务
/usr/local/nginx/sbin/nginx -s reload
客户端测试ip_hash的效果
Nginx的TCP/UDP调度器
一、需求
使用Nginx实现tcp/udp调度器功能,实现如下功能:
- 后端ssh服务器两台
- nginx编译安装时需要使用–with-stream,开启ngx_stream_core_module模块
- nginx采用轮询的方式调用后端ssh服务器
二、方案
使用4台虚拟机,其中一台作为nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.19.100和192.168.20.100
主机 | ip |
---|
测试机 | 192.168.19.1 | nginx代理 | eth0 192.168.19.100 | | ehh1 192.1688.20.100 | ssh1 | 192.168.20.30 | ssh2 | 192.168.20.40 |
nginx可以做其他服务的代理
要实现Nginx对TCP/UDP的调度,需要安装以下模块
模块
- ngx_stream_core_module模块
- 使用–with-stream开启该模块
- 注意:nginx从1.9版本才开始支持该功能
三、步骤
1.部署支持四层TCP/UDP代理的Nginx服务器
1)编译安装必须使用–with-stream参数开启四层代理模块
为了没有一些小问题,建议重装nginx,卸载之前的nginx,当然也可以使用nginx的升级来完成
/usr/local/nginx/sbin/nginx -s stop
rm -rf /usr/local/nginx
重装
yum -y install gcc pcre-devel openssl-devel
useradd -s /sbin/nologin nginx
上传相应的软件包到服务器上,并进行解压安装
tar -xf nginx-1.20.1.tar.gz
cd nginx-1.20.1/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-stream
make && make install
2.配置Nginx服务器,添加服务器池,实现TCP/UDP的反向代理功能
1)修改nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
....
stream {
upstream backup {
server 192.168.20.30:22;
server 192.168.20.40:22;
}
server {
listen 2000;
proxy_pass backup;
proxy_timeout 3s;
proxy_connect_timeout 1s;
}
}
http {
....
重新加载配置文件确保刚才的配置生效
/usr/local/nginx/sbin/nginx -s reload
测试:
在远程连接时,要加上相应的端口,来实现nginx的代理,如果不输入,默认连接nginx服务器
ut 1s; #连接的超时时间 } } #在HTTP之前加入,一般在20行 http { … 重新加载配置文件确保刚才的配置生效 /usr/local/nginx/sbin/nginx -s reload
测试:
在远程连接时,要加上相应的端口,来实现nginx的代理,如果不输入,默认连接nginx服务器
[外链图片转存中...(img-oIQJPbJH-1630683600711)]
|