Apache2 з SSL Чи потрібно копіювати блоки VirtualHost?


18

У Apache2 в ubuntu я прослуховую свій сайт на 80, і тепер я хочу додати SSL. Чи є спосіб включити SSLEngine для порту 443, тому мені не доведеться копіювати весь блок VirtualHost?

Коли я це роблю:

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
  SSLEngine On
  ... a bunch more lines...
</VirtualHost>

Увімкнено SSLEngine для порту 80. Чи існує спосіб використання лише одного блоку VirtualHost, а лише включення SSLEngine для порту 443? То я можу зробити щось подібне?

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
   <IfPort 443>
      SSLEngine On
   </IfPort>
   ... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>

Відповіді:


14

Ви не можете змусити одного vhost робити як HTTP, так і HTTPS, оскільки вони є окремими vhosts, що обслуговують окремі протоколи. Натомість ви повинні помістити всю загальну конфігурацію в окремий файл, а потім включити цей файл як у SSL, так і в не-SSL vhosts для домену.

Мінімальний приклад:

# /etc/apache2/sites-available/example.com
<VirtualHost *:80>
  Include /etc/apache2/domains/example.com
</VirtualHost>

<VirtualHost 192.0.2.1:443>
  SSLEngine On
  SSLCertificateFile /etc/ssl/example.com_crt
  SSLCertificateKeyFile /etc/ssh/example.com_key

  Include /etc/apache2/domains/example.com
</VirtualHost>

# /etc/apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com

ServerAdmin webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log

Чи можете ви надати короткий приклад того, як має виглядати файл? Чи потрібна обгортка VirtualHost, чи я просто повинен перемістити всі рядки до неї без обгортки?
Дар

1
Я додав приклад до своєї відповіді.
живіт

1

Як я вже згадував у іншому питанні про stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Інший варіант замість використання Include- це використання Macro(так що ви можете зберегти все це в одному файлі).

Спочатку ввімкніть макромодуль:

a2enmod macro

Потім помістіть ваші спільні речі в макрос, і useце з ваших віртуальних хостів:

<Macro SharedStuff>
   ServerName example.com
   ServerAdmin example@example.com
   <DocumentRoot /var/www/example>
      ...
   </DocumentRoot>
</Macro>

<VirtualHost *:80>
  Use SharedStuff
</VirtualHost>

<VirtualHost *:443>
  Use SharedStuff

  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ...
</VirtualHost>

Макроси також можуть приймати параметри та визначатись у інших файлах, які включені; тож ви можете використовувати їх трохи як Functions, а також зберегти багато дублювання в усіх конфігураційних файлах Apache.

Детальніше дивіться тут:

https://httpd.apache.org/docs/2.4/mod/mod_macro.html


0

Ви можете розмістити параметри каталогу у <Directory>блоці поза будь-якими <VirtualHost>блоками. Це застосовуватиме їх до всіх віртуальних хостів, але лише всередині зазначеного шляху.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.