nginx学习笔记(3):TCP反向代理基本配置
一般来说,反向代理方式是指用代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。
充当反向代理服务器也是 nginx 的一种常见用法,但一直以来,nginx 并不支持 TCP 协议,从1.90版本起,nginx 增加了 stream 模块用于一般的 TCP 代理和负载均衡。
新增的 ngx_stream_core_module 模块并不会默认安装,需要在编译时通过指定 –with-stream 参数来激活这个模块。
即编译安装nginx时,进入nginx-x.x.x目录后执行以下命令:
./configure --with-stream
make
make install
安装完毕后,只用对nginx.conf稍作简单的配置就可以实现TCP反向代理了。
官方配置示例如下:
worker_processes auto;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
stream {
# upstream 块
# upstream 块定义了一个上游服务器的集群,便于反向代理中的 proxy_pass 使用
upstream backend {
# 使用一致性hash算法,根据客户端ip映射到合适的节点
hash $remote_addr consistent;
# server 配置项
# server 配置项指定了一台上游服务器的名字,这个名字可以是域名、IP地址端口、UNIX句柄等
# 其后还可以跟参数 weight、max_fails等
server backend1.example.com:12345 weight=5;
server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
upstream dns {
server 192.168.0.1:53535;
server dns.example.com:53;
}
# server 块中的配置项
# listen:监听指定端口
# proxy_pass:将TCP连接及数据收发转向到指定上游服务器
# proxy_timeout:距离上一次成功访问(连接或读写)上游服务器的时间超过了指定时间就判定为超时,断开此连接
# proxy_connect_timeout:nginx连接上游服务器超时的时间
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
server {
listen 127.0.0.1:53 udp;
proxy_responses 1;
proxy_timeout 20s;
proxy_pass dns;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
}
应用场景:处于网络A的回射客户端和处于网络B的回射服务端,经由nginx代理转发,实现跨网段通信(nginx所在主机可分别与网络A、网络B连通)。
(1)回射客户端:
客户端的IP地址:
客户端将要连接的地址:
(2)回射服务端:
服务端的IP地址:
服务端绑定一个任意地址:
(3)nginx的配置:
nginx所在机器的IP地址:
nginx反向代理配置:
这个配置表示,当客户端使用 TCP 时,若访问到 nginx 服务器的5555端口时,就会将其转交给上游服务器的3333端口(这里的上游服务器也就是回射服务端)。
(4)测试结果:
启动nginx以及回射服务端、客户端:
可以看到,客户端能够成功接收到服务端回射的消息:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 获取从数据库中查找出来的第N行第N列的值
- 下一篇: 【Nginx】基于TCP的反向代理