请教 nginx 跳转 写法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ecapsul
V2EX    NGINX

请教 nginx 跳转 写法

  •  
  •   ecapsul 2015-03-24 14:23:32 +08:00 6920 次点击
    这是一个创建于 3923 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目的就是为了用一个域名多级目录跳转到不同服务器
    比如
    访问www.test.com/a 跳转到内网服务器192.168.0.1:8080
    访问www.test.com/b 跳转到内网服务器192.168.0.2:8080

    尝试了很多次,都不成功,特来求助。

    server { listen 80; server_name www.test.com; location /a/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://192.168.0.1:8080/; } location /b/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://192.168.0.2:8080/; } 

    }

    第 1 条附言    2015-03-24 15:09:28 +08:00
    抱歉,太激动,忘记说了,目标服务器里本身不含有a b目录,我只想在主域名那里/a /b这样区别不同应用
    25 条回复    2015-08-05 12:32:16 +08:00
    hging
        1
    hging  
       2015-03-24 14:54:09 +08:00
    ....跳转写rewrite不就行了.
    location /a/ {
    rewrite http://192.168.0.1:8080/;
    }
    ecapsul
        2
    ecapsul  
    OP
       2015-03-24 14:59:37 +08:00
    这样直接报错啊nginx: [emerg] invalid number of arguments in "rewrite" directive
    fising
        3
    fising  
       2015-03-24 15:00:40 +08:00
    @hging 他说的应该是请求转发。另外就算是rewrite,你的语法也是错误的。
    ecapsul
        4
    ecapsul  
    OP
       2015-03-24 15:02:12 +08:00
    @fising, 是的,主要是要跳转到不同服务器,找不到相关参考
    shiny
        5
    shiny  
    PRO
       2015-03-24 15:02:15 +08:00
    你是想 30x 跳转还是反向代理?
    ecapsul
        6
    ecapsul  
    OP
       2015-03-24 15:06:48 +08:00
    @shiny ,是反向代理,因为url里我希望保留自己输入的内容,比如www.test.com/a ,而不是被替换掉
    hging
        7
    hging  
       2015-03-24 15:12:11 +08:00
    之前搞定过....但是..没留下配置.....汗...
    leassy
        8
    leassy  
       2015-03-24 15:13:54 +08:00
    楼主何不直接绑定站点www.test.com
    写个PHP
    访问www.test.com/a 跳转到内网服务器192.168.0.1:8080
    访问www.test.com/b 跳转到内网服务器192.168.0.2:8080
    即可
    ecapsul
        9
    ecapsul  
    OP
       2015-03-24 15:18:39 +08:00
    @leassy ,条件所迫,我这些都在路由上实现,让路由做前端向后台发请求,所以希望尽可能简单
    Csineneo
        10
    Csineneo  
       2015-03-24 15:33:18 +08:00
    return 302 http://192.168.0.1:8080/;
    shiny
        11
    shiny  
    PRO
       2015-03-24 15:37:39 +08:00
    你这种写法没有问题,要注意的是 location 这样的写法优先级是比较低的。[1] 有可能被其他配置匹配到,看上去就没生效。

    我测试了你这种写法是没问题的:

    location /a/ {
    proxy_pass http://www.douban.com/;
    }

    然后我的域名测试确实被反代了:
    https://www.shiguanglu.com/a/
    https://www.shiguanglu.com/a/online/12121314/

    1. http://wiki.nginx.org/HttpCoreModule#location
    ecapsul
        12
    ecapsul  
    OP
       2015-03-24 16:04:27 +08:00
    @shiny ,目标服务器里没有a b目录也行吗,我将配置最小化了,测试还是不行
    shiny
        13
    shiny  
    PRO
       2015-03-24 16:06:39 +08:00
    @ecapsul proxy_pass 的值如果以 / 结尾就行,douban.com 也没有 a 目录。
    你把你的步骤说下?或者有时候粗心大意比如改错配置文件、没有 reload 配置,都是有可能的。
    ecapsul
        14
    ecapsul  
    OP
       2015-03-24 16:34:54 +08:00
    @shiny ,确实是,以/结尾应该就可以,但我这里偏偏出问题,我再找找,有更新再来这里贴出,主要自己属于半吊子,有需要了才学,来不及啊。谢谢你
    msg7086
        15
    msg7086  
       2015-03-24 17:06:02 +08:00
    「不成功」 <- 怎么个不成功?
    ecapsul
        16
    ecapsul  
    OP
       2015-03-24 17:07:14 +08:00
    更新一下,改成了下面的语句在访问时候到时可以添加后缀/a,刷新后被替换,有了点进步,但是还是没搞定. 目标服务器没有/a目录,浏览器输入www.test.com/a后,页面开启,浏览器地址变为www.test.com/cgi-bin/luci , 目标服务器的网页根目录有一个index.html,那个会跳转到/cgi-bin/luci
    location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass https://192.168.0.1:8080/;
    proxy_redirect https://192.168.0.1:8080/ /a/;
    }
    ruanjf
        18
    ruanjf  
       2015-03-25 09:37:11 +08:00
    proxy_pass少break吧
    ecapsul
        19
    ecapsul  
    OP
       2015-03-25 11:30:32 +08:00
    @ruanjf ,rewrite才有break的语法,proxy_pass没有的
    ecapsul
        20
    ecapsul  
    OP
       2015-03-25 13:05:55 +08:00
    更新一下,看来是目标服务器的问题,跳转到我目标服务器后,页面显示就不正常。如果跳转到douban等等外部网站就没问题,不折腾了,我还是维持xxx.test.com 这样的二级域名,每个写一个吧。
    其实所有的一切都是为了ssl证书,因为通配符的证书太贵,为二级域名配置ssl的话每个网址都要买一个,本来想通过\a \b \c这样子目录的方式来代替,只有搁置计划了。感谢各位的帮助,虽然没有成功,还是学到了一些东西
    lujiajing1126
        21
    lujiajing1126  
       2015-03-25 13:30:12 +08:00
    @hging rewrite至少需要两个参数。。第一个参数是你要把哪部分改写。。
    晕- -
    ksupertu
        22
    ksupertu  
       2015-03-27 17:04:45 +08:00
    a 和b那里把最后一个斜杠删了
    location /a {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    rewrite ^/openvpnmonitor/(.*)$ /$1 break;
    proxy_pass http://192.168.5.198:81;
    }
    ksupertu
        23
    ksupertu  
       2015-03-27 17:06:03 +08:00
    上一条rewrite那里写错了,是a,忘记改了……

    a 和b那里把最后一个斜杠删了
    location /a {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    rewrite ^/a/(.*)$ /$1 break;
    proxy_pass http://192.168.5.198:81;
    }
    ecapsul
        24
    ecapsul  
    OP
       2015-04-22 14:33:22 +08:00
    最后变相搞定了,我把nginx换了,也不用路由做反向代理了,而是转到内网一台机器上的apache做了反代,目前一切工作如预期的,完全满足了自己的要求,再次感谢各位
    ruanjf
        25
    ruanjf  
       2015-08-05 12:32:16 +08:00
    location /
    {

    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://192.168.0.1:80;

    }



    location /fileCenter
    {

    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://192.168.0.2:80/fileCenter;


    }
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2553 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 14:34 PVG 22:34 LAX 06:34 JFK 09:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86