一、Nginx反向代理(七层代理)二、Nginx的TCP/UDP调度器(四层代理)

复制代码
一、Nginx反向代理(七层代理)
实验要求
使用Nginx实现Web反向代理功能,实现如下功能: 
    后端Web服务器两台,可以使用httpd实现
    Nginx采用轮询的方式调用后端Web服务器
    两台Web服务器的权重要求设置为不同的值
    最大失败次数为2,失败超时时间为30秒
实验环境
以下机器全部已经存在,无须再次配置

主机名	IP地址	角色
server1(已存在)	eth0:192.168.99.254/24	客户端
proxy(已存在)	eth1:192.168.99.5/24	代理服务器
web1(已存在)	eth1:192.168.99.100/24	web服务器
web2(已存在)	eth1:192.168.99.200/24	web服务器
image-20241008213058281

 

1)部署后端Web服务器
1)部署后端Web1服务器
后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo "web1" > /var/www/html/index.html
[root@web1 ~]# systemctl enable --now httpd

2)部署后端Web2服务器
[root@web2 ~]# yum -y install  httpd
[root@web2 ~]# echo "web2" > /var/www/html/index.html
[root@web2 ~]# systemctl enable --now httpd

3)使用proxy主机测试
[root@proxy ~]# curl 192.168.99.100
web1
[root@proxy ~]# curl 192.168.99.200
web2
2)配置Nginx代理服务器
添加服务器池,实现反向代理功能

之前proxy主机安装的nginx已经改过很多配置,避免实验冲突,先还原proxy主机的nginx,重新安装nginx
[root@proxy ~]# /usr/local/nginx/sbin/nginx  -s stop    #如果之前没有启动,可以不用执行停止的命令
[root@proxy ~]# rm -rf /usr/local/nginx/
[root@proxy ~]# cd /root/lnmp_soft/
[root@proxy lnmp_soft]# rm -rf nginx-1.22.1
[root@proxy lnmp_soft]# tar -xf nginx-1.22.1.tar.gz
[root@proxy lnmp_soft]# cd nginx-1.22.1/
[root@proxy nginx-1.22.1]# yum -y install gcc make pcre-devel openssl-devel
[root@proxy nginx-1.22.1]# ./configure 
[root@proxy nginx-1.22.1]# make && make  install    

1)修改nginx的配置文件
[root@proxy nginx-1.22.1]# vim /usr/local/nginx/conf/nginx.conf
...
http {
...
#使用upstream定义后端服务器集群,集群名称任意(如webserver)
#使用server定义集群中的具体服务器和端口
      upstream webserver {
         server 192.168.99.100:80;
         server 192.168.99.200:80;
        }
      server {
          listen       80;
          server_name  localhost;
          
          #charset koi8-r;
          
          #access_log  logs/host.access.log  main;
  
          location / {
              root   html;
              index  index.html index.htm;
              proxy_pass http://webserver;  #通过proxy_pass将用户的请求转发给webserver集群
          }
 ...
 
2)启动nginx
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx

3)使用真机浏览器做测试192.168.99.5,刷新可以看到网站的轮询效果,出现结果为 web1 或者 web2
3)配置upstream服务器集群池属性
1)设置权重
weight可以设置后台服务器的权重,权重越大任务的分配量就越大
[root@proxy nginx-1.22.1]# vim /usr/local/nginx/conf/nginx.conf
.. ..
      upstream webserver {
         server 192.168.99.100:80 weight=2;
         server 192.168.99.200:80;
        }
      server {
 .. ..

2)重新加载配置并访问,可以看到web1的任务量增加
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -s reload

真机浏览器测试http://192.168.99.5,不太明显
可以使用命令行测试
[root@server1 ~]# curl 192.168.99.5
web1
[root@server1 ~]# curl 192.168.99.5
web2
[root@server1 ~]# curl 192.168.99.5
web1
[root@server1 ~]# curl 192.168.99.5
web1

3)设置健康检查max_fails可以设置后台服务器连不上的失败次数,fail_timeout可以设置后台服务器的失败超时时间,等待多长时间再次尝试连接
[root@proxy nginx-1.22.1]# vim /usr/local/nginx/conf/nginx.conf
...
      upstream webserver {
         server 192.168.99.100:80;
         server 192.168.99.200:80 max_fails=2 fail_timeout=30;
        }
      server {
 ...

4)重新加载配置并访问
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -s reload

