Почему возникает ошибка Apache?

Почему моя стандартная конфигурация виртуальных хостов не работает, когда я указываю имя домена, но работает, когда использую *? Мне нужно настроить конфигурации для двух разных доменов (domain.ru и domain2.ru). Вот мой конфигурационный файл, который не работает для domain.ru:

<VirtualHost domain.ru:80>
	ServerName	domain.ru
	ServerAdmin	[email protected]
	ServerAlias	www.domain.ru

	DocumentRoot	/var/www/domain.ru
	<Directory /var/www/domain.ru>
		AllowOverride All
		Require all granted
	</Directory>

	ErrorLog /var/www/domain.ru-error.log
	CustomLog /var/www/domain.ru-access.log combined
</VirtualHost>

И вот конфигурация, которая работает для domain.ru:

<VirtualHost *:80>
	ServerName	domain.ru
	ServerAdmin	[email protected]
	ServerAlias	www.domain.ru

	DocumentRoot	/var/www/domain.ru
	<Directory /var/www/domain.ru>
		AllowOverride All
		Require all granted
	</Directory>

	ErrorLog /var/www/domain.ru-error.log
	CustomLog /var/www/domain.ru-access.log combined
</VirtualHost>

Как мне настроить конфигурации для обоих доменов (domain.ru и domain2.ru)?
  • 22 января 2024 г. 11:28
Ответы на вопрос 3
В конфигурационном файле Apache виртуальный хост может быть настроен либо на прослушивание всех интерфейсов и портов (`*:80`), либо на определенный IP-адрес и порт. Когда вы указываете имя домена (`domain.ru:80`) в директиве `<VirtualHost>`, вы фактически указываете Apache привязаться к IP-адресу, соответствующему данному доменному имени, который он должен разрешить через DNS.

В большинстве случаев для конфигурации виртуальных хостов используется обозначение `*:80`. Это подходит для большинства настроек, так как оно говорит Apache принимать запросы на любом сетевом интерфейсе сервера. Это упрощает распределение запросов по доменным именам на основании заголовков `Host`, предоставляемых клиентами.

Если ваш конфиг с `<VirtualHost domain.ru:80>` не работает, вероятно, это связано с тем, что Apache не может разрешить домен `domain.ru` в IP-адрес на момент запуска или не имеет прав привязаться к разрешенному IP-адресу. Если сервер настроен на использование динамического IP или за NAT, то он может не знать ассоциированный с доменом внешний IP, который определен у вашего DNS-провайдера. 

Чтобы настроить виртуальные хосты для `domain.ru` и `domain2.ru`, вам следует создать два блока конфигурации `<VirtualHost *:80>`, один для каждого домена:

```apache
<VirtualHost *:80>
	ServerName domain.ru
	ServerAlias www.domain.ru
	DocumentRoot /var/www/domain.ru
	<Directory /var/www/domain.ru>
		AllowOverride All
		Require all granted
	</Directory>
	# Остальные настройки...
</VirtualHost>

<VirtualHost *:80>
	ServerName domain2.ru
	ServerAlias www.domain2.ru
	DocumentRoot /var/www/domain2.ru
	<Directory /var/www/domain2.ru>
		AllowOverride All
		Require all granted
	</Directory>
	# Остальные настройки...
</VirtualHost>
```

Убедитесь, что у вас установлены DNS-записи для `domain.ru` и `domain2.ru`, чтобы они указывали на IP-адрес вашего веб-сервера Apache.

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

```bash
sudo apachectl restart
```

или для некоторых систем:

```bash
sudo service apache2 restart
```

Не забудьте также проверить конфигурацию на предмет ошибок, прежде чем перезапускать Apache:

```bash
sudo apachectl configtest
```

Это сообщит вам, если есть какие-либо синтаксические ошибки в ваших конфигурационных файлах.
ошибка в том, что в VirtualHost указываются ip-адреса и/или порты, для разруливания по доменам используются как раз ServerName и ServerAlias 

т.е. не нужно пытаться запихнуть в VirtualHost доменное имя из ServerName
а мне нужно две конфигурации, для разных доменов.

Хмм может для двух доменов два конфига,я не претендую на гениальность но помоем это очевидно
Похожие вопросы