系统
Linux hosek 4.15.0-48-generic #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
问题
我应该如何使用带重定向的 SSL 在 Apache 中使用单个配置文件配置多个虚拟主机?
下面的配置中需要什么和不需要什么?例如是否可以Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
仅设置为文件开头?对于所有vhost
s?
可以将整个配置放在一个文件中吗,特别是一个文件VirtualHost
?我现在有 2 个文件,一个用于80
,另一个用于443
。
我的 s 的示例vhost
。
no-ssl.conf
文件。
<VirtualHost *:80>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
RewriteCond %{HTTP_HOST} ^(thehatmakers.cz) [NC]
RewriteRule ^(.*)$ http://www.thehatmakers.cz$1 [R=301,L]
RewriteCond %{SERVER_NAME} =www.thehatmakers.cz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:80>
ServerName www.obrazduse.cz
ServerAlias obrazduse.cz
RewriteCond %{HTTP_HOST} ^(obrazduse.cz) [NC]
RewriteRule ^(.*)$ http://www.obrazduse.cz$1 [R=301,L]
RewriteCond %{SERVER_NAME} =www.obrazduse.cz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
ssl.conf
文件。
<VirtualHost *:443>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
RewriteCond %{HTTP_HOST} ^(thehatmakers.cz) [NC]
RewriteRule ^(.*)$ http://www.thehatmakers.cz$1 [R=301,L]
DocumentRoot /var/www/html/thehatmakers
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
<VirtualHost *:443>
ServerName www.obrazduse.cz
ServerAlias obrazduse.cz
RewriteCond %{HTTP_HOST} ^(obrazduse.cz) [NC]
RewriteRule ^(.*)$ http://www.obrazduse.cz$1 [R=301,L]
DocumentRoot /var/www/html/obrazduse
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
谢谢。
更新
如果无法使用 1 个 VirtualHost,那么这个配置怎么样?有没有更短的方法可以做到这一点?可以用于Redirect
SSL 吗?正如我对配置的评论*:443
?我可以使用Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
外部VirtualHost
配置吗?那么谷歌呢,这种重定向可以吗?我对所有域都使用 1 个证书,可以吗?
<VirtualHost *:80>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
Redirect / https://www.thehatmakers.cz
</VirtualHost>
<VirtualHost *:443>
ServerName www.thehatmakers.cz
ServerAlias thehatmakers.cz
#Redirect / https://www.thehatmakers.cz
RewriteCond %{HTTP_HOST} ^(thehatmakers.cz) [NC]
RewriteRule ^(.*)$ https://www.thehatmakers.cz$1 [R=301,L]
DocumentRoot /var/www/html/thehatmakers
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
谢谢。
答案1
除了拟议的复制以下是针对该问题的一些具体答案:
如何设置正在
ServerAlias
使用的 HTTPS 虚拟主机。
如果您在 HTTPS/SSL 虚拟主机中使用ServerAlias
指令,则需要为所有域名颁发证书。使用时,letsencrypt
您需要添加几个-d
选项:
sudo letsencrypt --apache .... -d www.example.com -d example.com
所有证书都将放在同一个证书文件中。
是否可以将整个配置放在一个文件中,尤其是一个 VirtualHost?我现在有 2 个文件,一个用于 80,另一个用于 443。
你可以将所有 VirtualHost 的定义放在一个文件中,这样就可以很容易地同时启用和禁用它们。但是无法配置一个 VirtualHost 来监听两个端口。
Redirect
那么Rewrite
在 ssl 配置中怎么样?
根据 Apache2 针对此类情况的文档,最好使用指令Redirect
而不是Rewrite
规则。请注意,如果要重定向https://example.com
到,则需要创建两个单独的 VirtualHosts https://www.example.com
。所有相关的 VirtualHosts 都可以使用以上述方式生成的相同证书文件。
每个虚拟主机将负责不同的ServerName
,例如:ServerName example.com
分别负责第一个, ServerName www.example.com
第二个,等等。注意ServerAlias
必须删除该指令。
如果一切按预期运行,您可以继续使用Rewrite
规则 - 这取决于您的决定。如果您使用Redirect
指令,不要忘记末尾的斜线目标域名!下面是使用该Redirect
指令的 HTTPS VirtualHost 的示例。
<VirtualHost *:443>
ServerName thehatmakers.cz
Redirect permanent "/" "https://www.thehatmakers.cz/"
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/hosek/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hosek/privkey.pem
</VirtualHost>
对于这个 VirtualHost,您不需要任何其他东西。
该关键字
permanent
将指示客户端的浏览器下次自动执行此重定向。Redirect
= HTTP 302Redirect permanent
= HTTP 301