Nginx代理,负载均衡,负载均衡部署Django项目,四层负载均衡

Nginx代理

代理一词往往并不陌生。可以理解为中介,比如在生活中我们处理法律问题、房产交易都会请专业人士代为处理。从网络角度讲,就是为事务参与双方提供连接通道的第三方网络服务器。在没有代理的模式的情况下,都是客户端直接请求的服务端,在实际的情况下,为了安全,客户端往往无法直接向服务端发起请求,就需要用到代理服务,来实现通信。

  • nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器。同时也是一个IMAP、POP3、SMTP代理服务器。nginx可以作为一个HTTP服务器进行网站的发布处理,同时nginx可以作为反向代理进行负载均衡的实现。

代理的模式

  • 1、正向代理(VPN)

    找完代理之后,还需要找服务器

    用于内部上网,客户端 <----> 代理 ----> 服务端

    • 正向代理是指对客户端提供的代理服务,在客户端无法直接访问原始服务器的情况下,通过配置代理服务器的方式,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。

bdd57

  • 2、反向代理(负载均衡)

    只需要找代理,不需要服务器。

    用于公司的集群架构中,客户端 ----> 代理 <----> 服务端

    • 反向代理是指对服务端提供的代理服务,反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

3099a7

区别:

正向代理代理客户端,服务端认为请求来自代理服务器;反向代理代理服务端,客户端认为提供服务的是代理服务器。
正向代理通常由客户端架设,与客户端同处一个局域网;反向代理由服务端架设,与服务端同处一个局域网。
正向代理通常解决访问限制的问题,反向代理通常解决对外服务和负载均衡的问题。

Nginx代理服务支持的协议

ngx_http_uwsgi_module		: Python
ngx_http_fastcgi_module		: PHP 
ngx_http_scgi_module		: Java
ngx_http_v2_module			: Golang
ngx_http_proxy_module		: HTTP
反向代理模式 Nginx配置模块
uwsgi(Python) ngx_http_uwsgi_module
fastcgi(PHP) ngx_http_fastcgi_module
grpc(Golang) ngx_http_v2_module
scgi(Java) ngx_http_scgi_module
proxy(http,https,websocket) ngx_http_proxy_module

Nginx反向代理实践

lb01  --->  web01
lb01:192.168.15.5
web01:192.168.15.8
以超级玛丽小游戏为例

1、部署web01

[root@web01 ~]#  vim /etc/nginx/conf.d/ game5.conf 
server {
    listen 80;
    server_name 192.168.15.8;
    location / {
        root /opt/Super_Marie;
	index index.html;
    }
    location ~ /images {
        root /opt/image;
    }
}

2、部署lb01

  • 编译安装nginx
# 下载Nginx源代码包

[root@lb01 ~]# wget https://nginx.org/download/nginx-1.20.2.tar.gz

# 解压
[root@lb01 ~]# tar -xf nginx-1.20.2.tar.gz

# 进入源代码目录
[root@lb01 ~]# cd nginx-1.20.2

# 安装依赖包
[root@lb01 nginx-1.20.2]# yum install openssl openssl-devel zlib zlib-devel -y

# 设置编译参数
[root@lb01 nginx-1.20.2]# ./configure  --with-http_gzip_static_module  --with-stream  --with-http_ssl_module  --with-http_sub_module

# 编译
[root@lb01 nginx-1.20.2]# make 

# 安装
[root@lb01 nginx-1.20.2]# make install 
  • nginx编译安装优化
# 切换至安装路径
[root@lb01 nginx-1.20.2]# cd /usr/local/nginx/

# 创建/etc/nginx目录
[root@lb01 nginx]# mkdir /etc/nginx

# 移动nginx配置文件至/etc/nginx/
[root@lb01 nginx]# mv /usr/local/nginx/conf/* /etc/nginx/
[root@lb01 nginx]# cd /etc/nginx/

# 创建/etc/nginx/conf.d
[root@lb01 nginx]# mkdir /etc/nginx/conf.d

