
反向代理 B,ip 为 B_ip ,监听端口为固定的 443
后端 C,ip 为 C_ip ,监听端口为固定的 443
以一条反向代理连接为例,链路为:
A_ip: A_random_port ----- B_ip:443 ----- B_ip:B_random_port ---- C_ip:443
A:A_random_port ---- B1:443 ---- B2:B_random_port ---- C:443
B1 和B2 ip 相同,监听的端口不同
B1 监听固定端口443,B2监听的是一个随机端口
具体一点:
192.168.1.101:12345 <----> 192.168.1.102:443 <---->192.168.1.102:45678 <--->192.168.1.103:443
A是纯粹的客户端 ;B既作为A的服务端,又作为C的客户端;C纯粹的服务端。
B 作为 C的客户端,发起socket连接时,会向反向代理服务器内核申请注册一个空闲的随机端口。
A:A_random_port ---- B1:443 和 B2:B_random_port ---- C:443 这两段链路socket好理解。
但是 B1:443 ---- B2:B_random_port 这段链路 nginx反向代理 是怎么实现的?
对nginx来说就是同一块内存,后面的链接的直接从前面那段链接的结尾的内存地址开始读。
首先上下游都建立好tcp链接,然后上游收到一个报文后会把报文头去掉,把payload临时存到一个地方,然后有个指针指向该内存,接着就会构筑往后发送的报文头,从该指针获取内容,拼接成一个往后发的报文,然后发出去。
nginx中两个模块有proxy_pass指令,用于反向代理配置项,分别是:
ngx_http_proxy_module
ngx_stream_proxy_module
ngx_http_upstream_module
nginx + keepalived,实现反向代理的高可用
用户公网IP:随机端口 ----> www.example.com:20080----(NAT)-- >outer_nginx_vip:20080 ---->nginx01_ip:随机端口 ----->upstream:20080
跟没有vip 的代理链路比,outer_nginx_vip:20080 ---->nginx01_ip:随机端口 这段链路ip有了变更,跟后端交互时并不是使用物理nginx01_ip,而是使用虚拟的outer_nginx_vip,这跟keepalived的网络实现有关,当然此处outer_nginx_vip 和nginx01_ip 是同一个mac地址。
tcp四次挥手状态 TIME_WAIT
https://www.jianshu.com/p/3658730d76d7
How to view and edit the ephemeral port range on Linux?
https://stackoverflow.com/questions/28573390/how-to-view-and-edit-the-ephemeral-port-range-on-linux
nginx使用proxy_bind负载tcp socket,解决代理端口耗尽
https://b.sundayle.com/nginx-proxy-65535-port
如何解决使用nginx作为反向代理端口耗尽问题?
https://blog.csdn.net/michaelwoshi/article/details/120170134
Overcoming Ephemeral Port Exhaustion in NGINX and NGINX Plus
https://www.nginx.com/blog/overcoming-ephemeral-port-exhaustion-nginx-plus
1、在squid.conf里面查看端口号,如http_port 31282、打开防火墙相应的端口
1)# vi /etc/sysconfig/iptables ← 编辑防火墙配置文件
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT ← 添加这一行,开放3128号端口,允许squid
2)# /etc/rc.d/init.d/iptables restart ← 重新启动防火墙,使设置生效
>192.168.1.1001.开启转发功能:vi /etc/sysctl.confnet.ipv4.ipforward = 1
sysctl -p
2.防火墙:iptables -t nat -A PREROUTING -d 192.168.1.100 -p tcp --dport 8889 -j DNAT --to-destination 192.168.1.200:8999(-p 这里认为服务是tcp协议的)
>192.168.1.200
iptables -t nat -A POSTROUTING -s 192.168.1.200 -p tcp --sport 8889 -j SNAT --to-source 192.168.1.100:8999(认为是tcp协议,回包端口为8999)
*** 作系统使用centos6.3
另外使用反向代理也可实现
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)