Два сайта VirtualHost не работают вместе под Apache 2.4

Два сайта VirtualHost не работают вместе под Apache 2.4

Я использую 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 не нужно повторять, поскольку каждая последующая строка будет заменять предыдущие.

Вместо этого вы можете использовать ServerNamewith 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блоков и для использования каждым хостом собственных журналов ошибок.

Связанный контент