# 清空配置文件内容
[root@lb01 nginx]# >nginx.conf

# 编辑配置文件
[root@lb01 nginx]# vim /etc/nginx/nginx.conf

# 将下方内容复制粘贴进去
user  www;
worker_processes  10;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format json '{"@timestamp":"$time_iso8601",'
                    '"host":"$server_addr",'
                    '"service":"nginxTest",'
                    '"trace":"$upstream_http_ctx_transaction_id",'
                    '"log":"log",'
                    '"clientip":"$remote_addr",'
                    '"remote_user":"$remote_user",'
                    '"request":"$request",'
                    '"http_user_agent":"$http_user_agent",'
                    '"size":$body_bytes_sent,'
                    '"responsetime":$request_time,'
                    '"upstreamtime":"$upstream_response_time",'
                    '"upstreamhost":"$upstream_addr",'
                    '"http_host":"$host",'
                    '"url":"$uri",'
                    '"domain":"$host",'
                    '"xff":"$http_x_forwarded_for",'
                    '"referer":"$http_referer",'
                    '"status":"$status"}';
    access_log /var/log/nginx/access.log json;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
# :wq! 保存退出

# 创建用户
[root@lb01 nginx]# groupadd www -g 666
[root@lb01 nginx]# useradd www -u 666 -g 666 -M -r -s /sbin/nologin

[root@lb01 nginx]# vim /usr/lib/systemd/system/nginx.service
# 下方内容复制粘贴进去
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target

# 继续优化
[root@lb01 nginx]# cd /usr/local/nginx/sbin/
[root@lb01 sbin]# mv /usr/local/nginx/sbin/nginx /usr/sbin/
[root@lb01 sbin]# mkdir /var/log/nginx
[root@lb01 sbin]# systemctl start nginx 

# 可以看出无法正常显示
[root@lb01 sbin]# nginx -t
 nginx: [emerg] open() "/usr/local/nginx/conf/nginx.conf" failed (2: No such file or directory)
 nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

# 这样可以正常显示,但是比较麻烦
[root@lb01 sbin]# nginx -t -c /etc/nginx/nginx.conf    
    
# 建立软链接进行优化
[root@lb01 sbin]# ln -s /etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
    
# 可以正常显示    
[root@lb01 sbin]# nginx -t
 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

  • 部署反向代理
    • proxy_pass:设置代理服务器的地址,可以是主机名称、IP地址加端口号等形式。
[root@lb01 conf.d]# cat /etc/nginx/conf.d/game.conf 
server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://192.168.15.8:80;
    }
}

#检查配置文件
[root@lb01 ~]# nginx -t
 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
 nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

#重载配置文件
[root@lb01 ~]# nginx -s reload		

# 测试
 浏览器访问:192.168.15.5

image-20220107173331323

Nginx代理常用参数

1、添加请求头信息发往后端服务器

Syntax:    proxy_set_header field value;   #将value的值赋值给field字段
Default:    proxy_set_header Host $http_host;
            proxy_set_header Connection close;
Context:    http, server, location

示例配置:在lb01配置 /etc/nginx/conf.d/game.conf
# 传递域名给后端服务器,不设置此项,默认传递ip给后端服务器。
# 用户请求的时候HOST的值是linux.proxy.com, 那么代理服务会像后端传递请求的还是linux.proxy.com
proxy_set_header Host $http_host;

# 最后一层代理的IP地址。多层代理会覆盖,只显示最后一层代理IP地址。
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;

# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址。多层代理会追加。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

测试:
# 在web01监控下nginx日志
[root@web01 ~]# tail -f /var/log/nginx/access.log

# 浏览器访问代理服务器地址
192.168.15.5

# 查看日志变化

2、代理到后端的TCP连接、响应、返回等超时时间

#nginx代理服务器与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
 
#nginx代理服务器等待后端服务器响应的超时时间
Syntax:    proxy_read_timeout time;
Default:    proxy_read_timeout 60s;
Context:    http, server, location
 
#后端服务器数据回传给nginx代理服务器超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

