2017-02-14 25 views
1

Я относительно новичок в марионетке и в настоящее время работает над модулем «puppetlabs-apache». Я пропускаю что-то, устанавливая как ssl, так и non-ssl на виртуальном хосте.Puppetlabs-Apache: включить и 80 и 443 для виртуального хоста

Manifest применяется:

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.

Если я закомментировать первую vhost определение site.mydomain.com для порта 80, он выдает ошибку:

Error 400 on SERVER: Duplicate declaration: Apache::Vhost[site2.mydomain.com] is already declared in file..

Не уверен, что я здесь отсутствует. Что делать, чтобы сделать это постоянное перенаправление?

http://site2.mydomain.com/ => https://site2.mydomain.com/ 

ответ

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]', 
} 

Вы также нужны эти дополнительные redirect атрибутов для ресурса виртуального хоста, отличного от ssl. Поскольку apache::vhost - это определенный тип ресурса без namevar, вы можете обойти проблему объявления нескольких ресурсов, используя два уникальных и чисто косметических ресурса.

+0

Спасибо так много. Я получаю эту идею, но есть одна небольшая проблема с этим. Это создаст 2 конфигурации виртуальных хостов [site.mydomain.com_ssl.conf, site.mydomain.com_non-ssl.conf] с ** Имя_сервера site.mydomain.com non-ssl ** и ** Имя_сервера site.mydomain. com ssl **, , который выдает ошибку, 'AH00526: Ошибка синтаксиса в строке 7 файла /etc/apache2/sites-enabled/25-site.mydomain.com_non-ssl.conf: ServerName принимает один аргумент, Имя хоста и порт сервера ' –

+0

@VineethVijayan Это буквально, как говорит документация для' puppetlabs-apache', чтобы решить вашу проблему. Либо эта ошибка синтаксиса файла-протокола возникает из-за того, что в нем есть проблема. Скорее всего, это похоже? –

+0

Ошибка имеет смысл, и вместо этого порт ввода работает. !! 'apache :: vhost {'site.mydomain.com:80' ...} apache :: vhost {'site.mydomain.com:443': ...}' –

0

Разработка ответа Мэтта и ошибки во время его работы заставили меня прийти к следующему ответу.

apache::vhost { 'site.mydomain.com:80' ... } 

apache::vhost { 'site.mydomain.com:443' : ...} 

Спасибо,