在单一网络中网络-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!! 然后我想也许我必须将用户从更改root
为www-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
驻留着许多内部()服务器,然后您可以远程访问所有服务器。