# 配置示例:
proxy_connect_timeout 1s;
proxy_read_timeout 3s;
proxy_send_timeout 3s;

3、proxy_buffer代理缓冲区

#开启内容缓冲,nignx会把后端返回的内容先放到缓冲区当中,
#然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
 
#设置nginx代理保存用户头信息的缓冲区大小,
#这个参数并不受proxy_buffering开启或关闭的影响,它始终都是生效的。
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
 
#响应缓冲区的个数和大小,响应内容先写入缓冲区,写满或者写完,立即发送给客户端。
#这里设置的缓冲区大小是针对每个请求连接而言的。
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location

# 配置示例
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 96k;

4、配置代理优化文件

1.创建代理优化文件
[root@lb01 sbin]# cd /etc/nginx/
[root@lb01 nginx]# vim proxy_params
#将下方内容复制粘贴进去即可
proxy_set_header Host $http_host;  #传递ip给被代理(后端)服务器
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 10s;  #nginx服务器与被代理(后端)服务器建立连接的超时时间(默认60秒)
proxy_read_timeout 10s;     #连接成功后,被代理(后端)服务器响应时间(代理接收超时)
proxy_send_timeout 10s;     #被代理(后端)服务器数据回传时间(代理发送超时)
proxy_buffering on;         #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 8k;       #高负荷下缓冲大小(proxy_buffers*2)
proxy_buffers 8 8k;         #缓冲区,网页平均在32k以下的话,这样设置

# 下方可以选择性配置
proxy_temp_file_write_size 8k;   #设定缓存文件夹大小,大于这个值,将从upstream服务器传
client_max_body_size       8k;   #允许客户端请求的最大单文件字节数
client_body_buffer_size    8k;   #缓冲区代理缓冲用户端请求的最大字节数


2.添加配置
[root@lb01 ~]# cat /etc/nginx/game.conf
server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://172.16.1.7:80;
        include /etc/nginx/proxy_params;  #只需要添加代理优化文件路径即可
    }
}

3.重载nginx即可
[root@lb01 nginx]# nginx -t
[root@lb01 nginx]# nginx -s reload


4.测试(该小游戏无法测试到超时,后面可以用python项目测试)
# 在web01监控下nginx的日志
[root@web01 ~]# tail -f /var/log/nginx/access.log

# 浏览器访问代理服务器地址
192.168.15.5

# 在web01查看日志可以发现"xff":"192.168.15.1"记录到了真实的IP地址,说明设置生效了
{"@timestamp":"2022-01-07T19:51:00+08:00",
 "host":"192.168.15.8","service":"nginxTest","trace":"-","log":"log",
 "clientip":"192.168.15.5","remote_user":"-","request":"GET /sounds/stomp.mp3 HTTP/1.0",
  "http_user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
  "size":555,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-",
  "http_host":"192.168.15.5","url":"/sounds/stomp.mp3","domain":"192.168.15.5",
   "xff":"192.168.15.1","referer":"http://192.168.15.5/","status":"404"
}

负载均衡

  • 上面我们介绍了 Nginx 一个很重要的功能——代理,包括正向代理和反向代理。这两个代理的核心区别是:正向代理代理的是客户端,而反向代理代理的是服务器。其中我们又重点介绍了反向代理,以及如何通过 Nginx 来实现反向代理。那么了解了Nginx的反向代理之后,我们要通过Nginx的反向代理实现另一个重要功能——负载均衡。

    为什么要用负载均衡?

  • 负载均衡是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

负载均衡的架构

通过代理将流量按照一定的比例,转发到后端。

fuzaijunheng

负载均衡的实现

1、实现

将后端服务打包成一个IP连接池。

1、反向代理
server {
   	listen 80;
   	server_name _;
   	location / {
        proxy_pass http://[连接池];
   	}
}

2、IP连接池
upstream [连接池名称] {
    server [ip]:[port];
    server [ip]:[port];
    server [ip]:[port];
}


3、配置
[root@lb01 conf.d]# cat game.conf 
upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;  #反向代理IP连接池
        include /etc/nginx/proxy_params;
    }
}

