Nginx的ngx_http_upstream_module模块和ngx_stream_proxy_module模块

ngx_http_upstream_module模块

ngx_http_upstream_module模块用于定义可由proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass和memcached_pass指令引用的服务器组

1、upstream name { … }

定义后端服务器组,会引入一个新的上下文;Context: http

upstream backend {
    server backend1.example.com weight=5;
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

    server backup1.example.com  backup;
}

2、server address [parameters];

在upstream上下文中server成员,以及相关的参数;

parameters:

  • weight=number:权重,默认为1;
  • max_fails=number:失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用;
  • fail_timeout=time:设置将服务器标记为不可用状态的超时时长;
  • max_conns:当前的服务器的最大并发连接数;
  • backup:将服务器标记为“备用”,即所有服务器均不可用时此服务器才启用;
  • down:标记为“不可用”;

3、least_conn;

最少连接调度算法,当server拥有不同的权重时其为wlc;

4、 ip_hash;

源地址hash调度方法;

5、hash key [consistent];

基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者的组合;当hash $cookie的时候可以基于cookie调度。但是这项是商业版本才提供。

示例:

hash $request_uri consistent;吧对uri的请求绑定在主机上,consistent一致性hash,不加则是取模法
hash $remote_addr;

6、keepalive connections;

为每个worker进程保留的空闲的长连接数量;

示例:
环境:
后端服务器:
192.168.253.129 (提供了web服务,index.html内容为192.168.253.129)
192.168.253.139(提供了web服务,index.html内容为192.168.253.139)
代理服务器:
192.168.253.128

代理服务器的主配置文件

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream backend {
          server 192.168.253.129 weight=2;
          server 192.168.253.139 weight=5;
    }       
    server {
        listen       80;
        server_name  localhost;
        location / {
              proxy_pass http://backend;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

后端两个服务器的权重是2比5,我们可以测试一下
这里写图片描述
这里可以看出7个请求中5个是139,2个是129。

ngx_stream_proxy_module

ngx_stream_proxy_module模块允许nginx基于四层做代理。使用这个模块,需要编译的时候加上–with-stream

1. proxy_pass address;

设置代理服务器的地址。该地址可以指定为域名或IP地址,以及端口

2.proxy_timeout timeout;

在客户端或代理服务器连接上的两次连续读写操作之间设置超时。如果在此时间内没有发送数据,则连接被关闭。默认为10m;

3.proxy_connect_timeout time;

设置nginx与被代理的服务器尝试建立连接的超时时长;默认为60s;

实验内容:用Nginx代理ssh协议。
后端服务器:
192.168.253.129:22端口开启ssh服务
192.168.253.140:22端口开启ssh服务

代理服务器:
192.168.253.128:9222端口接受用户的代理请求

示例:

worker_processes  1;
events {
    worker_connections  1024;
}
stream {
    upstream ssh_server {
        server 192.168.253.129:22;
        server 192.168.253.140:22;
    } 
        server {
            listen 192.168.253.128:9222;
            proxy_pass  ssh_server;
            proxy_timeout 60s;
            proxy_connect_timeout 10s;
        }
}

这里写图片描述
我们ssh向192.168.253.128,登陆上去之后可以发现实际上到了192.168.253.129,说明已经代理成功了。

猜你喜欢

转载自blog.csdn.net/L835311324/article/details/82593367