Pat*_*cci 3 apache mod-proxy ubuntu-14.04
在我的家庭网络上,我有一个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,必须不断重新添加它.显然我做错了什么.
我已经设置了一个VirtualHost subsonic.domain.com
,我正在尝试使用ProxyPass
并ProxyPassReverse
以我想要的方式重定向流量.这是我的VirtualHost这个网站:
<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>
Run Code Online (Sandbox Code Playgroud)
SSL肯定正在运行,没有任何问题.我有另一个相同的虚拟主机用于另一个工作正常(重定向https://www.domain.com/directory
)的目录,所以我不确定这里的问题是什么.在ProxyPassReverse之后,URL似乎正在丢失https://
部分.如果我添加它,该网站工作正常,直到我访问另一页并https://
再次丢失.如果我直接访问应用程序服务器http://192.168.1.5:4040
,我没有任何问题.
任何建议都是最受欢迎的.
编辑
关于我正在尝试做什么的一点澄清.我想让我的Apache服务器完成所有重定向和处理所有SSL请求.基本上,从浏览器到Apache服务器是HTTPS,ProxyPass
从Apache服务器到应用服务器我们都是未加密的HTTP(很好,这是我的内部网络),ProxyPassReverse
从应用服务器到Apache服务器都是纯HTTP,然后Apache服务器将流量作为HTTPS发送出去.
这是另一个VirtualHost,可以为不同的子域执行我想要的操作.这是经过测试并且100%工作.我通过HTTPS连接到我的Apache服务器,Apache服务器用普通的旧HTTP连接我自己的Cloud服务器,对我的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>
Run Code Online (Sandbox Code Playgroud)
Jas*_*ncl 12
所以我也遇到了这个问题,并且在评论时ProxyPreserveHost
修复了上面配置的问题,有一种更好的方法.
的ProxyPass
1条语句告诉Apache采取对URI的输入请求,并通过它传递给指定的主机.使用时ProxyPreserveHost On
,Apache不会更改Host: HTTP标头并且不会修改请求.(默认情况下,它会更改它以匹配ProxyPass
语句中指定的后端主机).
在ProxyPassReverse
2语句告诉Apache,以配合指定的主机的主机:头就传出响应,如果它匹配调整位置:,内容位置:和URI:头到虚拟主机匹配,或者更具体什么阿帕奇认为是规范名称.
所以使用以下配置:
<VirtualHost subsonic.domain.com:443>
ProxyPreserveHost On
ProxyPass / http://192.168.1.5:4040/
ProxyPassReverse / http://192.168.1.5:4040/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这是一个要求:
https://subsonic.domain.com/
- > http://192.168.1.5:4040/
但是,自ProxyPreserveHost
启用以来,它将请求中的Host:标头保持原样subsonic.domain.com
您的Web应用程序很可能会发送响应subsonic.domain.com
但与ProxyPassReverse
您指定的规则不匹配:
http://subsonic.domain.com/
< - http://subsonic.domain.com/
所以配置:
<VirtualHost subsonic.domain.com:443>
ProxyPreserveHost On
ProxyPass / http://192.168.1.5:4040/
ProxyPassReverse / http://subsonic.domain.com/ # Changed to match canonical host
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
此规则应与来自代理主机的回复相匹配.
归档时间: |
|
查看次数: |
11602 次 |
最近记录: |