Nginx 配置TCP/UDP端口转发

nginx 的功能非常强大,其中作为代理服务器是非常常用的功能,但是之前的nginx代理只能做七层代理,也就说是基于应用层面的代理,TCP层面的代理一般会配合haproxy 来使用。但是自从nginx 1.9 以后通过stream模块实现了tcp 代理功能,无需其他软件配合即可实现四层代理和七层代理,即:访问该服务器的指定端口,nginx就可以充当端口转发的作用将流量导向另一个服务器,同时获取目标服务器的返回数据并返回给请求者。nginx的TCP代理功能跟nginx的反向代理不同的是:请求该端口的所有流量都会转发到目标服务器,而在反向代理中可以细化哪些请求分发给哪些服务器;另一个不同的是,nginx做TCP代理并不仅仅局限于WEB的URL请求,还可以转发如memcached、MySQL等点到点的请求

环境

ip

主机名

端口

说明

192.168.1.101

node1

3389

nginx服务器

192.168.1.102

node2

~

客户端

8.8.8.8

~

389

目标服务器

1.安装nginx服务

1.1 安装nginx

默认安装stream模块,我写文档时nginx版本为1.14.0

参考:RHEL/CentOS 安装 nginx

1.2 对于已经安装nginx的,检查是否编译时带with-stream参数

[root@node1 ~]# nginx -V |grep with-stream

有with-stream参数,可以代理tcp协议

2 配置nginx的tcp代理

请注意,stream块和http块是两个不同的模块,stream不属于http模块,即不能放到/etc/nginx/conf.d/,stream是通过tcp层转发,而不是http转发。

如配置在http内,启动nginx会报如下错误:

nginx: [emerg] "server" directive is not allowed here

2.1 修改主配置文件,添加stream目录

[root@node1 ~]# cd /etc/nginx/

[root@node1 ~]# cp -a nginx.conf{,_$(date +%F)}

[root@node1 ~]# vim nginx.conf

# 最后追加如下内容

# tcp/ip proxy