测试时,先将web2的httpd服务关闭
[root@web2 ~]# systemctl stop  httpd

使用真机命令行访问集群页面curl 192.168.99.5,只会显示web1的页面
[root@server1 ~]# curl 192.168.99.5
web1
[root@server1 ~]# curl 192.168.99.5
web1

此时即使将web2的httpd服务开启也无效,因为要等待30秒
[root@web2 ~]# systemctl start  httpd
[root@server1 ~]# curl 192.168.99.5 #30秒之后再访问,web2会出现
web2
4)配置upstream服务器集群的调度算法
测试ip_hash
1)设置相同客户端访问相同Web服务器
[root@proxy nginx-1.22.1]# vim /usr/local/nginx/conf/nginx.conf
...
      upstream webserver {
         ip_hash;
         server 192.168.99.100:80;
         server 192.168.99.200:80;
        }
      server {
...
2)重新加载配置
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -s reload

3)测试只会见到一个页面
[root@server1 ~]# curl 192.168.99.5
web1
[root@server1 ~]# curl 192.168.99.5
web1
添加down标记
down标记可以让集群主机暂时不参与集群活动
[root@proxy nginx-1.22.1]# vim /usr/local/nginx/conf/nginx.conf
...
      upstream webserver {
         server 192.168.99.100:80;
         server 192.168.99.200:80 down;
        }
      server {
 ...
重新加载配置
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -s reload

测试,只会见到web1
[root@server1 ~]# curl 192.168.99.5
web1
[root@server1 ~]# curl 192.168.99.5
web1



二、Nginx的TCP/UDP调度器(四层代理)


实验要求
使用Nginx实现TCP/UDP调度器功能,实现如下功能: 
    后端SSH服务器两台
    Nginx编译安装时需要使用--with-stream,开启ngx_stream_core_module模块
    Nginx采用轮询的方式调用后端SSH服务器
实验环境
以下机器全部已经存在,无须再次配置

主机名	IP地址	角色
server1(已存在)	eth0:192.168.99.254/24	客户端
proxy(已存在)	eth1:192.168.99.5/24	代理服务器
web1(已存在)	eth1:192.168.99.100/24	ssh服务器
web2(已存在)	eth1:192.168.99.200/24	ssh服务器
image-20241008213311333

 

1)部署nginx服务
支持4层TCP/UDP代理的Nginx服务器 

1)部署nginx服务器
编译安装必须要使用--with-stream参数开启4层代理模块
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -s stop
[root@proxy nginx-1.22.1]# rm -rf /usr/local/nginx/
[root@proxy nginx-1.22.1]# cd /root/lnmp_soft/nginx-1.22.1/
[root@proxy nginx-1.22.1]# yum -y install gcc make pcre-devel openssl-devel
[root@proxy nginx-1.22.1]# ./configure --with-stream                    #开启4层代理功能
[root@proxy nginx-1.22.1]# make && make install
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -V           #查看安装模块情况
nginx version: nginx/1.22.1
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC) 
configure arguments: --with-stream
2)配置Nginx服务
添加服务器池,实现四层代理功能

 1)修改nginx配置文件
 [root@proxy nginx-1.22.1]# vim /usr/local/nginx/conf/nginx.conf    #配置写到http的上方即可
...
      stream {
        upstream backend {             #创建集群,名称为backend
            server 192.168.99.100:22;  #后端SSH服务器IP和端口
            server 192.168.99.200:22;
          }
         server {               #调用集群
            listen 12345;       #Nginx代理监听的端口,可以自己定义
            proxy_pass backend; #调用backend集群
          }
     }
http {
.. ..
}
2)启动nginx
[root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx 

3)客户端使用访问代理服务器测试轮询效果
[root@server1 ~]# ssh 192.168.99.5 -p 12345     #使用该命令多次访问查看轮询效果
[root@web1 ~]# exit
[root@server1 ~]# ssh 192.168.99.5 -p 12345
[root@web2 ~]#

一、Nginx反向代理(七层代理)

实验要求

使用Nginx实现Web反向代理功能,实现如下功能:

