Nginx配置四层、七层网络代理转发(踩坑)

admin 2024年2月10日12:49:18评论12 views字数 1390阅读4分38秒阅读模式

写在前面

最近工作中有个需求,三个网络区域A、B、C。A可以和B互通,A与C不互通,B与C互通。现在需要从A区域发送数据到C区域固定地址。显而易见,搭建一个网络代理就可以了。

但是又有两种请求,一种是加密的七层GRPC协议的数据,一种是七层HTTP请求的数据。研究之后,GRPC协议的数据需要做四层透明代理转发到目的地址,HTTP就正常走七层转发。于是决定使用Nginx来满足需求。

GRPC四层代理配置

首先GPRC协议是一个基于HTTP2的七层协议,所以它是需要证书加解密的。客户端加密,服务端解密,所以在传输过程中我并不需要做什么操作,直接让数据传递过去就行了,仅仅是提供一个网络隧道。

(这里之前踩了坑,一直想通过配置GRPC协议来进行转发,实际上压根没必要)

所以,这种场景下,只需要提供一个四层的透明代理就可以了,只要让它经过代理送到目的地就行了。

在Nginx的配置文件中,与http同级别做如下配置

stream {    log_format  proxy '$remote_addr -  [$time_local]  $status $protocol "$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;    #调用日志,使用proxy格式    access_log /var/log/nginx/tcp_proxy.log proxy;    upstream grpcservers {            server ip1:port;            server ip2:port;        }        server {            listen 12345;            proxy_pass grpcservers;        }}http {  ...}

结构大概如上,如果没有http需求可以直接删掉,写出来只是为了表达与http同级别。

stream就是配置四层代理的,在例子中我通过upstream来定义多个目的server用来达到负载均衡的效果。然后在下面的server中监听了12345端口,同时通过proxy_pass指向了转发目的地址即上述的upstream的内容。

如此一来,所有发向该Nginx IP 12345端口的数据都会被转发到对应的地址,即完成了四层透明代理。

HTTP七层代理配置

七层的就相对简单多了,直接在http中添加即可

http{  ...      server {            listen 80;            server_name test.example.com;            location / {                proxy_pass http://test.target.com ;            }      }  ...}

如上配置,监听了80端口,同时设置了server_name,这代表来源请求Host为test.example.com的都会走下面的这层location跳转,即代理到http://test.target.com这个地址,并包含路由path。

例如:A区域的机器请求到B中的该Nginx,请求内容为GET一下http://test.target.com/admin/test ,那么相应的,经过Nginx代理之后变为http://test.target.com/admin/test

最后

本篇文章主要涉及Nginx的一些代理使用,来源于工作时,设计的一个方案中碰到的一个跨网数据传输的问题,上述方法已经满足需求。

END

原文始发于微信公众号(飞羽技术工坊):Nginx配置四层、七层网络代理转发(踩坑)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月10日12:49:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Nginx配置四层、七层网络代理转发(踩坑)https://cn-sec.com/archives/2227898.html

发表评论

匿名网友 填写信息