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,说明已经代理成功了。