nginx可不可以做端口跳转?

2013-01-15 22:09:00 +08:00
 dhq314
例如访问 http://test:1234/ 会自动跳到 http://test/
13012 次点击
所在节点    NGINX
35 条回复
dallaslu
2013-01-27 02:11:31 +08:00
让nodejs监听127.0.0.1:1234

Nginx:

server{
listen 外部ip:1234;
rewrite ^(.*) http://域名或IP$1 permanent;
}
server{
listen 80;
location / {
proxy_pass http://127.0.0.1:1234/;
}
}
eric_zyh
2013-01-27 15:54:34 +08:00
nodejs开1234端口'nginx80端口
验证是合法html请求就反向代理nginx
不合法就其他处理
BigZ
2013-01-27 20:18:14 +08:00
楼主,你是指 浏览器的地址跳转,还是指内容的跳转
linchanx
2013-01-28 15:17:42 +08:00
这个需要路由器来做,把外网地址的80端口和内网地址的1234做静态映射就可以了,当然如果你没法控制到路由器就不知道了。。
linchanx
2013-01-28 15:32:16 +08:00
@dhq314 具体到如果你是用cisco的设备
ip nat inside source static tcp 内网地址 1234 外网地址 80
这样在外网访问80端口时,路由器就转发到内网服务器的1234端口
fanwei
2013-01-28 15:55:32 +08:00
楼主是这个意思吧!
nodejs服务开了多个进程,监听了8001,8002,8003。。。。。。
然后,nginx监听的80端口,负载到了8001,8002,8003上面

现在只希望别人访问80端口有回应。如果别人访问8001,8002端口就跳转到80端口
如果是这样,那就很简单了,只需要给nodejs监听的端口绑定个地址的
只监听来至127.0.0.1的访问
然后nginx,负载到127.0.0.1相应的端口
isy
2013-01-28 16:03:45 +08:00
大家都把时间花在理解问题上面去了。。。楼主把问题描述清楚点多好。
dhq314
2013-01-30 15:24:45 +08:00
@xingis 不是,刚好反过来
@keakon 嗯,在nodejs进程里判断可以,不过不知道会不会有些复杂的url里也包含关键字1234,判断就写得麻烦了,方法是可行,不过现在我不纠结端口问题就不折腾了
@dallaslu nginx绑定1234端口,我的nodejs服务就启动不来了
@fanwei @eric_zyh 现在就是这样做的,nginx已经配置了反向代理
@BigZ 地址跳转
@linchanx 没控制路由的权限

@isy 简单点说就是地址url跳转,url有“1234”字眼的就调到没“1234”字眼的url去,例如在浏览器地址栏上输入 http://test:1234/ ,按回车后浏览器上的地址栏会变成这样 http://test/
dallaslu
2013-01-30 16:00:37 +08:00
@dhq314 不。因为 IP 不同,可以监听1234。这样,只有对外提供 http://test:1234/ 的外网 IP 的 1234 端口归 nginx 管理。而你的 node.js 服务可以走其他 IP 的 1234 端口。
dhq314
2013-01-30 17:25:20 +08:00
@dallaslu
我的服务架是在linodes上,官方就分配了一个服务器IP给我,上面说的“外部IP”替换成我的服务器IP,再启动nigxi就报了“nginx: [emerg] bind() to 服务器IP:1234 failed (99: Cannot assign requested address)”的错,我知道这是我的服务监听了“1234”这个端口,所以nginx启动会报这个错。
这里说的“外部IP”我有点模糊,是指我的服务器IP?不过我能知道的IP就这一个,如果指其他网关服务器之类的IP,这里我是不清楚了。
dallaslu
2013-01-30 20:23:59 +08:00
@dhq314 所以,请先让你的服务监听 127.0.0.1:1234
dallaslu
2013-01-31 18:04:53 +08:00
@dhq314 Linode 会给你分配一个外网 IP,还会分配给你内网 IP。

以日本节点为例,106.187.xx.xx 就是我说的外部 IP。而你应该用 nginx 监听外部 IP 的 1234 端口,用 node.js 的相关服务监听 127.0.0.1 的 1234 端口,或 192.168.xx.xx (分配的内部IP)的 1234 端口。
xiaop
2013-01-31 18:10:31 +08:00
@dallaslu 的思路确实不错,node.js监听内网IP:1234,nginx 监听外网ip:1234
node.js的服务如果外网需要调用,只能用nginx反向代理来实现了。
xiaop
2013-01-31 18:42:41 +08:00
@dhq314
@xiaop 可以访问,不过是想1234端口不显示出来
-------------------------------------------------

才发现你写的这个需求,这个要求是不可能实现的。要不怎么叫“监听”呢?
监听就意味着要开放这个端口。避免端口扫描,可以改个不常用的端口。
loveminds
2013-02-01 05:15:16 +08:00
我想你的意思不过是设置一个到1234端口的反向代理吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/57712

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX