У меня есть виртуальный сервер, на который я хотел бы указать два домена, оба указывающие на разные сайты.
Например, 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, поэтому я сделал это как быстрое решение. Однако я хотел бы знать, как лучше всего это сделать?
да, 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 или подстановочные знаки.
однако с Индикация имени сервера, вы указываете серверу, какой хост вам нужен, в процессе подтверждения, и сервер может предоставить правильный сертификат. Кажется, что сервер вернется к сертификату по умолчанию, поэтому может быть хорошей стратегией, когда у вас есть «основной» 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.