后端Web服务器两台,可以使用httpd实现

Nginx采用轮询的方式调用后端Web服务器

两台Web服务器的权重要求设置为不同的值

最大失败次数为2,失败超时时间为30秒

实验环境

以下机器全部已经存在,无须再次配置

主机名 IP地址 角色

server1(已存在) eth0:192.168.99.254/24 客户端

proxy(已存在) eth1:192.168.99.5/24 代理服务器

web1(已存在) eth1:192.168.99.100/24 web服务器

web2(已存在) eth1:192.168.99.200/24 web服务器

image-20241008213058281

1)部署后端Web服务器

1)部署后端Web1服务器

后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容

root@web1 \~# yum -y install httpd

root@web1 \~# echo "web1" > /var/www/html/index.html

root@web1 \~# systemctl enable --now httpd

2)部署后端Web2服务器

root@web2 \~# yum -y install httpd

root@web2 \~# echo "web2" > /var/www/html/index.html

root@web2 \~# systemctl enable --now httpd

3)使用proxy主机测试

root@proxy \~# curl 192.168.99.100

web1

root@proxy \~# curl 192.168.99.200

web2

2)配置Nginx代理服务器

添加服务器池,实现反向代理功能

之前proxy主机安装的nginx已经改过很多配置,避免实验冲突,先还原proxy主机的nginx,重新安装nginx

root@proxy \~# /usr/local/nginx/sbin/nginx -s stop #如果之前没有启动,可以不用执行停止的命令

root@proxy \~# rm -rf /usr/local/nginx/

root@proxy \~# cd /root/lnmp_soft/

root@proxy lnmp_soft# rm -rf nginx-1.22.1

root@proxy lnmp_soft# tar -xf nginx-1.22.1.tar.gz

root@proxy lnmp_soft# cd nginx-1.22.1/

root@proxy nginx-1.22.1# yum -y install gcc make pcre-devel openssl-devel

root@proxy nginx-1.22.1# ./configure

root@proxy nginx-1.22.1# make && make install

1)修改nginx的配置文件

root@proxy nginx-1.22.1# vim /usr/local/nginx/conf/nginx.conf

...

http {

...

#使用upstream定义后端服务器集群,集群名称任意(如webserver)

#使用server定义集群中的具体服务器和端口

upstream webserver {

server 192.168.99.100:80;

server 192.168.99.200:80;

}

server {

listen 80;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

proxy_pass http://webserver; #通过proxy_pass将用户的请求转发给webserver集群

}

...

2)启动nginx

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx

3)使用真机浏览器做测试192.168.99.5,刷新可以看到网站的轮询效果,出现结果为 web1 或者 web2

3)配置upstream服务器集群池属性

1)设置权重

weight可以设置后台服务器的权重,权重越大任务的分配量就越大

root@proxy nginx-1.22.1# vim /usr/local/nginx/conf/nginx.conf

.. ..

upstream webserver {

server 192.168.99.100:80 weight=2;

server 192.168.99.200:80;

}

server {

.. ..

2)重新加载配置并访问,可以看到web1的任务量增加

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx -s reload

真机浏览器测试http://192.168.99.5,不太明显

可以使用命令行测试

root@server1 \~# curl 192.168.99.5

web1

root@server1 \~# curl 192.168.99.5

web2

root@server1 \~# curl 192.168.99.5

web1

root@server1 \~# curl 192.168.99.5

web1

3)设置健康检查max_fails可以设置后台服务器连不上的失败次数,fail_timeout可以设置后台服务器的失败超时时间,等待多长时间再次尝试连接

root@proxy nginx-1.22.1# vim /usr/local/nginx/conf/nginx.conf

...

upstream webserver {

server 192.168.99.100:80;

server 192.168.99.200:80 max_fails=2 fail_timeout=30;

}

server {

...

4)重新加载配置并访问

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx -s reload

测试时,先将web2的httpd服务关闭

root@web2 \~# systemctl stop httpd

使用真机命令行访问集群页面curl 192.168.99.5,只会显示web1的页面

root@server1 \~# curl 192.168.99.5

web1

root@server1 \~# curl 192.168.99.5

web1

此时即使将web2的httpd服务开启也无效,因为要等待30秒

