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

Как указать 2 разных домена на 1 IP-адрес (Apache)?

У меня два разных доменных имени, которые я хочу разместить на одном и том же частном хостинге. Я хочу, чтобы они указывали на один и тот же IP-адрес, но при этом имели разный контент (конечно). Как я могу это сделать? Есть разные способы сделать это? В таком случае, как лучше всего. Спасибо.

Apache2 поддерживает обслуживание различного содержимого в зависимости от доменных имен, даже если все эти домены относятся к одному и тому же IP-адресу. Каждое из доменных имен обрабатывается виртуальный хост, таким образом, имя виртуальный хост на основе имени.

Вот пример конфигурации для двух доменов:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName www.yourfirstdomain.tld
  DocumentRoot /www/yourfirstdomain.tld/
</VirtualHost>

<VirtualHost *:80>
  ServerName www.yourseconddomain.tld
  DocumentRoot /www/yourseconddomain.tld/
</VirtualHost>

Вы найдете официальную документацию на поддержка виртуального хоста на основе имени здесь.

Однако обратите внимание, что это будет работать только с обычными HTTP-соединениями, а не с HTTPS (HTTP через SSL): виртуальные хосты на основе имен полагаются на знание того, какое имя запрашивается, но эта информация не может быть известна Apache, пока не будет зашифрован SSL соединение установлено.

Если вам нужно, чтобы ваша установка также работала с HTTPS, вам нужно полагаться на расширение протокола SSL, называемое Индикация имени сервера (SNI) (RFC4366). По сути, клиенты с поддержкой SNI (например, веб-браузеры) добавляют дополнительную текстовую информацию при установке зашифрованного SSL-соединения, позволяя серверу узнать запрошенное имя до того, как SSL-соединение будет готово.

Все браузеры пока не поддерживают SNI. На момент написания и согласно Википедии, эти:

  • Internet Explorer 7 или новее, в Windows Vista или новее (не работает в XP, даже IE 8)
  • Mozilla Firefox 2.0 или новее
  • Opera 8.0 или новее (должен быть включен протокол TLS 1.1)
  • Opera Mobile не ниже версии 10.1 beta на Android
  • Google Chrome (Vista или выше, XP в Chrome 6 или новее, OS X 10.5.7 или выше в Chrome 5.0.342.1 или новее)
  • Safari 2.1 или новее (Mac OS X 10.5.6 или новее и Windows Vista или новее)
  • Konqueror / KDE 4.7 или новее
  • MobileSafari в Apple iOS 4.0 или новее
  • Браузер Android по умолчанию на Honeycomb (v3.x) или новее
  • Windows Phone 7
  • MicroB на Maemo

Для размещения нескольких виртуальных хостов на основе имен, доступных через HTTPS, необходимо включить mod_ssl и добавить конфигурацию, аналогичную приведенной в примере выше:

Listen 443      
NameVirtualHost *:443

# Accept connections for these vhosts from non-SNI clients
# Clients without SNI will be handled by the first defined vhost.
# If you only want SNI-enabled client, put on instead
SSLStrictSNIVHostCheck off

<VirtualHost *:443>
  ServerName www.yourfirstdomain.tld
  DocumentRoot /www/yourfirstdomain.tld/    
</VirtualHost>

<VirtualHost *:443>
  ServerName www.yourseconddomain.tld
  DocumentRoot /www/yourseconddomain.tld/
</VirtualHost>

Помните, что использование SSL требует, чтобы вы купили SSL-сертификаты для своих доменов или сгенерировали несколько автоматически подписанных сертификатов и настроили Apache для использования их для SSL-соединений.

Вероятно, вы захотите использовать виртуальный хостинг Apache. Это хорошо поддерживаемый метод для размещения множества доменов на одном IP-адресе.

http://httpd.apache.org/docs/2.2/vhosts/

В частности, виртуальные хосты на основе имен: http://httpd.apache.org/docs/2.2/vhosts/name-based.html