nginx实现TCP转发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx实现TCP转发相关的知识,希望对你有一定的参考价值。
参考技术A 需要在服务器上实现个TCP服务器, 由于已安装了nginx, 所以在nginx中给TCP开个口子。网上文章的说法都是, 1.9.0版之后nginx开始具有TCP/UDP的代理转发功能, 但需要手动安装stream模块.
我用 nginx -V 命令(注意V是大写, 可查询nginx已安装模块)查了一下, 我的nginx是1.16.0版本, 并且已经安装了stream模块(命令输出包含 --with-stream ), 所以我就不用手动安装了.
首先要明确的一点, 关于TCP转发的配置, 是TCP层面的, 它和HTTP是同一层级, 并不是HTTP的下层.
所以其配置项目要放在nginx的顶级配置文件( /etc/nginx/nginx.conf )的顶级块里面, 和顶级配置文件中的http块同属一个层级. 注意不能放在 conf.d 文件夹下, 这个文件夹下的配置文件都在http块级以下.
在顶级配置文件( /etc/nginx/nginx.conf )中添加如下配置块:
实现, 监听8998端口, 转发8999端口(服务器上的程序实现TCP server在8999端口).
nginx -t 检查一下配置文件,
nginx -s reload 重新加载配置, 即可!
UDP的转发类似, 我这次的应用不需要, 也就没有测试试验, 不过先记录在此.
配置块如下:
使用nginx实现基于tcp协议的https协议多域名指向的分别转发功能
零、环境
os:centos8 阿里云
kernel:Linux ${hostname} 4.18.0-80.11.2.el8_0.x86_64 #1 SMP ${time} x86_64 x86_64 x86_64 GNU/Linux
nginx:nginx-1.17.5
一、编译安装nginx
由于nginx插件参数众多,建议编译安装
安装过程见https://www.cnblogs.com/mangoVic/p/8359864.html
注意须装插件--with-stream 和 --with-stream_ssl_preread_module
二、配置
现有两个不同目的地的https协议的域名,使用一个nginx进行转发,一个域名是xxxxxx.com,另一个是yyyyyy.com
map $ssl_preread_server_name $backend_pool { xxxxxx.com xxx; yyyyyy.com yyy; } upstream xxx{ server xxxxxx.com:443; } upstream yyy{ server yyyyyy.com:443; } server { listen 443; ssl_preread on; resolver 8.8.8.8; proxy_pass $backend_pool; proxy_connect_timeout 15s; proxy_timeout 15s; proxy_next_upstream_timeout 15s; error_log /var/log/nginx/error-tcp_xxxxxx-yyyyyy.com.log info; access_log /var/log/nginx/access-tcp_xxxxxx-yyyyyy.com.log proxy; }
三、格式测试
nginx -t
nginx
四、配置host
客户端需要将域名指向到转发机
#vi /etc/hosts 111.111.111.111 xxxxxx.com 111.111.111.111 yyyyyy.com
五、连通性测试
telnet proxy 443
六、客户端直接访问域名
curl https://xxxxxx.com
以上是关于nginx实现TCP转发的主要内容,如果未能解决你的问题,请参考以下文章
Nginx配置TCP转发+http转发+keepalived高可用