IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Nginx的反向代理和TCP调度 -> 正文阅读

[PHP知识库]Nginx的反向代理和TCP调度

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服务器和测试机不在同一个网段即可)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5rBnrQCi-1630683600700)(E:\Typort\image-20210901170135700.png)]

主机ip
测试机192.168.19.1
nginx代理eth0 192.168.19.100
ehh1 192.1688.20.100
web1192.168.20.30
web2192.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)
upstream webserver{
        server 192.168.20.30:80;  #使用server定义集群中的具体服务器和端口
        server 192.168.20.40:80;
}
server {
        listen       80;
        server_name  www.a.com;
        location / {
        #通过proxy_pass将用户的请求转发给webserver集群
          proxy_pass http://webserver;
          root html;
          index index.html index.htm;
        }
}
...
重启服务
/usr/local/nginx/sbin/nginx -s reload

开始测试(验证负载均衡)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOArqnB2-1630683600703)(E:\Typort\image-20210901173532636.png)]

验证(健康检查)

我们可以先关闭某一个web服务器,再次访问,看是否轮询,或者报错
web1
systemctl stop httpd

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WkQYBe1-1630683600705)(E:\Typort\image-20210901173951130.png)]

再次启动服务,动态查看nginx健康检查
web1
systemctl restart httpd
在次测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gW94CJTy-1630683600707)(E:/Typort/image-20210901181459587.png)]

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服务器

### [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4NCICwn-1630683600709)(E:/Typort/image-20210901184304657.png)]

客户端登录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的效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sK6bs86w-1630683600710)(E:/Typort/image-20210901185309407.png)]

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
ssh1192.168.20.30
ssh2192.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 \       #开启ssl加密功能  --with-模块名称
 --with-stream               #开启4层反向代理功能
 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;  #转发到这个服务器的22端口
    server 192.168.20.40:22;
        }
    #根据不同的端口来实现其他的服务的维护。比如3306数据库
    server {
        listen 2000;   #nginx监听的端口 
        proxy_pass backup;  
        proxy_timeout 3s;
        proxy_connect_timeout 1s;  #连接的超时时间
        }
}
#在HTTP之前加入,一般在20行
http {
....
重新加载配置文件确保刚才的配置生效
/usr/local/nginx/sbin/nginx -s reload

测试:

在远程连接时,要加上相应的端口,来实现nginx的代理,如果不输入,默认连接nginx服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oIQJPbJH-1630683600711)(E:/Typort/image-20210903110058047.png)]

ut 1s; #连接的超时时间
}
}
#在HTTP之前加入,一般在20行
http {

重新加载配置文件确保刚才的配置生效
/usr/local/nginx/sbin/nginx -s reload


测试:

在远程连接时,要加上相应的端口,来实现nginx的代理,如果不输入,默认连接nginx服务器

[外链图片转存中...(img-oIQJPbJH-1630683600711)]







































  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:35:27  更:2021-09-05 10:36:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:49:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码