
Я использую Apache 2.4 под Ubuntu 18.04.
У меня возникла проблема: все адреса, которые я ввожу в строку браузера, перенаправляются наодиниз двух веб-сайтов, которые я настроил (в этом случае всякий раз, когда я ввожу адрес, который должен перенаправлять на other-site
, мне отображается jekyll
только веб-сайт под .)
Например:
- при наборе текста
jekyll
в браузере отображается сайт jekyll, как и ожидалось - печатаю
other-site
в браузеретакже показывает мне сайт jekyll, даже если есть другой VirtualHost, прослушивающий это имя
У меня есть этидва отдельных сайтанастроены как VHosts в /etc/apache2/sites-available
(оба из нихвключенос помощью a2ensite
)
jekyll.conf
<VirtualHost *:80> DirectoryIndex index.html DocumentRoot /var/www/jekyll/_site LimitRequestFieldSize 48000 <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/jekyll/_site> AllowOverride All Order allow,deny allow from all </Directory> <Directory /var/www/jekyll/_site/> Order allow,deny allow from all </Directory> ServerName jekyll ServerName http://jekyll ServerName http://localhost/jekyll ServerAdmin webmaster@localhost </VirtualHost>
другой-сайт.conf
<VirtualHost *:80> DirectoryIndex index.html DocumentRoot /var/www/other-site/_site LimitRequestFieldSize 48000 <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/other-site/_site> AllowOverride All Order allow,deny allow from all </Directory> <Directory /var/www/other-site/_site/> Order allow,deny allow from all </Directory> ServerName other-site ServerName http://other-site ServerName http://localhost/other-site ServerAdmin webmaster@localhost </VirtualHost>
Я также добавил эти записи, /etc/hosts
чтобы localhost перенаправлялся на каждый сайт:
127.0.0.1 localhost
127.0.0.1 localhost/jekyll
127.0.0.1 localhost/other-site
127.0.0.1 jekyll
127.0.0.1 other-site
127.0.1.1 felipe-Inspiron-7559
решение1
Атрибут ServerName
в файлах конфигурации Apache не нужно повторять, поскольку каждая последующая строка будет заменять предыдущие.
Вместо этого вы можете использовать ServerName
with ServerAlias
следующим образом:
ServerName jekyll
ServerAlias jekyll.local *.jekyll *.jekyll.local
Обратите внимание, что это нелогично:
127.0.0.1 localhost/jekyll
127.0.0.1 localhost/other-site
Это не домены (или поддомены), а пути под localhost
. В результате localhost
будет наблюдаться только . Вот почему я не включил его в конфигурацию Apache, как указано выше.
Итак, имея это в виду, вы можете иметьтриФайлы конфигурации Apache:
⇢000-jekyll.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName jekyll
ServerAlias jekyll.local *.jekyll *.jekyll.local
DirectoryIndex index.html
DocumentRoot /var/www/jekyll/_site
LimitRequestFieldSize 48000
<Directory /var/www/jekyll/_site>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/jekyll-error.log
CustomLog ${APACHE_LOG_DIR}/jekyll-access.log combined
</VirtualHost>
⇢001-other.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName other-site
ServerAlias other-site.local *.other-site *.other-site.local
DirectoryIndex index.html
DocumentRoot /var/www/other-site/_site
LimitRequestFieldSize 48000
<Directory /var/www/other-site/_site>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/other-error.log
CustomLog ${APACHE_LOG_DIR}/other-access.log combined
</VirtualHost>
⇢999-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName localhost
ServerAlias *.localhost * *.*
DirectoryIndex index.html
DocumentRoot /var/www
LimitRequestFieldSize 48000
<Directory /var/www>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/local-error.log
CustomLog ${APACHE_LOG_DIR}/local-access.log combined
</VirtualHost>
Apache обрабатывает трафик на основе порядка файлов конфигурации. Таким образом, любой домен, соответствующий указанным в , 000-jekyll.conf
будет обработан этим файлом. Если совпадений не найдено, то 001-other.conf
будет проверено. Если совпадений не найдено, то 999-default.conf
будет использовано. Обратите внимание на ServerAlias
в 999-default.conf
файле и на то, как он опирается на широко открытые подстановочные знаки. Это означает, что он будет рассматриваться как всеобъемлющий для трафика, который не соответствует определенным файлам конфигурации.
Примечание:Файлы конфигурации Apache были оптимизированы для устранения ненужных Directory
блоков и для использования каждым хостом собственных журналов ошибок.