nginx可不可以做端口跳转?
- 0次
- 2021-05-31 09:42:35
- idczone
例如访问 http://test国外服务器:1234/ 会自动跳到 http://test/
listen 1234,然后 rewrite .* http://test/
反向代理的功能 就是这样的吧
listen 1234
location / {
proxy_pass http://127.0.0.1/;
搜搜这个东西 应该是你需要的
人家说的是nodejs,不是ngnix
额。。 题目不是 nginx吗
不能用nginx监听1234端口,不然我另外要作反向代理的那个服务进程启动不来了
不是说nodejs,不过也可以说成是一个监听1234端口的nodejs的服务,在浏览器访问http://test:1234/可以打开一个网页,我想问的是nginx能不能这样配置,在浏览器上输入http://test:1234/,浏览器那边会跳到http://test/,类似做个302的重定向,就是把地址上的端口名隐藏掉
这个和强制SSL是一样的啊,Google下nginx强制SSL,把80强制转到443
不一样,SSL的443端口还是nginx在监听,我这里的1234端口是别的服务程序在监听着...我发现nginx应该是做不了这个端口跳转了?
谁污染谁治理,谁监听谁跳转
就是1234端口跳到80端口,不过nginx不能监听1234端口
那你总得有个监听1234的东西吧...
@zhangxia0
上面说过了有其他服务程序在监听...
眼花了...
。。不监听又想能跳转,真是奇葩,要么该你原来监听1234的那个程序的代码实现跳转,要么在更层网络,比如iptables把数据包转到用户态,判断需要跳转直接返回掉。反正你不让nginx监听的话没他什么事情。
listen 80
location / {
proxy_pass http://127.0.0.1:1234/;
nginx只能这样配置了,剩下的配置iptables吧
楼主的需求,是不是开了1234端口又不想让别人访问到?
可以访问,不过是想1234端口不显示出来
楼主你这需求太奇葩+1
太固执了。。。
看到有信息提示,我还以为是有什么好的想法...
其实这个问题我已经不纠结,能实现就最好,不能实现我也知道是什么问题了,至于固不固执由人去说。
回复能关注在问题上就最好,回复些感叹的也可以,虽然这个问题是不需要这些。
不过,有好的想法是欢迎回复的。
你是这样的意思吗,你是想让人家直接打开http://test/的时候,访问你服务器的1234端口!是这样吗!
确认下需求。
访问1234端口时,如果是HTTP请求,就让浏览器重定向到80端口;否则让监听1234端口的nodejs进程来处理。
处理办法:
1. 让这个nodejs进程自己判断请求。
2. 让nodejs监听127.0.0.1:1234,自己写个服务x监听外部ip:1234,设置允许socket重用端口,然后交给x判断。
让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/;
}
}
nodejs开1234端口'nginx80端口
验证是合法html请求就反向代理nginx
不合法就其他处理
楼主,你是指 浏览器的地址跳转,还是指内容的跳转
这个需要路由器来做,把外网地址的80端口和内网地址的1234做静态映射就可以了,当然如果你没法控制到路由器就不知道了。。
具体到如果你是用cisco的设备
ip nat inside source static tcp 内网地址 1234 外网地址 80
这样在外网访问80端口时,路由器就转发到内网服务器的1234端口
楼主是这个意思吧!
nodejs服务开了多个进程,监听了8001,8002,8003。。。。。。
然后,nginx监听的80端口,负载到了8001,8002,8003上面
现在只希望别人访问80端口有回应。如果别人访问8001,8002端口就跳转到80端口
如果是这样,那就很简单了,只需要给nodejs监听的端口绑定个地址的
只监听来至127.0.0.1的访问
然后nginx,负载到127.0.0.1相应的端口
大家都把时间花在理解问题上面去了。。。楼主把问题描述清楚点多好。
不是,刚好反过来
嗯,在nodejs进程里判断可以,不过不知道会不会有些复杂的url里也包含关键字1234,判断就写得麻烦了,方法是可行,不过现在我不纠结端口问题就不折腾了
nginx绑定1234端口,我的nodejs服务就启动不来了
现在就是这样做的,nginx已经配置了反向代理
地址跳转
没控制路由的权限
简单点说就是地址url跳转,url有“1234”字眼的就调到没“1234”字眼的url去,例如在浏览器地址栏上输入 http://test:1234/ ,按回车后浏览器上的地址栏会变成这样 http://test/
不。因为 IP 不同,可以监听1234。这样,只有对外提供 http://test:1234/ 的外网 IP 的 1234 端口归 nginx 管理。而你的 node.js 服务可以走其他 IP 的 1234 端口。
我的服务架是在linodes上,官方就分配了一个服务器IP给我,上面说的“外部IP”替换成我的服务器IP,再启动nigxi就报了“nginx: [emerg] bind() to 服务器IP:1234 failed (99: Cannot assign requested address)”的错,我知道这是我的服务监听了“1234”这个端口,所以nginx启动会报这个错。
这里说的“外部IP”我有点模糊,是指我的服务器IP?不过我能知道的IP就这一个,如果指其他网关服务器之类的IP,这里我是不清楚了。
所以,请先让你的服务监听 127.0.0.1:1234
Linode 会给你分配一个外网 IP,还会分配给你内网 IP。
以日本节点为例,106.187.xx.xx 就是我说的外部 IP。而你应该用 nginx 监听外部 IP 的 1234 端口,用 node.js 的相关服务监听 127.0.0.1 的 1234 端口,或 192.168.xx.xx (分配的内部IP)的 1234 端口。
的思路确实不错,node.js监听内网IP:1234,nginx 监听外网ip:1234
node.js的服务如果外网需要调用,只能用nginx反向代理来实现了。
可以访问,不过是想1234端口不显示出来
-------------------------------------------------
才发现你写的这个需求,这个要求是不可能实现的。要不怎么叫“监听”呢?
监听就意味着要开放这个端口。避免端口扫描,可以改个不常用的端口。
我想你的意思不过是设置一个到1234端口的反向代理吧