include /etc/nginx/tcp.d/*.conf;

2.2 添加tcp转发配置

[root@node1 ~]# mkdir tcp.d

[root@node1 ~]# cd tcp.d

在新建的 tcp.d 目录下创建 conf 文件新建一个 tcp 配置,例如我转发到IP为8.8.8.8的389端口

[root@node1 ~]# vim openldap.conf

stream{

upstream tcpssh{

hash $remote_addr consistent;

server 8.8.8.8:389 max_fails=3 fail_timeout=10s;

}

server{

listen 3389;

proxy_connect_timeout 20s;

proxy_timeout 5m;

proxy_pass tcpssh;

}

}

说明:

"upstream tcpssh":转发的目的地址和端口等设置;其中tcpssh为自定义;

"server":提供转发的服务,即访问localhost:3389,会跳转至代理"tcpssh"指定的转发地址.。

这里就是配置的监听本地3389端口,会将流量相应转发到8.8.8.8服务器的389端口上。

测试配置文件是否正确

[root@node1 ~]# nginx -t -c /etc/nginx/nginx.conf

[root@node1 ~]# nginx -t -c /etc/nginx/tcp.d/openldap.conf

2.3 启动nginx服务

启动nginx服务

[root@node1 ~]# systemctl start nginx.service

查看是否启动

[root@node1 ~]# systemctl status nginx.service

● nginx.service - nginx - high performance web server

Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)

Active: active (running) since Sat 2018-09-29 11:34:01 CST; 5h 37min ago

Docs: http://nginx.org/en/docs/

Main PID: 26114 (nginx)

CGroup: /system.slice/nginx.service

├─26114 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

└─26115 nginx: worker process

Sep 29 11:34:01 node1 systemd[1]: Starting nginx - high performance web server...

Sep 29 11:34:01 node1 systemd[1]: Started nginx - high performance web server.

[root@node1 ~]#

3 客户端配置

3.1 测试连接目标端口:

[root@node2 ~]# telnet 192.168.1.101 3389

Trying 192.168.1.101...

Connected to 192.168.1.101.

Escape character is '^]'.

出现"Connected to 192.168.1.101",说明连接成功

测试完成,"Ctrl+C"结束

3.2 相关业务软件配置

把要连接8.8.8.8:389的配置改为nginx服务器ip(192.168.1.101),及代理端口3389。

如果业务没有出现问题的话,则说明已经配置完成了

END

nginx tcp端口转发_使用Nginx进行TCP/UDP端口转发相关推荐

  1. nginx lua mysql 性能_深入浅出 nginx lua 为什么高性能

    最近很多人问我nginx lua的优势是什么?为什么? 一.同步和异步.阻塞和非阻塞 如果要说清楚这个问题首先要了解:同步和异步.阻塞和非阻塞的关系 同步:php.java的正常代码都是同步执行的 异 ...

  2. 需要额外端口信息_使用Python进行TCP端口扫描

    使用Python进行TCP端口扫描 首先我们供给一台主机,要进行的步骤就是对其主机端口的扫描,查看其中开放的端口. 我们创建一个TCP的全连接的扫描器,使用socket来创建连接器. 扫描端口开放 # ...

  3. 32通过tcp发送数组_【干货】TCP协议详解

    关注我,你的眼睛会怀孕 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的 ...

  4. go 监测tcp 连接断开_优化ngrok的tcp连接

    ngrok支持tcp tunnel和http以及https,但是ngrok的tcp代理似乎优化不够好,当一段时间闲置tcp连接的话,再连接会出现连接不上的问题. 首先来看看ngrok的tcp tunn ...

  5. linux tcp文件分包_畅谈linux下TCP(下)

    三.TCP传输阶段 1 .TCP 包头 先认识一下TCP包头, 常规TCP包头为20个字节. 图一.png 可以通过TCP OPTION 扩展包头内容.TCP OPTION 是一个比较灵活的TLV结构 ...

  6. rtsp端口号_常见网络摄像机(摄像头)的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  7. mysql有多少个端口号_查看mysql端口号(mysql端口号是多少)

    查看mysql端口号(mysql端口号是多少) 2020-05-07 22:11:45 共10个回答 如何查看mysql的端口号 1使用命令showglobalvariableslike'port'; ...

  8. python监听多个udp端口_用Python写一个UDP端口测试工具(一)

    需求 最近有个运维需求,需要测试客户端的UDP端口与服务器的连通性. 需求也很简单:客户端测往服务端发UDP包,服务端收到包后响应客户端,当客户端能收到服务端的响应则可断定端口是可达的.但是客户端需要 ...

  9. linux如何关闭udp端口,如何阻止linux RHEL7中的udp端口范围(How to block udp ports range in linux RHEL7)...

    如何阻止linux RHEL7中的udp端口范围(How to block udp ports range in linux RHEL7) 需要测试使用UDP端口范围从5000到60,000英寸的应用 ...

  10. nginx实现ip端口转发_配置Nginx实现端口转发

    #### 三.更改 Nginx 配置文件实现端口转发 1. 打开第二步中创建的 File Browser 网站([公网ip:端口]()),账号密码为 **admin/admin**,登录到 File ...

最新文章

  1. Go 学习笔记(32)— 类型系统(命名类型、未命名类型、底层类型、类型强制转换、类型别名和新声明类型)
  2. 饥荒计算机丢失xinput1 3.dll,《德军总部:旧血脉》Win8运行提示丢失XINPUT1_3.dll解决方法...
  3. 《Invisible Inc.》游戏分析:如何在回合制中塑造紧张刺激的体验?
  4. Retrofit2源码解析——网络调用流程(下)
  5. 如何查看一个组件的 classid是多少_万一免五(万1免5)是骗人的吗?如何查看自己的交易费率是多少?万一免五最新问题汇总!...
  6. 华为推出全球最快AI训练集群Atlas 900,算力超群
  7. 阿里云泄露 40 家名企源代码!
  8. linux下的 lib文件的学习思考
  9. js正则及常用方法函数总结
  10. ftp同步软件android,[Android ]FTP/SCP/FTPS客户端AndFTP v4.5专业版 开心版
  11. 基于 Openocd 和 FT2232H 的 ARMv8(Coretex-A53)调试
  12. c++ template aliases
  13. 七周成为数据分析师 | 数据分析思维
  14. 查快递单号物流信息查询,支持多家快递
  15. 6.process.nextTick()
  16. 一步步学习SPD2010--第一章节--探索SPD2010(4)--使用SharePoint Designer创建站点
  17. 图中的搜索——dij
  18. 突破常规限制运行asp木马(转)
  19. Android TV开发(—)开始电视应用
  20. [uboot] (第一章)uboot流程——概述

热门文章

  1. 深度剖析E680G应用二.MPKG
  2. LaTex 打英文音标方法
  3. roseha for linux,ROSEHA for linux安装与操作文档
  4. excel使用教程_有哪些超好用、高质量的Excel学习网站?
  5. 从零开始学习java一般需要多长时间?
  6. shark恒破解笔记6-摆脱NAG
  7. 机器人弹性伸缩算法-专利技术交底书
  8. iOS开发-Xcode8兼容iOS7手记
  9. T分布和T检验的理解,Python代码实现T检验的计算
  10. 计算机毕业设计ssm+vue基本微信小程序的购物商城系统