Zwei VirtualHost-Websites funktionieren unter Apache 2.4 nicht zusammen

Zwei VirtualHost-Websites funktionieren unter Apache 2.4 nicht zusammen

Ich verwende Apache 2.4 unter Ubuntu 18.04

Ich habe das Problem, dass alle Adressen, die ich in die Browserleiste eingebe, umgeleitet werden aufeinsder beiden von mir konfigurierten Websites (in diesem Fall other-sitewird mir jedes Mal, wenn ich eine Adresse eingebe, zu der weitergeleitet werden soll, nur die Website unter angezeigt jekyll.)

Zum Beispiel:

  • beim Tippen jekyllim Browser wird mir wie erwartet die Jekyll-Website angezeigt
  • Tippen other-siteim Browserzeigt mir auch die Jekyll-Website, obwohl ein anderer VirtualHost auf diesen Namen lauscht

Ich habe diesezwei getrennte Standorteals VHosts konfiguriert unter /etc/apache2/sites-available(beideermöglichtüber 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>
    
  • andere-site.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>
    

Ich habe außerdem diese Einträge hinzugefügt, /etc/hostsdamit localhost zu jeder Site umgeleitet wird:

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

Antwort1

Das ServerNameAttribut in Ihren Apache-Konfigurationsdateien muss nicht wiederholt werden, da jede nachfolgende Zeile die vorherigen ersetzt.

Stattdessen können Sie „ ServerNamewith ServerAlias“ wie folgt verwenden:

ServerName jekyll
ServerAlias jekyll.local *.jekyll *.jekyll.local

Beachten Sie, dass dies unlogisch ist:

127.0.0.1       localhost/jekyll
127.0.0.1       localhost/other-site

Dies sind keine Domänen (oder Subdomänen), sondern Pfade unter localhost. Daher localhostwird nur beachtet. Aus diesem Grund habe ich es, wie oben erwähnt, nicht in die Apache-Konfiguration aufgenommen.

Wenn Sie dies im Hinterkopf behalten, können SiedreiApache-Konfigurationsdateien:

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 verarbeitet den Datenverkehr basierend auf der Reihenfolge der Konfigurationsdateien. Alle Domänen, die mit den in angegebenen übereinstimmen, 000-jekyll.confwerden also von dieser Datei verarbeitet. Wenn keine Übereinstimmungen gefunden werden, 001-other.confwird überprüft. Wenn keine Übereinstimmungen gefunden werden, 999-default.confwird verwendet. Beachten Sie das ServerAliasin der 999-default.confDatei und wie es auf weit geöffneten Platzhaltern basiert. Dies bedeutet, dass es als Sammelbegriff für den Datenverkehr behandelt wird, der nicht mit den definierten Konfigurationsdateien übereinstimmt.

Notiz:Die Apache-Konfigurationsdateien wurden optimiert, um irrelevante DirectoryBlöcke zu eliminieren und jedem Host die Verwendung eigener Fehlerprotokolle zu ermöglichen.

verwandte Informationen