青岛OJ(QingdaoU/OnlineJudge)的开发与使用(5)——反向代理
原文链接:这里
0.前言
前面一篇文章我们已经学过了备份与恢复,我们这一篇中学习一下反向代理。我们可以先试想一下下面的情景:我有3个域名(一个主域名,两个二级域名),都指向一个IP,也就是物理服务器,A域名是博客,B域名是OJ,C域名是你自己搭建的一个项目。我们想通过不同的域名访问到不同的项目(在局域网中可以通过不同的端口访问到不同的项目),这个时候就需要配置一下反向代理。
1.映射关系与图解
我们在前面几篇文章都有提到,如果你想要运行我们docker里面的OJ项目,需要把我们本地的web服务器先停掉,主要原因是docker-compose.yml文件中有关于映射的说明。
ports:
- "0.0.0.0:80:8000"
- "0.0.0.0:443:1443"
从上面的文件说明可以看出,冒号左侧是物理机的端口,它监听了物理机的80端口,并把他转发给docker的8000端口,因为物理机的80端口一般都是web服务,所以我们为了测试docker一般都会把web服务停掉。
然而实际上,我们物理机或者云服务器上可能会有多个项目,不可能停掉web服务,这个时候就需要反向代理出现了。
关于远程的服务器的web代理的图解可以参考下面这个:
其中,A是主域名,www开头的,B和C都是二级域名,都指向了我们云服务器的IP地址而且都是80端口。我们可以通过web服务来单独配置每个不同节点和目录来访问。
下面这个可以作为本地局域网的示意图(假设本地的IP是192.168.1.106):
2.局域网的访问
局域网中没有必要用到反向代理,直接做端口映射即可。文中用的web服务器是nginx,如果是apache的话方式类似,可自行百度。
首先,我们要修改docker-compose.yml文件,因为局域网是通过不同端口控制的,所以我们不能都设置为80端口,我们把docker-compose.yml文件改成下面的样子。(记得要开端口)这个的意思是物理机的8000端口对应docker的8000端口。
ports:
- "0.0.0.0:8000:8000"
- "0.0.0.0:443:1443"
然后,我们先自己搭建一个本地的网站,部署一个静态网页,IP地址就是本机IP,指向是80端口。
本地网站搭建好了,这个时候我们要通过本地虚拟机+8000端口访问OJ,千万不要通过上面的方法新建一个站点指向8000端口,这样会报错(端口已被占用)。我们直接修改完docker-compose.yml文件重新docker-compose up -d即可。熟悉的界面又回来了。而且都是虚拟机的IP,只不过一个通过web服务器指向80端口,另一个不通过web服务器直接指向8000端口。
3.云服务器的反向代理
云服务的可以用反向代理实现上面的效果,云服务用的宝塔面板和nginx。其他配置类似。
首先,我们要修改docker-compose.yml文件,我们把docker-compose.yml文件改成下面的样子。(记得要开端口)这个的意思是云服务器的8000端口对应docker的8000端口。
ports:
- "0.0.0.0:8000:8000"
- "0.0.0.0:443:1443"
记得要重新docker-compose up -d。
我们先添加一个主网站A,这是我们地方主网站,如下图所示:
然后再添加一个二级域名,这是我们的OJ网站,(域名服务商先去自行开通二级域名并正确指向),注意目录指向要不一致。
然后我们修改第二个域名,
设置反代,这个地方可以开启缓存。
这个时候访问oj.test.com就能访问到我们的OJ了。