2、负载均衡的比例

2.1、轮询

  • 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    • 客户端发送一条请求,第一条请求转发给了web1服务器处理,下一条请求则会转发给web2 ,如果再有一条请求来,则发给web3,还有一条请求来则又给web1,最后的结果则是web1、web2、web3、web1实现了轮询访问
# 默认情况下,Nginx负载均衡的轮询状态。
upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

2.2、权重

  • Nginx中的weight权重,默认为1,weight越大,负载的权重就越大,表示访问几率越大,用于后端服务器性能不均的情况
# 权重0-100,数字越大,权重越高,流量也就最多。
upstream supermarie {
    server 172.16.1.7:80 weight=9;
    server 172.16.1.8:80 weight=5;
    server 172.16.1.9:80 weight=1;
}

2.3、ip_hash

  • nginx提供的ip_hash策略。既能满足每个用户请求到同一台服务器,又能满足不同用户之间负载均衡。
    • 通过客户端请求ip进行hash,再通过hash值选择后端server(每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题)
# 每一个IP固定访问某一个后端。
upstream supermarie {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
    ip_hash;
}

3、负载均衡后端状态

状态 概述
down 表示当前的Web Server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后, 服务暂停时间

3.1、down

# 暂时不分配流量
upstream supermarie {
    server 172.16.1.7:80 down;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;
        include /etc/nginx/proxy_params;
    }
}

3.2、backup

# 只有当所有的机器全部宕机,才能启动。
upstream supermarie {
    server 172.16.1.7:80 backup;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;
        include /etc/nginx/proxy_params;
    }
}

3.3、max_fails、fail_timeout

server IP:端口 max_fails=3 fail_timeout=3s
# 允许请求失败3次,失败后服务暂停3秒。max_fails 和 fail_timeout 两个必须一起使用。
# proxy_next_upstream 后端错误标识

[root@lb01 ~]# cat /etc/nginx/conf.d/game.conf 
upstream supermarie {
    server 172.16.1.7:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.8:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.9:80 max_fails=3 fail_timeout=3s;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://supermarie;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404; 
        include /etc/nginx/proxy_params;
    }
}

注意:proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; 

error             # 与服务器建立连接,向其传递请求或读取响应头时发生错误;
timeout           # 在与服务器建立连接,向其传递请求或读取响应头时发生超时;
invalid_header    # 服务器返回空的或无效的响应;
http_500          # 服务器返回代码为500的响应;
http_502          # 服务器返回代码为502的响应;
http_503          # 服务器返回代码为503的响应;
http_504          # 服务器返回代码504的响应;
http_403          # 服务器返回代码为403的响应;
http_404          # 服务器返回代码为404的响应;
http_429          # 服务器返回代码为429的响应(1.11.13);
non_idempotent    # 通常,请求与 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 启用此选项显式允许重试此类请求;
off               # 禁用将请求传递给下一个服务器。

负载均衡部署BBS

1、部署后端服务

1、部署Python

1、创建用户
[root@web01 opt]# groupadd django -g 888
[root@web01 opt]# useradd django -u 888 -g 888 -r -M -s /bin/sh

2、安装依赖软件
[root@web01 opt]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y

2、部署Django和uwsgi

3、安装Django和uwsgi
[root@web01 opt]# pip3 install django==1.11
[root@web01 opt]# pip3 install uwsgi

# 根据需求安装相应缺少模块
[root@web01 opt]# pip3 install pymysql

4、创建项目
[root@web01 opt]# unzip bbs.zip 
[root@web03 bbs]# pwd
/opt/bbs
[root@web03 bbs]# vim bbs/settings.py 
ALLOWED_HOSTS = ['*'] 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bbs',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '172.16.1.61',
        'PORT': 3306,
        'CHARSET': 'utf8'
    }
}

# 启动测试
[root@web01 bbs]# python3 manage.py runserver 0.0.0.0:8000

3、配置并启动

