一、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 ~]#

相关推荐
moxiaoran575323 分钟前
linux使用scp和密钥在不同服务器传输文件
linux·服务器
Apache IoTDB24 分钟前
替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维
运维·数据库·hbase·时序数据库·iotdb·opentsdb
Aimyon_3631 分钟前
⾃动化运维利器 Ansible-变量
运维·ansible
Aimyon_3633 分钟前
⾃动化运维利器Ansible-基础
运维·windows·ansible
嚯——哈哈42 分钟前
aws云服务器:高可靠性和数据安全
运维·服务器
BillKu1 小时前
Linux(CentOS)安装达梦数据库 dm8
linux·服务器·centos·达梦数据库·dm8
嚯——哈哈1 小时前
AWS云服务:全面解读亚马逊的云计算平台与解决方案
云计算·aws
liu_sir_1 小时前
IPTV智慧云桌面,后台服务器搭建笔记
运维·服务器·笔记
Grits1 小时前
VMware Tools工具安装脚本(CentOS & Ubuntu)
linux·ubuntu·centos
aFakeProgramer2 小时前
QEMU 模拟器中运行的 Linux 系统
linux·运维·服务器