ServerAlias not working

У меня есть VPS, который я настроил для размещения нескольких веб-сайтов с хостингом на основе имен. Это все хорошо, только используя example.com и www.example.com. Он также работает с example.net, но когда я пробую example.net, он возвращается к конфигурации моего сайта по умолчанию, которая просто показывает мою страницу index.html по умолчанию (пустую).

Вот файл по умолчанию:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Вот конфигурация для сайта example.com:

    <VirtualHost *:80>
     ServerAdmin admin@example.com
     ServerName example.com
     ServerAlias www.example.com
     DocumentRoot /srv/www/example.com/public_html/
     ErrorLog /srv/www/example.com/logs/error.log
     CustomLog /srv/www/example.com/logs/access.log combined
<Directory /srv/www/example.com/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

А вот конфиг для сайта example.net:

<VirtualHost *:80>
     ServerAdmin admin@example.net
     ServerName example.net
     ServerAlias www.example.net
     DocumentRoot /srv/www/example.net/public_html/
     ErrorLog /srv/www/example.net/logs/error.log
     CustomLog /srv/www/example.net/logs/access.log combined
<Directory /srv/www/example.net/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

Где может быть проблема?

Я считаю, что что-то идет не так со свойством ServerAlias.

Может ли это быть из-за способа создания сайта? Потому что example.com - это сайт Joomla, а example.net - это сайт Zend Framework. На всякий случай я также вставлю файлы.htaccess для example.net, так как example.com отключен:example.net:

SetEnv APPLICATION_ENV development

RewriteRule  ^(browse|config).*  - [L]
ErrorDocument 500 /error-docs/500.shtml
SetEnv CACHE_OFFSET 2678400


<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Fri, 25 Sep 2037 19:30:32 GMT"
Header unset ETag
FileETag None
</FilesMatch>

RewriteEngine On
RewriteRule ^(adm|statistics) - [L]
RewriteRule ^/public/(.*)$ http://example.net/$1 [R]
RewriteRule ^(.*)$ public/$1 [L]

Любая помощь будет принята с благодарностью!

Редактировать Так что мой вопрос абсолютно ясен: проблема в том, что один сайт работает как с префиксом www, так и без него, а второй - нет. Я хотел бы знать, как включить работу второго сайта с префиксом www.

3 ответа

Решение

Убедитесь, что порядок приоритета в директивах конфигурации совпадает с тем, как Apache должен обрабатывать запрос - т.е. вам не повезет, если ваши директивы загрузятся следующим образом:

  • example.com
  • по умолчанию / всеохватывающий
  • universal.lv

Неважно, объявлены ли они в одном файле или нескольких файлах - до тех пор, пока "universal.lv" является последним, оно не будет достигнуто, потому что vhost по умолчанию /catch-all будет предшествовать ему.

Я обычно называю свою конфигурацию по умолчанию /catch-all "z-default.conf" (или, если у вас есть домен, начинающийся с "z", "zz" ... и т. Д.) По этой причине, чтобы убедиться, что он обрабатывается, только если нет другого совпадения с vhost

Попробуйте переименовать соответственно.


Обновлено: чтобы не путать с _default_ Директива VirtualHost

Используя подстановочный DNS, чтобы перенаправлять все запросы на example.com на IP-адрес сервера (перехватывает поддомен с неверным ключом), Apache анализирует следующие файлы конфигурации:

  • 000-default.conf - VirtualHost _default_:80 / ServerName <hostname> - перехватывать запросы к IP-адресу сервера (можно перенаправить на основной домен или просто заблокировать по умолчанию) Directory указано в conf.d/security)
  • example.conf - VirtualHost *:80 / ServerName www.example.com
  • example2.conf - VirtualHost *:80 / ServerName www.example2.com
  • zzz-example.conf - VirtualHost *:80 / ServerName example.com / ServerAlias *.example.com - перенаправляет на канонический домен www
  • zzz-example2.conf - VirtualHost *:80 / ServerName example2.com / ServerAlias *.example2.com - перенаправляет на канонический домен www

Как задокументировано, Apache выбирает первый соответствующий VirtualHost (т.е. _default_:80) но это поведение не желательно, если вы используете подстановочный знак в ServerAlias директивы.

Я рекомендую вам сначала прочитать документацию Apache по виртуальным хостам.

Отличный пример был приведен на http://httpd.apache.org/docs/2.2/vhosts/name-based.html:

NameVirtualHost *:80

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

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

Обратите внимание на часть NameVirtualHost. Ваш журнал ошибок (/var/log/apache2/error.log) должен был предупредить вас, что вы допустили возможную ошибку.

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

Вам нужно включить NameVirtualHost в httpd.conf - тогда вы можете определить несколько виртуальных хостов на одном и том же ip: порту.

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