5、编辑项目配置文件
[root@web01 ~]# cat /opt/bbs/myweb_uwsgi.ini 
[uwsgi]
# 端口号
socket = :8000
# 指定项目的目录
chdir = /opt/bbs
# wsgi文件路径
wsgi-file = bbs/wsgi.py
# 模块wsgi路径
module = bbs.wsgi
# 是否开启master进程
master = true
# 工作进程的最大数目
processes = 4
# 结束后是否清理文件
vacuum = true

6、启动uwsgi
[root@web01 bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666

-d 	  : 以守护进程方式运行
--ini : 指定配置文件路径
--uid : 指定uid

7、编辑Nginx配置文件
[root@web01 ~]# cat /etc/nginx/conf.d/python.conf 
server {
    listen 80;
    server_name py.test.com;
    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 2;
        uwsgi_param UWSGI_SCRIPT bbs.wsgi;
        uwsgi_param UWSGI_CHDIR /opt/bbs;
        index  index.html index.htm;
        client_max_body_size 35m;
    }
}

8、重启Nginx配置
[root@web01 ~]# systemctl restart nginx

2、部署负载均衡

[root@lb01 ~]# cat /etc/nginx/conf.d/test.conf  
upstream bbs {
    server 172.16.1.7:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.8:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.9:80 max_fails=3 fail_timeout=3s;
}

server {
    listen 80;
    server_name bbs.test.com;
    location / {
        proxy_pass http://bbs;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404; 
        include /etc/nginx/proxy_params;
    }
}

# 测试重载nginx
[root@lb01 ~]# nginx -t
[root@lb01 ~]# systemctl restart nginx


# 测试
# 如果访问不到,说明访问web的nginx配置为默认的配置可以在web内禁用掉默认配置
[root@web01 ~]# mv /etc/nginx/conf.d/default.conf default.conf.bak
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl restart nginx


浏览器输入:bbs.test.com

四层负载均衡

  • 1、四层 +七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalived。
  • 2、tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
  • 3、四层可以做:
    • mysql读从库的负载均衡
    • 跳板机的端口映射
假设有三台MySQL数据库,请问怎样负载均衡?

在非HTTP协议的情况下,采用的四层负载均衡的方式负载服务。

注意:四层负载均衡中不支持域名。

四层负载均衡配置

  • 配置四层负载均衡nginx必须有--with-stream模块,之前已经装过了
# 四层负载均衡stream模块跟http模块同级别,不能配置在http里面
[root@lb01 ~]# vim /etc/nginx/nginx.conf

user  www;
worker_processes  10;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

# 配置四层负载均衡stream
stream {
    include /etc/nginx/stream/*.conf;
}

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
# ......略



# 切换到nginx目录
[root@lb01 nginx]# pwd
 /etc/nginx
 
# 创建切换到stream目录
[root@lb01 nginx]# mkdir stream
[root@lb01 nginx]# cd stream

# 新建编辑stream配置文件
[root@lb01 stream]# vim mysql.conf

#注意:四层负载均衡中不支持域名。没有server_name
server {
    listen 3306;
    proxy_pass 192.168.15.61:3306;
}
# 重启nginx
[root@lb01 stream]# nginx -t
[root@lb01 stream]# systemctl restart nginx

# 测试:成功利用nginx负载均衡转发
[root@db01 ~]# mysql -h192.168.15.5 -uroot -p123456
 MariaDB [(none)]>

案例:使用四层负载均衡实现SSH的代理,端口为1122

# 配置文件
[root@lb01 stream]# cat ssh.conf 
server {
    listen 1122;
    proxy_pass 172.16.1.5:22;
}
# 查看端口
[root@lb01 stream]# netstart -nutlp

# 重启nginx
[root@lb01 stream]# nginx -t
[root@lb01 stream]# systemctl restart nginx

# 测试在web02登录
[root@web02 ~]# ssh root@192.168.15.5 -p1122

 root@192.168.15.5's password:

[root@lb01 ~]# 
posted @ 2022-01-08 20:35  山风有耳  阅读(284)  评论(0编辑  收藏  举报