【发布时间】:2018-02-06 04:31:10
【问题描述】:
在我的家庭网络中,我有一个 Web 服务器和一个 DNS 服务器。我有各种其他应用程序服务器,我已经为其添加了重定向,因此我可以简单地访问像 myapplication.domain.com 或 www.domain.com/application 这样的网站来访问我的各种服务。我有一个在另一台服务器上运行的 Subsonic 服务器,我的目标是能够访问 https://subsonic.domain.com 并在我的 Web 服务器上通过 SSL 获得我的 Subsonic 流量。最终我希望在家外访问它,这就是为什么通过 HTTPS 代理不安全的 HTTP 流量很重要的原因,但现在,我只是想让它在家里工作。
当我访问https://subsonic.domain.com 时,我最终收到“无法连接”错误。我似乎被重定向到的地址是subsonic.domain.com/login.view。如果我将 HTTPS 添加到该 URL 的前面,我会得到我正在寻找的登录页面。但是,一旦我再次登录,URL 就会发生变化,我会被重定向,最终我会再次丢失 HTTPS,不得不继续重新添加它。显然我做错了什么。
我已经为subsonic.domain.com 设置了一个虚拟主机,并尝试使用ProxyPass 和ProxyPassReverse 以我想要的方式重定向流量。这是我的这个网站的虚拟主机:
<VirtualHost subsonic.domain.com:443>
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
ProxyRequests Off
ProxyErrorOverride Off
ProxyPreserveHost On
ServerAdmin webmaster@localhost
ProxyPass / http://192.168.1.5:4040/
ProxyPassReverse / http://192.168.1.5:4040/
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
</VirtualHost>
SSL 绝对可以正常运行。我有另一个相同的虚拟主机,用于另一个工作正常的目录(在https://www.domain.com/directory 上重定向),所以我不确定问题出在哪里。在 ProxyPassReverse 之后,URL 似乎只是丢失了 https:// 部分。如果我添加它,该站点可以正常工作,直到我访问另一个页面并且https:// 再次丢失。如果我直接在http://192.168.1.5:4040 访问应用程序服务器,我没有任何问题。
欢迎任何建议。
编辑
稍微澄清一下我正在尝试做的事情。我想让我的 Apache 服务器完成我所有的重定向和处理我所有的 SSL 请求。基本上,从浏览器到Apache服务器是HTTPS,从Apache服务器到应用程序服务器的ProxyPass我们未加密的HTTP(这很好,这是我的内部网络),从应用程序服务器到Apache的ProxyPassReverse服务器是纯 HTTP,然后 Apache 服务器以 HTTPS 发送流量。
这是另一个虚拟主机,可以为不同的子域执行我想要的操作。这是经过测试并且可以 100% 工作的。我通过 HTTPS 连接到我的 Apache 服务器,Apache 服务器以普通的旧 HTTP 联系我 ownCloud 服务器,对我的 Apache 服务器的响应是普通 HTTP,然后 Apache 服务器以 HTTPS 向浏览器返回请求:
<VirtualHost www.domain.com:443>
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
ProxyRequests Off
ProxyErrorOverride Off
ProxyPreserveHost On
ServerAdmin webmaster@localhost
ProxyPass /owncloud/ http://192.168.1.251/owncloud/
ProxyPassReverse /owncloud/ http://192.168.1.251/owncloud/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
</VirtualHost>
【问题讨论】:
-
您的亚音速后端尚未发送加密流量,是吗?我很困惑,因为我想不出你为什么要在
ProxyPass和-Reverse上指定不同的协议。 -
不,Subsonic 后端提供纯 HTTP。我不是想为 ProxyPass 和 Reverse 指定不同的协议,据我了解它们都应该是 HTTP。一分钟后我会发布我的另一个虚拟主机。它与上面的几乎相同。它从应用服务器传递 HTTP 并将其作为 HTTPS 发送出去。
-
我想你会在 ProxyPass 和 -Reverse 上都需要
http://,然后 SSL 将在 Apache 层被剥离。 -
我相信这是正确的,这就是它在我的其他虚拟主机上的工作方式。我刚刚编辑了我的原始帖子,以展示这个工作的一个例子,并澄清我在寻找什么。
-
Ulrich,很抱歉造成混乱,我没有意识到我的帖子的背面有
https://。我在背面有https://用于测试目的,但后来删除了它。即使在 ProxyPass 和 Reverse 上使用http://,它仍然无法正常工作。我已经编辑了我的原始帖子。
标签: apache mod-proxy ubuntu-14.04