从远程计算机 C 通过 apache 服务器 A 访问 apache 服务器 B

从远程计算机 C 通过 apache 服务器 A 访问 apache 服务器 B

在单一网络中网络-1,我有两台电脑:A。 都有阿帕奇服务器正在运行(两者Debian 7)我拥有该服务器A,假设我的主页是http://computerA/index.html。我也可以访问其他人() 的页面位于B:8080/bspage.php同一网络中。实际上,我的index.html页面中有一个指向该人页面的链接,如下所示:

<a href="http://B:8080/bspage.php">B-Guy's Link</a>

当我不在的时候,另一个网络,我可以使用以下方式通过网关转发我的服务器的端口:

ssh -L 8888:A:80 gate@somegateway

因此我现在可以再次打开我的服务器页面

localhost:8888/index.html

但该链接B-Guy's Link不再有效(我认为原因很明显)!

我需要的是地图 链接http://B:8080/bspage.php到我的服务器A,这样当我B-Guy's Link远程访问此链接时,它会通过A阿帕奇端口80,无需额外的端口转发应该是必需的。尽管即使在该本地网络中(网络-1),我尝试过(从我的电脑上)A):

ssh -L 9999:localhost:8080 root@B

(顺便说一下,我有 root 访问权限B,并且 root 是除 www-data 之外的唯一用户)但localhost:9999/bspage.php无法在我的浏览器中打开A!! 然后我想也许我必须将用户从更改rootwww-data,但我不知道www-data密码所以不能这么做。

我对这整个行业都很陌生,因此我非常感谢任何帮助。我觉得这应该不会太复杂,但我不知道我错过了什么!

谢谢-NL


更新和解决方案

大卫戈回答对我帮助很大,我能够学习一些教程,比如这个我通过以下方式启用了这四个模块:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests

最后一个给了我一个错误,比如lbmethod_byrequests未找到或类似的,但最终并不重要。

然后我使用重新启动服务器

service apache2 restart

之后,我没能实现那些看似很容易实现但却没有实现的事情!但是本文终于有帮助了,但无论如何我都要详细描述它:

我必须修改该文件:

/etc/apache2/sites-available/default 或符号链接:/etc/apache2/sites-enabled/000-default

在块内:

<VirtualHost *:80>
   # blah blah some code...
</VirtualHost>

我插入了以下内容:

<Location /sometag >
        ProxyPass http://B:8080/
        ProxyPassReverse http://B:8080/
</Location>

您可以使用的任何字符串在哪里something,最好使用有意义的东西...例如这里最好使用像这样的标签bserver,因此我的配置文件将如下所示:

<VirtualHost *:80>
       # blah blah some code...
       <Location /bserver >
        ProxyPass http://B:8080/
        ProxyPassReverse http://B:8080/
       </Location>
</VirtualHost>

重新启动服务器

service apache2 restart

另一个小改动是,在你的页面(可能index.html或任何其他)中服务器A你将链接更改为的页面来自

<a href="http://B:8080/bspage.php">B-Guy's Link</a>

<a href="bserver/bspage.php">B-Guy's Link</a>

注意标签观察者,现在您已经完成了。如果您现在连接到A并转发端口80连接到外部计算机

ssh -L 8888:A:80 gate@somegateway

你将打开你的主A的页面如常:

localhost:8888/index.html

但现在如果你点击它的链接,您将被重定向到以下 URL:

localhost:8888/bserver/bspage.php

完毕!

值得一提的是,按照这种方法,你可以构建你的A计算机作为您的主(frontend)服务器,其后方backend驻留着许多内部()服务器,然后您可以远程访问所有服务器。

答案1

该问题有多种解决方案。

我倾向于在服务器 A 上设置一个路径或虚拟主机,该路径或虚拟主机在服务器 A 中代理到 B。为此,我将在 Apache 中使用 ProxyPass 规则。(在 Google 上搜索 proxypass 和 mod_proxy)

或者,我倾向于放弃 SSH 端口转发,用 OpenVPN 取而代之——最好是在路由器上运行。如果设置正确,它将透明地允许安全访问整个网络。

第三个选择是使用基于 SSH 的 SOX 代理替换 SSH 转发。(此功能内置于 SSH,但需要配置浏览器才能使用它)

答案2

最初我只是用解决方案更新了我的问题,但是在熟练的极客,我将把它变成答案。那么我们开始吧:

大卫戈回答对我帮助很大,我能够学习一些教程,比如这个我通过以下方式启用了这四个模块:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests

最后一个给了我一个错误,比如lbmethod_byrequests未找到或类似的,但最终并不重要。

然后我使用重新启动服务器

service apache2 restart

之后,我没能实现那些看似很容易实现但却没有实现的事情!但是本文终于有帮助了,但无论如何我都要详细描述它:

我必须修改该文件:

/etc/apache2/sites-available/default 或符号链接:/etc/apache2/sites-enabled/000-default

在块内:

<VirtualHost *:80>
   # blah blah some code...
</VirtualHost>

我插入了以下内容:

<Location /sometag >
        ProxyPass http://B:8080/
        ProxyPassReverse http://B:8080/
</Location>

您可以使用的任何字符串在哪里something,最好使用有意义的东西...例如这里最好使用像这样的标签bserver,因此我的配置文件将如下所示:

<VirtualHost *:80>
       # blah blah some code...
       <Location /bserver >
        ProxyPass http://B:8080/
        ProxyPassReverse http://B:8080/
       </Location>
</VirtualHost>

重新启动服务器

service apache2 restart

另一个小改动是,在你的页面(可能index.html或任何其他)中服务器A你将链接更改为的页面来自

<a href="http://B:8080/bspage.php">B-Guy's Link</a>

<a href="bserver/bspage.php">B-Guy's Link</a>

注意标签观察者,现在您已经完成了。如果您现在连接到A并转发端口80连接到外部计算机

ssh -L 8888:A:80 gate@somegateway

你将打开你的主A的页面如常:

localhost:8888/index.html

但现在如果你点击它的链接,您将被重定向到以下 URL:

localhost:8888/bserver/bspage.php

完毕!

值得一提的是,按照这种方法,你可以构建你的A计算机作为您的主(frontend)服务器,其后方backend驻留着许多内部()服务器,然后您可以远程访问所有服务器。

相关内容