NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
dhq314
V2EX  ›  NGINX

nginx可不可以做端口跳转?

  •  
  •   dhq314 ·
    dhq314 · Jan 15, 2013 · 14008 views
    This topic created in 4877 days ago, the information mentioned may be changed or developed.
    例如访问 http://test:1234/ 会自动跳到 http://test/
    35 replies    1970-01-01 08:00:00 +08:00
    lqs
        1
    lqs  
       Jan 15, 2013
    listen 1234,然后 rewrite .* http://test/
    plprapper
        2
    plprapper  
       Jan 15, 2013
    反向代理的功能 就是这样的吧

    listen 1234

    location / {
    proxy_pass http://127.0.0.1/;

    搜搜这个东西 应该是你需要的
    CosWind
        3
    CosWind  
       Jan 15, 2013 via Android
    @plprapper 人家说的是nodejs,不是ngnix
    plprapper
        4
    plprapper  
       Jan 15, 2013
    @CosWind 额。。 题目不是 nginx吗
    dhq314
        5
    dhq314  
    OP
       Jan 15, 2013
    @plprapper @lqs
    不能用nginx监听1234端口,不然我另外要作反向代理的那个服务进程启动不来了


    @CosWind
    不是说nodejs,不过也可以说成是一个监听1234端口的nodejs的服务,在浏览器访问http://test:1234/可以打开一个网页,我想问的是nginx能不能这样配置,在浏览器上输入http://test:1234/,浏览器那边会跳到http://test/,类似做个302的重定向,就是把地址上的端口名隐藏掉
    G0dBlessMe
        6
    G0dBlessMe  
       Jan 15, 2013 via iPhone
    这个和强制SSL是一样的啊,Google下nginx强制SSL,把80强制转到443
    dhq314
        7
    dhq314  
    OP
       Jan 16, 2013
    @goxofy
    不一样,SSL的443端口还是nginx在监听,我这里的1234端口是别的服务程序在监听着...我发现nginx应该是做不了这个端口跳转了?
    xiaop
        8
    xiaop  
       Jan 16, 2013 via Android
    谁污染谁治理,谁监听谁跳转
    dhq314
        9
    dhq314  
    OP
       Jan 16, 2013
    @xiaop
    就是1234端口跳到80端口,不过nginx不能监听1234端口
    zhangxiao
        10
    zhangxiao  
       Jan 16, 2013
    @dhq312 那你总得有个监听1234的东西吧...
    dhq314
        11
    dhq314  
    OP
       Jan 16, 2013
    @zhangxia0
    上面说过了有其他服务程序在监听...
    CosWind
        12
    CosWind  
       Jan 16, 2013
    @plprapper
    @dhq314
    眼花了...
    BOYPT
        13
    BOYPT  
       Jan 16, 2013
    。。不监听又想能跳转,真是奇葩,要么该你原来监听1234的那个程序的代码实现跳转,要么在更层网络,比如iptables把数据包转到用户态,判断需要跳转直接返回掉。反正你不让nginx监听的话没他什么事情。
    wwqgtxx
        14
    wwqgtxx  
       Jan 16, 2013 via Android   ❤️ 1
    listen 80

    location / {
    proxy_pass http://127.0.0.1:1234/;

    nginx只能这样配置了,剩下的配置iptables吧
    xiaop
        15
    xiaop  
       Jan 18, 2013 via Android
    楼主的需求,是不是开了1234端口又不想让别人访问到?
    dhq314
        16
    dhq314  
    OP
       Jan 19, 2013
    @xiaop 可以访问,不过是想1234端口不显示出来
    phuslu
        17
    phuslu  
       Jan 19, 2013 via iPhone
    楼主你这需求太奇葩+1
    太固执了。。。
    dhq314
        18
    dhq314  
    OP
       Jan 19, 2013   ❤️ 1
    看到有信息提示,我还以为是有什么好的想法...

    其实这个问题我已经不纠结,能实现就最好,不能实现我也知道是什么问题了,至于固不固执由人去说。

    回复能关注在问题上就最好,回复些感叹的也可以,虽然这个问题是不需要这些。

    不过,有好的想法是欢迎回复的。
    xingis
        19
    xingis  
       Jan 19, 2013
    你是这样的意思吗,你是想让人家直接打开http://test/的时候,访问你服务器的1234端口!是这样吗!
    keakon
        20
    keakon  
       Jan 19, 2013
    确认下需求。

    访问1234端口时,如果是HTTP请求,就让浏览器重定向到80端口;否则让监听1234端口的nodejs进程来处理。

    处理办法:
    1. 让这个nodejs进程自己判断请求。
    2. 让nodejs监听127.0.0.1:1234,自己写个服务x监听外部ip:1234,设置允许socket重用端口,然后交给x判断。
    dallaslu
        21
    dallaslu  
       Jan 27, 2013
    让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
        22
    eric_zyh  
       Jan 27, 2013 via iPhone
    nodejs开1234端口'nginx80端口
    验证是合法html请求就反向代理nginx
    不合法就其他处理
    BigZ
        23
    BigZ  
       Jan 27, 2013
    楼主,你是指 浏览器的地址跳转,还是指内容的跳转
    linchanx
        24
    linchanx  
       Jan 28, 2013
    这个需要路由器来做,把外网地址的80端口和内网地址的1234做静态映射就可以了,当然如果你没法控制到路由器就不知道了。。
    linchanx
        25
    linchanx  
       Jan 28, 2013
    @dhq314 具体到如果你是用cisco的设备
    ip nat inside source static tcp 内网地址 1234 外网地址 80
    这样在外网访问80端口时,路由器就转发到内网服务器的1234端口
    fanwei
        26
    fanwei  
       Jan 28, 2013
    楼主是这个意思吧!
    nodejs服务开了多个进程,监听了8001,8002,8003。。。。。。
    然后,nginx监听的80端口,负载到了8001,8002,8003上面

    现在只希望别人访问80端口有回应。如果别人访问8001,8002端口就跳转到80端口
    如果是这样,那就很简单了,只需要给nodejs监听的端口绑定个地址的
    只监听来至127.0.0.1的访问
    然后nginx,负载到127.0.0.1相应的端口
    isy
        27
    isy  
       Jan 28, 2013
    大家都把时间花在理解问题上面去了。。。楼主把问题描述清楚点多好。
    dhq314
        28
    dhq314  
    OP
       Jan 30, 2013
    @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
        29
    dallaslu  
       Jan 30, 2013
    @dhq314 不。因为 IP 不同,可以监听1234。这样,只有对外提供 http://test:1234/ 的外网 IP 的 1234 端口归 nginx 管理。而你的 node.js 服务可以走其他 IP 的 1234 端口。
    dhq314
        30
    dhq314  
    OP
       Jan 30, 2013
    @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
        31
    dallaslu  
       Jan 30, 2013
    @dhq314 所以,请先让你的服务监听 127.0.0.1:1234
    dallaslu
        32
    dallaslu  
       Jan 31, 2013
    @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
        33
    xiaop  
       Jan 31, 2013
    @dallaslu 的思路确实不错,node.js监听内网IP:1234,nginx 监听外网ip:1234
    node.js的服务如果外网需要调用,只能用nginx反向代理来实现了。
    xiaop
        34
    xiaop  
       Jan 31, 2013
    @dhq314
    @xiaop 可以访问,不过是想1234端口不显示出来
    -------------------------------------------------

    才发现你写的这个需求,这个要求是不可能实现的。要不怎么叫“监听”呢?
    监听就意味着要开放这个端口。避免端口扫描,可以改个不常用的端口。
    loveminds
        35
    loveminds  
       Feb 1, 2013
    我想你的意思不过是设置一个到1234端口的反向代理吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   853 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 21:41 · PVG 05:41 · LAX 14:41 · JFK 17:41
    ♥ Do have faith in what you're doing.