通过location划分来反向代理多个网站,意思是使用同一个域下(协议、域名、端口均相同),通过路径的划分来代理不同的网站/服务。例如:a网站为 www.test.com/a/,b网站为www.test.com/b/,c网站为www.test.com/c/,这样的好处是只需要使用一个域名,abc三个网站之间不存在跨域问题,但坏处也很明显:
为了解决问题2,这里有几个方法,但并不是很完美:
location /a/ { proxy_pass http://10.119.2.1/; #这里加斜杠意味着URI,nginx会把前缀 a/ 替换掉 ······ #通过直接替换的方式把输出内容中的URL替换掉 sub_filter '="/luci-static/' '="/a/luci-static/'; sub_filter ':"/luci-static/' ':"/a/luci-static/'; sub_filter_types *; sub_filter_once off; proxy_redirect / /a/; #替换重定向的URL }
location / { proxy_set_header Host $host; #这里通过正则表达式去匹配refer的内容 if ($http_referer ~ ^https?://[\w\.:]*/a.*) { # 将其路由到127.0.0.1的一个路径前缀为/a/的地址 rewrite ^(/.*)$ /a$1 break; proxy_pass http://127.0.0.1; } }