nginx通过location划分反向代理多个网站
2021/10/7 7:10:51
本文主要是介绍nginx通过location划分反向代理多个网站,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
通过location划分来反向代理多个网站,意思是使用同一个域下(协议、域名、端口均相同),通过路径的划分来代理不同的网站/服务。例如:a网站为 www.test.com/a/,b网站为www.test.com/b/,c网站为www.test.com/c/,这样的好处是只需要使用一个域名,abc三个网站之间不存在跨域问题,但坏处也很明显:
- 三个网站的cookie、webStorage都未隔离,如果没做好规划存在冲突的可能
- 有些代码中使用了绝对路径,那么在使用绝对路径时,跳转时用于区分网站的前缀"/a/”就会丢失
为了解决问题2,这里有几个方法,但并不是很完美:
- 使用ngx_http_sub_module模块对输出的内容进行过滤:
这个模块并不是nginx默认的模块,但是nginx提供的官方docker镜像的最新版本中是有自带的,可以通过nginx -V来查看是否有安装
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 }
- 很多情况下并不是所有的路径都可以被直接直接替换掉,有些路径是前端代码动态生成的,这种情况很难被完全替换
通过请求header中的Refer去区分,例如:从www.test.com/a/1.html请求www.test.com/2.html,这个请求的Refer是www.test.com/a/1.html,但继续从www.test.com/2.html请求别的地址,Refer中就不再包含/a/了,所以这种方式只能兜底判断一层
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; } }
- 剩下依然无法被匹配的地址,可以手动通过正则或者前缀的方式增加location来完成匹配
这篇关于nginx通过location划分反向代理多个网站的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享
- 2024-08-14nginx 让访问带有/relid的地址返回404 ,例子 /relid-x-0.36-y-131.html-icode9专业技术文章分享
- 2024-08-14nginx 判断地址有/statics/的路径,指向到/home/html/statics/目录-icode9专业技术文章分享