网站首页 > 精选教程 正文
IP地址映射和nginx的反向代理记录
一、问题描述
在项目中,遇到了这样一个问题:
有四台服务器,分别为:服务器A、服务器B、服务器C,服务器D,他们对应的IP地址举例如下:
服务器A:110.110.110.110
服务器B:120.120.120.120 内网地址:10.10.10.1
服务器C:无外网地址,内网地址为10.10.10.2
服务器D:无外网地址,内网地址为10.10.10.3
他们的关系是服务器B、服务器C、服务器D内网互通,服务器A内网不和他们中的任何一个互通
关系如下图:
问题描述:服务器A有个客户端应用服务需要请求服务器C,再请求服务器C后,服务器C给服务器A返回了服务器B、C、D的内网地址,这个时候呢,服务器A上的客户端拿到这些数据后,回去请求B、C、D的内网地址并建立连接,但是由于服务器A和他们的内网不通,所以服务器报错。
场景描述:项目用了workman的框架,而workman启动后其实分为注册中心regeistor和网关gateway,客户端在连接regieistor后,workman的注册中心回把gateway的地址返回给客户端,客户端拿到这个地址后再去请求gateway,完成连接。
其中regeist的默认端口是1236,gage的默认端口是2300和2301。
一般来说gateway都是监听的ip地址都是内网。之前的服务器A是阿里云,所以内网是通的,但是忽然有一天服务器A变成了国外地址,这个时候内网就不通了。
二、解决方案:iptable+nginx
1、iptable:负责ip映射
在本问题中,在服务器A获得注册中心返回给的内网地址后,在iptable中,将此ip地址的出方向映射到本地的127.0.0.1,方法如下:
iptable 转发
1)、允许内核ip转发
echo 1 > /proc/sys/net/ipv4/ip_forward,重启后失效。要想永久生效,具体百度。
2)、将本机访问x.x.x.x转发到127.0.0.1
iptables -t nat -A OUTPUT -d x.x.x.x -j DNAT --to-destination 127.0.0.1
其中x.x.x.x为从服务器拿到的内网地址。
2、nginx:负责tcp正向代理和tcp反向代理
在建立好iptable后,服务器A的出方向,所有的请求服务器B、C、D的tcp将会映射到请求本地127.0.0.1上,所以,这里需建立本地对应端口的反向代理,也就是把127.0.0.1的请求转发到能与服务器A互通的服务器B上去
由于项目里的连接的都是tcp协议,所以nginx做的是tcp代理。在本问题中,具体做法是:
1)服务器A的反向代理
在nginx.conf中,不要再http块中,加入一下转发:或者建立个tcp.d文件夹,在nginx.conf的最后另起一行:
include tcp.d/*.conf;
然后建立一个xx.conf,内容如下:
stream {
upstream websocket_1236 {
server 120.120.120.120:1236;
}
server {
listen 1236;
proxy_pass websocket_1236;
}
}
以上只是一个端口的,实际上是需要根据返回的端口都加入转发。
2)服务器B的反向代理
服务器B的作用则是将服务器A转发过来的tcp转发到内网地址去,内容类似,只是server的地址变化下
stream {
upstream websocket_1236 {
server 10.10.10.2:1236;
}
server {
listen 1236;
proxy_pass websocket_1236;
}
}
以上为一个块的代码,实际则根据需要代理的ip加入即可。
- 上一篇: Centos7 Harbor企业级镜像管理系统实战
- 下一篇: 防止绕过NGINX直接访问TOMCAT
猜你喜欢
- 2024-09-24 使用 Docker Swarm(集群) 和Docker Stack(堆栈)部署容器化应用
- 2024-09-24 dockerfile定制自己的nginx
- 2024-09-24 容器集群管理工具--k8s部署(三)
- 2024-09-24 防止绕过NGINX直接访问TOMCAT
- 2024-09-24 Centos7 Harbor企业级镜像管理系统实战
- 2024-09-24 Nginx docker 镜像使用
- 2024-09-24 Docker数据卷备份恢复、桥接网络设置
- 2024-09-24 在docker中运行第一个实例Nginx
- 2024-09-24 nginx反向代理实战
- 2024-09-24 K8S中Service使用nginx控制器实现Ingress负载均衡器的一个Demo
你 发表评论:
欢迎- 最近发表
-
- java 服务之间调用(rpc)(java实现服务器)
- Java机器学习库(Java ML)(二、聚类)
- 「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?
- GitHub精选 | 轻量级Android和Java日志库
- Java面试官:MySQL binlog 有什么作用?主从延迟的了解么?
- Excel函数核武器库:50个高频场景公式——第二弹
- Excel函数核武器库:50个高频场景公式——第一弹
- Spring Cache高性能缓存库 - Caffeine简介
- Java通过Kafka Streams库来实现数据流处理
- 一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)