我想将服务器上的虚拟主机重定向到另一个在HTTPS上运行的域。我也只想显示原始网址,因此将P标志用于代理。这是当前的配置:
RewriteEngine on
SSLProxyEngine on
RewriteCond %{HTTP_HOST} ^subdomain1\.domain1\.ext1$ [NC]
RewriteRule ^(.*) https://subdomain2.domain2.ext2$1 [L,R,P]
我应该使用certbot在domain1上生成证书吗?我应该关联哪个Webroot?我应该包括domain2中的那个吗?
当前,我在error.log中有此内容:
[Wed Jun 27 09:13:42.011549 2018] [ssl:error] [pid 19805] [remote IP2:443] AH01961: SSL Proxy requested for domain1.ext1:80 but not enabled [Hint: SSLProxyEngine]
[Wed Jun 27 09:13:42.011734 2018] [proxy:error] [pid 19805] AH00961: HTTPS: failed to enable ssl support for IP2:443 (subdomain2.domain2.ext2)
但是设置了SSLProxyEngine
。
答案 0 :(得分:0)
由于您没有显示VirtualHost设置,因此这是我从头开始的方法。
首先在第一个Apache服务器上为端口443设置VirtualHost:
Listen *:443
<VirtualHost *:443>
ServerName www.domain1.com
ServerAlias domain1.com
SSLEngine On
[... all our SSL directives, like certs ...]
SSLProxyEngine on
RewriteEngine On
RewriteRule ^(.*) https://subdomain2.domain2.ext2/$1 [R=301,P]
</VirtualHost>
然后在另一个服务器上的端口443上再次为domain2设置另一个VirtualHost:
Listen *:443
<VirtualHost *:443>
ServerName www.domain2.com
ServerAlias domain2.com
SSLEngine On
[... all our SSL directives, like certs ...]
DirectoryIndex ...
[ ... other configurations to publish your pages ...]
</VirtualHost>
http://www.domain1.com
,它将被发送到端口80上的匹配VirtualHost,该端口是HTTP,因此没有SSL。您应该要求https://www.domain1.com
。如果要同时在两个系统上安装,则将出现一个小问题。您不能在SSL的相同IP和相同端口(443)上拥有两个具有不同域名的VirtualHost。这是因为直到之后协商证书,Apache才知道您要哪个域。因此解决此问题的方法是:
Listen IP1:443
和Listen IP2:443
并使用它们来设置VirtualHost。https://subdomain2.domain2.ext2:<THE PORT>/$1
但这是一个漫长的主题,您需要做一些研究以了解在同一服务器上运行许多HTTPS站点的所有细节。
答案 1 :(得分:0)
最后,最好的解决方案是使用mod_proxy而不是mod-rewrite。
http版本(重定向到https)
<VirtualHost *:80>
ServerName domain1.ext1
ServerAlias subdomain1.domain1.ext1
SSLProxyEngine on
ProxyPass / https://subdomain2.domain2.ext2/
ProxyPassReverse / https://subdomain2.domain2.ext2/
ProxyPreserveHost Off
RewriteEngine on
RewriteCond %{SERVER_NAME} =subdomain1.domain1.ext1
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
https版本
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName domain1.ext1
ServerAlias subdomain1.domain1.ext1
SSLProxyEngine on
ProxyPass / https://subdomain2.domain2.ext2/
ProxyPassReverse / https://subdomain2.domain2.ext2/
ProxyPreserveHost Off
SSLCertificateFile /etc/letsencrypt/live/subdomain1.domain1.ext1/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/subdomain1.domain1.ext1/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>