root@web2 \~# systemctl start httpd

root@server1 \~# curl 192.168.99.5 #30秒之后再访问,web2会出现

web2

4)配置upstream服务器集群的调度算法

测试ip_hash

1)设置相同客户端访问相同Web服务器

root@proxy nginx-1.22.1# vim /usr/local/nginx/conf/nginx.conf

...

upstream webserver {

ip_hash;

server 192.168.99.100:80;

server 192.168.99.200:80;

}

server {

...

2)重新加载配置

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx -s reload

3)测试只会见到一个页面

root@server1 \~# curl 192.168.99.5

web1

root@server1 \~# curl 192.168.99.5

web1

添加down标记

down标记可以让集群主机暂时不参与集群活动

root@proxy nginx-1.22.1# vim /usr/local/nginx/conf/nginx.conf

...

upstream webserver {

server 192.168.99.100:80;

server 192.168.99.200:80 down;

}

server {

...

重新加载配置

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx -s reload

测试,只会见到web1

root@server1 \~# curl 192.168.99.5

web1

root@server1 \~# curl 192.168.99.5

web1

二、Nginx的TCP/UDP调度器(四层代理)

实验要求

使用Nginx实现TCP/UDP调度器功能,实现如下功能:

后端SSH服务器两台

Nginx编译安装时需要使用--with-stream,开启ngx_stream_core_module模块

Nginx采用轮询的方式调用后端SSH服务器

实验环境

以下机器全部已经存在,无须再次配置

主机名 IP地址 角色

server1(已存在) eth0:192.168.99.254/24 客户端

proxy(已存在) eth1:192.168.99.5/24 代理服务器

web1(已存在) eth1:192.168.99.100/24 ssh服务器

web2(已存在) eth1:192.168.99.200/24 ssh服务器

image-20241008213311333

1)部署nginx服务

支持4层TCP/UDP代理的Nginx服务器

1)部署nginx服务器

编译安装必须要使用--with-stream参数开启4层代理模块

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx -s stop

root@proxy nginx-1.22.1# rm -rf /usr/local/nginx/

root@proxy nginx-1.22.1# cd /root/lnmp_soft/nginx-1.22.1/

root@proxy nginx-1.22.1# yum -y install gcc make pcre-devel openssl-devel

root@proxy nginx-1.22.1# ./configure --with-stream #开启4层代理功能

root@proxy nginx-1.22.1# make && make install

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx -V #查看安装模块情况

nginx version: nginx/1.22.1

built by gcc 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC)

configure arguments: --with-stream

2)配置Nginx服务

添加服务器池,实现四层代理功能

1)修改nginx配置文件

root@proxy nginx-1.22.1# vim /usr/local/nginx/conf/nginx.conf #配置写到http的上方即可

...

stream {

upstream backend { #创建集群,名称为backend

server 192.168.99.100:22; #后端SSH服务器IP和端口

server 192.168.99.200:22;

}

server { #调用集群

listen 12345; #Nginx代理监听的端口,可以自己定义

proxy_pass backend; #调用backend集群

}

}

http {

.. ..

}

2)启动nginx

root@proxy nginx-1.22.1# /usr/local/nginx/sbin/nginx

3)客户端使用访问代理服务器测试轮询效果

root@server1 \~# ssh 192.168.99.5 -p 12345 #使用该命令多次访问查看轮询效果

root@web1 \~# exit

root@server1 \~# ssh 192.168.99.5 -p 12345

root@web2 \~#

相关推荐
原来是猿几秒前
性能测试(1)
运维·服务器·python·压力测试
郝学胜-神的一滴1 分钟前
CMake 012:Linux 下动态库与可执行程序的单文件构建
linux·服务器·开发语言·c++·软件构建·cmake
Akamai中国5 分钟前
针对 Akamai Cloud 上的 NVIDIA RTX Pro 6000 Blackwell 进行基准测试
人工智能·云计算·gpu算力·云服务
为思念酝酿的痛8 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪9 小时前
什么是docker
运维·docker·容器
隔窗听雨眠9 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
人还是要有梦想的10 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器
北京智和信通10 小时前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops10 小时前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush410 小时前
嵌入式linux学习记录二
linux·运维·学习