Назад | Перейти на главную страницу

SSL и ServerAlias ​​на одном сервере Apache с несколькими доменами

У меня есть виртуальный сервер, на который я хотел бы указать два домена, оба указывающие на разные сайты.

Например, example1.com идет в /var/www/example1. example2.com идет в /var/www/example2.

Я отлично справлюсь с VirtualHosts:

<VirtualHost *:80>
    ServerName example1.com
    DocumentRoot "/var/www/example1"
</VirtualHost>

<VirtualHost *:80>
    ServerName example2.com
    DocumentRoot "/var/www/example2"
</VirtualHost>

Мой первый вопрос касается ведущего www. Чтобы включить поддержку www, Я только что добавил ServerAlias:

<VirtualHost *:80>
    ServerName example1.com
    ServerAlias www.example1.com
    DocumentRoot "/var/www/example1"
</VirtualHost>

Это лучший способ сделать это?

Второй вопрос касается SSL. Я так же хотел бы example2.com для доступа через SSL: https://example2.com. Я выдал сертификат и т. Д., Но как мне этого добиться в моем httpd.conf файл? На данный момент у меня есть временное решение. Я только что сменил основную DocumentRoot указать на это /var/www/example2. Я понимаю, что SSL находится на другом порту, поэтому он не будет интерпретироваться определением VirtualHost, поэтому я сделал это как быстрое решение. Однако я хотел бы знать, как лучше всего это сделать?

  1. да, ServerAlias ​​- стандартный способ добиться этого. Иногда предпочтительнее выбрать www.myserver.com в качестве «наиболее предпочтительного» идентификатора и использовать «myserver.com» в качестве псевдонима, но на самом деле это ничем не отличается, если вы не канонизируете (конвертируете ссылки в предпочтительные) URL-адреса в какой-то момент. .

    2.

Изменить: похоже, я неправильно понял вопрос OP, поэтому это в основном не имеет значения

короткий ответ (для размещения нескольких сайтов SSL на одном сервере apache)

  • Самое простое решение - это виртуальные хосты на основе IP ... поддерживает все браузеры - попросите у вашего интернет-провайдера второй IP-адрес. Таким образом, у вас есть 1 IP-адрес на сертификат SSL. См. Ниже пример config.

  • Индикация имени сервера - не XP или старый сафари, или старый android - работает только с 1 IP - http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Длинный ответ (и мальчик, я увлекся этим ответом ... ;-) вот краткий учебник по SSL и именам виртуальных хостингов ....

Виртуальный хостинг на основе имени - это стратегия совместного использования веб-сервера между веб-сайтами на основе заголовка «Хост», представленного клиентом (т.е. веб-браузером и т. Д.).

Это расширение HTTP 1.1, и для его использования apache считывает содержимое запроса и анализирует заголовок, т.е. он выглядит так;

GET /index.htm HTTP/1.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0
Host: www.google.co.uk            <--  apache checks this value 

Однако с Рукопожатие TLS Используемый в соединениях SSL, сервер идентифицирует себя перед отправкой заголовка Host, используя поле «общее имя» в сертификате SSL.

Следовательно (с использованием традиционного ... SSL v1, старых браузеров и т.д., Windows XP) может быть только 1 удостоверение SSL на IP-адрес, потому что первое, что делает сервер, это идентифицирует себя, скажем, www.amazon.com, который он не может изменить. потом ...

В основном отличия такие, в нормальном http://myserver.com Запросы

client: hello server   
server: hello client   
client: please give me web XXX   
server: here is websiteXXX    

но для запросов https: // это больше похоже на это;

client: hello server   
server: I am website XXX   
client: ok, go ahead and give me website XXX   
server: here is websiteXXX   

Итак, в основном, для "поддержки всех браузеров", в том числе старых старых, Вам необходимо попросить своего интернет-провайдера предоставить другой общедоступный IP-адрес. а затем привяжите свой второй виртуальный хост ко второму ip вместо первого ...

Однако есть несколько альтернатив, которые позволяют использовать несколько SSL-идентификаторов на одном IP-адресе, которые работают в большинстве современных браузеров, например сертификаты SNI или подстановочные знаки.

  • сертификаты с подстановочными знаками, не подходящие в этой конкретной ситуации, потому что имена серверов относятся к уровню домена, например badger.com и monkey.com, а не badger.server.com и monkey.server.com

однако с Индикация имени сервера, вы указываете серверу, какой хост вам нужен, в процессе подтверждения, и сервер может предоставить правильный сертификат. Кажется, что сервер вернется к сертификату по умолчанию, поэтому может быть хорошей стратегией, когда у вас есть «основной» SSL-сайт, и менее важный, на котором вы можете принять некоторую потерю пользовательских запросов.

В основном директивы для добавления виртуальных хостов SSL аналогичны, за исключением того, что вы добавляете просто виртуальные хосты, а не NameVirtualHosts.

#if not done elsewhere in httpd.conf incldue these
Listen 443
LoadModule ssl_module   modules/mod_ssl.so

#this does work for wildcard SSL certs like *.myserver.com (and SNI???)
NameVirtualHost *:443

<VirtualHost 1.1.1.1:443>
  SSLEngine On
  ServerName address1.com
  DocumentRoot /var/www/adderss2
  SSLCertificateFile /etc/httpd/conf/domaina_ssl/zimbra.zmb.moc.crt
</VirtualHost>

<VirtualHost 1.1.1.2:443>
  SSLEngine on
  ServerName address2.com
  DocumentRoot /var/www/adderss2
  SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>

Ваш ServerAlias ​​для www совершенно нормален; не беспокойся. Если вы хотите проявить фантазию, вы можете настроить RewriteRule для направления трафика с www.example.com на example.com или наоборот. Что касается поддержки SSL, используйте отдельные определения VirtualHost для виртуальных хостов: 80 и: 443.