我有一个覆盆子pi工作,并通过域asada.net访问。 它使用Apache 2.2.22服务网页。
另外,我最近还购买了一个在本地apache实例(embedded式)中具有网页的NAS。
树莓派的本地IP为192.168.0.4,NAS的本地IP为192.168.0.5。
每次访问www.asada.net时,都会显示树莓派的根页面。
现在,我想要做的是将www.asada.net/nasredirect到NAS的IP地址192.168.0.5,以便从外部访问此页面。
我不想asada.net指向192.168.0.5,也没有任何改变其Apache服务器,只是从树莓派redirect。
所以我尝试过的每一个configuration都是在Apache的Apache上进行的。 我已经启用mod_proxy; 尝试ProxyPass和ProxyPassReverse,我也试过位置指令…但没有运气。
有人能帮我吗?
提前致谢!
编辑 :我的覆盆子pi运行Raspbian和Apache的版本是2.2.22。 这些是加载模块:
Loaded Modules: core_module (static) log_config_module (static) logio_module (static) version_module (static) mpm_prefork_module (static) http_module (static) so_module (static) alias_module (shared) auth_basic_module (shared) authn_file_module (shared) authz_default_module (shared) authz_groupfile_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) cgi_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) headers_module (shared) mime_module (shared) negotiation_module (shared) php5_module (shared) proxy_module (shared) proxy_ajp_module (shared) proxy_balancer_module (shared) proxy_connect_module (shared) proxy_ftp_module (shared) proxy_html_module (shared) proxy_http_module (shared) proxy_scgi_module (shared) reqtimeout_module (shared) rewrite_module (shared) setenvif_module (shared) status_module (shared) Syntax OK
编辑2 :我已经能够取得一些进展。 这是我的VirtualHost:
<VirtualHost *:80> ServerAdmin [email protected] ServerName asada.net ServerAlias www.asada.net DocumentRoot /var/www # NAS ProxyPreserveHost on ProxyPass /nas http://192.168.0.5 ProxyPassReverse /nas http://192.168.0.5 </VirtualHost>
现在,它以某种方式工作…网页加载,但资源不是。 让我发表一个截图:
我能做什么?
编辑3 :伴侣@Froggizbuild议我在这里实现我的目标的一些方法,所以我select了我认为最适合我的要求:URL映射。 我放弃了子域名,因为我的域名是免费的(noip.com)。
目前,我的VirtualHost看起来像下面这段代码:
<VirtualHost *:80> ServerAdmin [email protected] ServerName asada.net ServerAlias www.asada.net DocumentRoot /var/www # NAS ProxyPreserveHost on ProxyPass /nas http://192.168.0.5 ProxyPassReverse /nas http://192.168.0.5 ProxyHTMLURLMap http://192.168.0.5 /nas <Location /nas> ProxyPassReverse / SetOutputFilter proxy-html ProxyHTMLURLMap http://192.168.0.5 /nas ProxyHTMLURLMap / /nas ProxyHTMLURLMap /nas /nas RequestHeader unset Accept-Encoding </Location> </VirtualHost>
一切似乎都正确设置。 当我在浏览器上inputasada.net/nas时,页面上显示的是典型的破碎图像:
在debugging控制台中,这是一件奇怪的事情:应该加载的每个资源都会得到一个'加载资源失败:服务器响应状态为404(未find)'错误。 更奇怪的是,资源的链接(位于右侧)似乎在“… net / nas”之后和“web / …”之前缺less“/”:
http://asada.net/nasweb/css/job_list_icon.css?v=WDV1.01
看,我的猜测是应该的
http://asada.net/nas/web/css/job_list_icon.css?v=WDV1.01
代替。
有什么想法吗? 再次感谢你。
我所理解的是,RPI为www.asada.net提供页面,这就是你想要的。 接下来,您要通过www.asada.net/nas为您的NAS页面提供服务。 我很确定这是可能的,但我会build议如下:
这更容易处理和清晰。 我猜这对你来说不会有太大的关系。
我想你需要将Apache设置为代理服务器到您的NAS。 为此你需要模块mod_proxy 。 您需要为NAS设置虚拟主机,并在该虚拟主机内部configuration代理。
你不要告诉我们你使用什么样的服务器。 我猜这是Raspbian? 哪个版本的Apache – 2.2或2.4? 这可以有很大的不同,所以确保你得到正确的教程,如下所示:
如何使用Apache HTTP服务器作为反向代理使用mod_proxy扩展
我看到你试图做到这一点,但没有成功。 给我们你使用的configuration。 让我们知道你的尝试。 我们无法帮助你,不知道你做了什么!
你不需要mod_proxy或类似的东西。 你可以用mod_alias来做到这一点,它包含在大多数默认的apache2安装中。
在您的vhostconfiguration中,或在站点根目录的.htaccess文件中,只需添加以下行即可:
Redirect /nas http://192.168.0.5
你应该做Redirect 301 /nas http://192.168.0.5因为它永远不会被发现在.4地址。 但内部networking的东西并不重要。 301redirect意味着“永久移动”。
编辑:关于mod_alias和redirect指令的更多信息: https : //httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect
编辑02:我不小心在你的问题上跳过这一行:
所以这个页面可以从外面访问。
这是我在这种情况下通常会做的事情,因为排除故障和维护比反向代理要简单得多。 你需要移动到基于主机名的地址。 我们将使用nas.asada.net作为SPRBRNbuild议。 在您的networking内部,设置DNS,使nas.asada.net指向192.168.0.5。 在你的networking之外,它应该指向你的外部IP地址。
在您的NAS上,将访问端口更改为非默认值。 我从来没有与一个你不能这样做的工作。 如果使用端口80,也许使用8000,如果使用443,则使用1443.防火墙将这个新的端口转发给NAS。
然后做出如下的指示:
Redirect 301 /nas http://nas.asada.net:8000[or whatever port your chose]
这样,访问您的NAS不依赖于树莓派或任何其他networking设备。 另外,如果您打算通过networking访问,请确保您使用的是SSL。
首先我解释你的麻烦:
命令
ProxyPass /nas http://192.168.0.5 ProxyPassReverse /nas http://192.168.0.5
将http://asada.net/nasredirect到http://192.168.0.5 ,所以当你试图访问一个图像时,它将在代码http://192.168.0.5/example.gif ,Apache服务器不会代理图像请求是/example.gif不是由/nas启动。
为了解决这个问题有很多种方法。
ProxyPass /nas http://192.168.0.5/nas ProxyPassReverse /nas http://192.168.0.5/nas
当你访问http://asada.net/nas时,所有的请求都会被正确的redirect。 但在这个cas nas需要从http://192.168.0.5/nas而不是http://192.168.0.5
<VirtualHost *:80> ServerAdmin [email protected] ServerName asada.net ServerAlias www.asada.net DocumentRoot /var/www </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] ServerName nas.asada.net # NAS ProxyPreserveHost on ProxyPass / http://192.168.0.5 ProxyPassReverse / http://192.168.0.5 </VirtualHost>
这是完全一样的解决scheme,但与另一种方法, /将符合代理/请求。 而且你将有一个被放弃的地址来访问它。 它会更干净。
ProxyPass /nas/ http://192.168.0.5/ ProxyPassReverse /nas/ http://192.168.0.5/ ProxyHTMLURLMap http://192.168.0.5 /nas/ <Location /nas/> ProxyPassReverse / SetOutputFilter proxy-html ProxyHTMLURLMap https://192.168.0.5 /nas/ ProxyHTMLURLMap / /nas/ ProxyHTMLURLMap /nas/ /nas/ RequestHeader unset Accept-Encoding </Location>
因为apache2反向代理URL映射的答案将不适用
这我不禁对不起,我还没有find如何做替代作品