nginx/java tcp反向代理

ningyougang 2015-03-13 03:22:20
1.需求:用户通过公网IP:port 这个入口,能够访问到自己虚拟机(提供内网IP):22端口。
2.实现限制:由于公网ip有限,用户访问量较大,不可能给每个用户分配一个ip或端口。所以考虑通过域名的方式来区分不同的用户
3.参考方案:给每个用户提供一个二级域名,如userA.XXX.com、userB.XXX.com;然后通过ipables做端口映射,
将所有*.XXX.com:10099的tcp请求转发到myProxy:10098这个代理服务器,代理服务器然后根据每个用户的域名,再反向代理到自己的虚拟机IP:22端口。
4.实现:在具体的实施过程中,发现nginx可以做tcp反向代理(nginx本身不具备,需要装nginx_tcp_proxy_module第三方模块),这个链路是通的(公网IP:10099->反向代理服务器:10099->虚拟机IP:22),但是tcp反向代理服务器无法通过不同的二级域名来智能路由到不同的虚拟机(备注:利用nginx的http反向代理是可以根据域名来做请求转发的)。看大伙怎么考虑这个问题,畅所欲言,不一定非要用nginx。
下面是tcp反向代理的nginx.conf部分配置
tcp {
upstream chatCluster{
# simple round-robin
server 192.168.202.249:10098;
#server 127.0.0.1:1234;
check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 10098;
proxy_pass chatCluster;
}
}
在帖下http反向代理,根据不同的二级域名做路由转发
server
{
listen 10000;
server_name *.newtouch.cn;
if ($http_host ~* "^(.*?)\.newtouch\.cn:10001$") {
set $domain $1;
}
location / {
if ($domain ~* "test1") {
proxy_pass http://www.baidu.com;
}
if ($domain ~* "test2") {
proxy_pass http://www.sohu.com;
}
proxy_pass http://www.sohu.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
...全文
1352 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningyougang 2015-03-19
  • 打赏
  • 举报
回复
我ssh反向代理没有找到相关的方案。 你这种方法貌似是http的。但是我这里需要做ssh的反向代理。 我想在底层tcp来解决,但是tcp报文头不支持host。所以不行。
__威少__ 2015-03-16
  • 打赏
  • 举报
回复
访问你的公网IP,把用户名当作参数,再通过用户名进行转发不可以吗 10.XXX.XXX.XXX/?username=

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