目的就是为了用一个域名多级目录跳转到不同服务器
比如
访问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 2015-03-24 15:02:15 +08:00
你是想 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 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 |
13
shiny 2015-03-24 16:06:39 +08:00
@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; } |