
目的就是为了用一个域名多级目录跳转到不同服务器
比如
访问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 hging 2015-03-24 14:54:09 +08:00 ....跳转写rewrite不就行了. location /a/ { rewrite http://192.168.0.1:8080/; } |
2 ecapsul OP 这样直接报错啊nginx: [emerg] invalid number of arguments in "rewrite" directive |
5 shiny PRO 你是想 30x 跳转还是反向代理? |
6 ecapsul OP @shiny ,是反向代理,因为url里我希望保留自己输入的内容,比如www.test.com/a ,而不是被替换掉 |
7 hging 2015-03-24 15:12:11 +08:00 之前搞定过....但是..没留下配置.....汗... |
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 即可 |
10 Csineneo 2015-03-24 15:33:18 +08:00 return 302 http://192.168.0.1:8080/; |
11 shiny PRO 你这种写法没有问题,要注意的是 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 |
13 shiny PRO @ecapsul proxy_pass 的值如果以 / 结尾就行,douban.com 也没有 a 目录。 你把你的步骤说下?或者有时候粗心大意比如改错配置文件、没有 reload 配置,都是有可能的。 |
14 ecapsul OP @shiny ,确实是,以/结尾应该就可以,但我这里偏偏出问题,我再找找,有更新再来这里贴出,主要自己属于半吊子,有需要了才学,来不及啊。谢谢你 |
15 msg7086 2015-03-24 17:06:02 +08:00 「不成功」 <- 怎么个不成功? |
16 ecapsul OP 更新一下,改成了下面的语句在访问时候到时可以添加后缀/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/; } |
17 ecapsul OP |
18 ruanjf 2015-03-25 09:37:11 +08:00 proxy_pass少break吧 |
20 ecapsul OP 更新一下,看来是目标服务器的问题,跳转到我目标服务器后,页面显示就不正常。如果跳转到douban等等外部网站就没问题,不折腾了,我还是维持xxx.test.com 这样的二级域名,每个写一个吧。 其实所有的一切都是为了ssl证书,因为通配符的证书太贵,为二级域名配置ssl的话每个网址都要买一个,本来想通过\a \b \c这样子目录的方式来代替,只有搁置计划了。感谢各位的帮助,虽然没有成功,还是学到了一些东西 |
21 lujiajing1126 2015-03-25 13:30:12 +08:00 @hging rewrite至少需要两个参数。。第一个参数是你要把哪部分改写。。 晕- - |
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; } |
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; } |
24 ecapsul OP 最后变相搞定了,我把nginx换了,也不用路由做反向代理了,而是转到内网一台机器上的apache做了反代,目前一切工作如预期的,完全满足了自己的要求,再次感谢各位 |
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; } |