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

ServerAlias ​​не работает

У меня есть 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 префикс.

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

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

Не имеет значения, объявлены ли они в одном файле или в нескольких файлах - пока "universal.lv" является последним, он не будет достигнут, потому что ему будет предшествовать виртуальный хост по умолчанию / 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>

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

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

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