![一个公共 IP 和两个 Web 服务器](https://linux22.com/image/636051/%E4%B8%80%E4%B8%AA%E5%85%AC%E5%85%B1%20IP%20%E5%92%8C%E4%B8%A4%E4%B8%AA%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我们的 IBM 服务器(内部 IP:192.168.1.128)通过路由器(192.168.1.1)连接到互联网。我已转发以下端口:端口 80:内部 IP 192.168.1.128 用于传入 HTTP 连接。HTTP 请求由 xampp 处理。例如:- 人们使用 122.168.xxx.53/moodle 访问 moodle。(Moodle 是一个在线培训平台,122.168.xxx.53 是我们的公共 IP)。
BigBlueButton 是一个基于网络的虚拟教室程序。
我们的 bigbluebutton 服务器运行在虚拟机上,该虚拟机与主机 IBM 服务器通过桥接网络连接。这意味着虚拟机的行为就像连接到我们服务器的物理机器一样。我已为虚拟机分配了一个 IP(192.168.1.127),因此在本地网络上,如果我在浏览器中输入 192.168.1.127/bigbluebutton ,就会显示 bbb 演示会议页面。
问题:我已经在内部 IP 192.168.1.128 上转发了端口 80,以便其他人能够访问 moodle。192.168.1.127 也在端口 80 上运行 bbb。我们无法在两个内部 IP 上转发相同的端口 80。由于 bbb 是一项 Web 服务,因此我们不能在 80 以外的任何端口上运行它。如果我要从 192.168.1.128 上收回 80 并将其转发到 192.168.1.127,其他人可以访问 bbb,但不能访问 moodle。我们需要两者。简而言之,我们有两个 Web 服务器和一个公共 IP(122.168.xxx.53),并且只有一个 Web 服务器可以通过该公共 IP,以便外界可以访问它。我如何让外界可以访问它们?
我尝试过的方法:我尝试通过编辑 apache 服务器软件的 httpd.conf 文件并添加条目 ProxyPass /bigbluebutton/ 192.168.1.127 来使我们的 IBM 服务器充当传入请求和 bbb 服务器之间的代理。这意味着如果有人访问 URL 122.168.xxx.53/bigbluebutton/ ,数据将从 192.168.1.127 获取并显示给访问者。例如,我访问某个 bbb 页面,如 122.168.xxx.53/bigbluebutton/index.html ,该页面将从 192.168.1.127/index.html 获取并显示给外部访问者。我在这方面取得了成功,但问题是,假设 index.html 网页包含指向某个图像的链接,如“images/bbb_logo.jpg”,本应解释为 192.168.1.127/images/bbb_logo.jpg,但实际上被解释为 192.168.1.128/images/bbb_logo.jpg,因为 122.168.xxx.53 被映射到 192.168.1.128,因为我们在 ....1.128 上转发了端口 80,而不是在 ....1.127 上。此时,如果页面中嵌入了相对 URL,我们的 apache 代理就会失败。
有用信息:IBM 服务器运行带有 xampp 软件的 windows server 2008 r2 来处理 http 请求。BBB 虚拟机运行带有 nginx 作为 http 服务器的 ubuntu 服务器版本。