Как настроить apache (vhost) для имени сервера-хоста

Прежде всего, извините за мой несовершенный английский. Но позвольте мне объяснить мою проблему с Apache Vhosts.

Пример: мое имя сервера - example.de (/etc/hostname). Если я настрою для этого конкретного домена, мой vhost не будет работать. Кажется, Apache использует default-vhost. Но мне нужен default-vhost для страниц, которые не активны на моем сервере. Поэтому я не могу использовать его для домена example.de

Мне нужно решение для следующей проблемы:

  • example.de - должен указывать на / var / www / example (это не работает, потому что / etc / hostanme)
  • example2.de - должен указывать на /var/www/example2 (это работает)
  • domain-i-got-but-not-active.de Должен указывать на /var/www/default (Это работает, но также перехватывает example.de)

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

Вот пример моего vhost:

 # For default-pages
 <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/default
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/default>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

# Doesn´t work, points to default (above code)
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.de
        DocumentRoot /var/www/example
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/example>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

# All fine
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example2.de
        DocumentRoot /var/www/example2
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/example2>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

2 ответа

Согласно документации Apache:

Если имя сервера не указано, сервер пытается определить имя хоста, выполнив обратный поиск по IP-адресу.

Обратный просмотр: найдите IP-адрес, чтобы найти доменное имя для IP-адреса.

Я думаю, именно поэтому example.de обслуживается по умолчанию VirtualHostтак что попробуйте добавить ServerName domain-i-got-but-not-active.deи если это VirtualHost определяется первым:

он имеет наивысший приоритет и может рассматриваться как сервер по умолчанию или основной сервер. Это означает, что если получен запрос, который не соответствует ни одной из указанных директив ServerName, он будет обслуживаться этим первым VirtualHost.

<VirtualHost *:80>
    DocumentRoot /var/www/example
    DirectoryIndex index.php
    ServerName example.de 
    setEnv DOMAIN_NAME example.de 
   <Directory "/var/www/example">
         Options Indexes FollowSymLinks MultiViews
         AllowOverride All
         Order allow,deny
         allow from all
         Require all granted
  </Directory>
  </VirtualHost>

попробуй это

Другие вопросы по тегам