Nginx 从 1.9.0 开始发布 ngx_stream_core_module 模块,该模块支持 tcp 代理及负载均衡。ngx_stream_core_module 模块默认不启用,需要在编译时通过指定--with-stream 参数来激活这个模块。
1. 编译安装 Nginx
下载地址:https://nginx.org/download/。
在编译安装 nginx 之前,要确保 nginx 依赖的一些组件已经安装了。
1.1 检查安装 zlib
rpm -qa | grep zlib
如果未安装,可使用 yum 安装
yum install zlib zlib-devel -y
1.2 检查安装 openssl
rpm -qa | grep openssl
如果未安装,可使用 yum 安装
yum install openssl-devel openssl -y
1.3 检查安装 pcre
rpm -qa | grep pcre
如果未安装,可使用 yum 安装
yum install pcre pcre-devel -y
1.4 安装 nginx
$ tar -zxvf nginx-1.9.15.tar.gz
$ ./configure --prefix=/opt/nginx/ \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre \
--with-stream
$ make
$ make install
编译参数说明
--prefix 指定 nginx 安装路径
--with-http_ssl_module 用于构建一个支持 https 协议的模块,需要 OpenSSL 库,该模块默认不启用
-with-pcre 强制使用 PCRE 库
--with-stream 构建一个支持 TCP/UDP 代理和负载均衡的模块,该模块默认不启用
更多编译参数说明参考 nginx 编译参数详解
2. 配置 http 代理
假设有 3 台主机 node1、node2 和 node3,node1 和 node2 上部署 tomcat,node3 上部署 nginx,如下:
主机名 | IP | 服务 | 安装路径 |
---|---|---|---|
node1 | 192.168.1.101 | tomcat | /opt/tomcat |
node2 | 192.168.1.102 | tomcat | /opt/tomcat |
node3 | 192.168.1.103 | nginx | /opt/nginx |
在 node3 上修改 nginx 配置,vim nginx.conf
,内容如下
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http{
upstream backend{
server 192.168.1.101:8080 weight=7 max_fails=3 fail_timeout=5s;
server 192.168.1.102:8080 weight=3 max_fails=3 fail_timeout=5s;
}
server{
listen 8001;
location /{
proxy_pass http://backend;
}
}
}
配置文件结构说明参考 nginx.conf 详解
其中 upstream
用于配置负载均衡,这里配置了两个服务器做负载均衡,发往 192.168.1.103:8001 的请求会被转发到 node1 和 node2 的 8080 端口。
upstream
负责均衡策略有:轮询(默认),权重 weight,hash 和 ip_hash。上面的配置文件中采用了权重策略。关于 upstream
的详细说明参考 upstream 详解
node1 和 node2 上启动 tomcat,node3 上启动 nginx
/opt/nginx/sbin/nginx
使用浏览器或其它方式访问 http://192.168.1.103:8001 ,观察 tomcat 的访问日志 localhost_access_log,可以看到每次请求都会被转发到 node1 和 node2 的其中一台上。
3. 配置 TCP 代理
修改 node3 上的 nginx 配置文件,vim nginx.conf
,增加如下内容
stream{
upstream ssh {
hash $remote_addr consistent;
server 192.168.1.101:22 weight=5;
}
server{
listen 2233;
proxy_pass ssh;
}
}
stream
块用于配置 TCP 代理,在 upstream
中使用了 hash 作为负责均衡策略,consistent 参数的作用是:指定使用 ketama 一致性哈希方法,该方法确保在向组中添加服务器或从组中删除服务器时,只有少数密钥将重新映射到不同的服务器。这有助于为缓存服务器实现更高的缓存命中率。
重新加载 nginx 配置文件
/opt/nginx/sbin/nginx -s reload
我们来测试一下,使用 ssh 连接 node3,-p
选项指定端口 2233,如下:
ssh -p 2233 wxyuan@node3
最后你会看到,实际连接的主机是 node1
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于