我对木偶比较陌生,目前正在制作'puppetlabs-apache'模块。我在虚拟主机上设置ssl和non-ssl时遗漏了一些东西。
Manifest apply:
include apache
include apache::mod::rewrite
#apache::vhost { 'site.mydomain.com':
# port => '80',
# docroot => '/var/www/site',
# rewrite_rule => '(.*) https://site.mydomain.com [R,L]',
#}
apache::vhost { 'site.mydomain.com':
port => '443',
ssl => true,
docroot => '/var/www/site',
docroot_owner => 'www-data',
docroot_group => 'www-data',
# rewrite_rule => '(.*) https://site.mydomain.com [R,L]',
}
问题是我不需要非ssl(80端口),但所有请求都应该重定向到443。
如果我为端口80注释掉vhost
的第一个site.mydomain.com
定义,则会抛出错误:
SERVER上的错误400:重复声明:Apache :: Vhost [site2.mydomain.com]已在文件中声明..
不确定我在这里缺少什么。我该怎么做才能实现永久重定向?
http://site2.mydomain.com/ => https://site2.mydomain.com/
答案 0 :(得分:1)
要配置虚拟主机以将未加密的连接重定向到SSL,请使用单独的apache::vhost
定义类型声明它们,并将未加密的请求重定向到启用了SSL的虚拟主机:
apache::vhost { 'site.mydomain.com:80':
servername => 'site.mydomain.com',
port => '80',
docroot => '/var/www/site',
rewrite_rule => '(.*) https://site.mydomain.com [R,L]',
redirect_status => 'permanent',
redirect_dest => 'https://site.mydomain.com'
}
apache::vhost { 'site.mydomain.com:443':
servername => 'site.mydomain.com',
port => '443',
ssl => true,
docroot => '/var/www/site',
docroot_owner => 'www-data',
docroot_group => 'www-data',
rewrite_rule => '(.*) https://site.mydomain.com [R,L]',
}
您还需要非ssl虚拟主机资源的其他redirect
属性。由于apache::vhost
是一个没有namevar
的已定义资源类型,因此您可以通过使用两个唯一且纯粹的化妆品资源标题来绕过多个资源声明问题。
答案 1 :(得分:0)
运行马特的答案和错误,让我得到了以下答案。
apache::vhost { 'site.mydomain.com:80' ... }
apache::vhost { 'site.mydomain.com:443' : ...}
谢谢,