Apache VirtualHost Root-, WWW- und Subdomain-Setup einschließlich http bis https

Jan 21 2020

Ich stecke ziemlich fest. Würde mich über Hilfe freuen.

Zwei Websites (WordPress und ein anderes PHP-Tool) auf einer AWS EC2 Ubuntu 18.04-Instanz, auf der der LAMP-Stack ausgeführt wird.

Meine Absicht ist es zu erreichen:

  • http://www.example.com
  • http://example.com
  • https://www.example.com

zu : https://example.com.

UND

  • http://app.example.com

zu : https://app.example.com.

Ich hatte virtualhost so konfiguriert und funktionierte wie beabsichtigt. Dann erstellte ich das https-Zertifikat über letsencrypt, mit dem die HTTP-zu-HTTPS-Weiterleitungen eingerichtet wurden.

HTTP alle leiten zu HTTPS um.

https://app.example.com wird auf die beabsichtigte Website aufgelöst - website1.

https://example.comwird nicht in website2 aufgelöst - es wird in website1 aufgelöst - beachten Sie, dass es nicht zur App umgeleitet wird. aber zeigt website1 auf https://example.com.

Ich habe zwei virtualhost conf-Dateien, eine für jede Site. Beide enthalten jeweils die Konfiguration der Standorte 80 und 443, sie sind unten aufgeführt.

Das SSL - Zertifikat hat den gemeinsamen Namen example.com und Listen alternativer Namen für app.example.com, www.example.comund example.com.

DNS hat example.com Azu - Server - IP, www.und app.sind CNAMEzu example.com.

app.example.com.conf - Website 1

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/website1/
ServerName example.com
ServerAlias app.example.com
<Directory /var/www/website1/>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =app.example.com [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/website1
ServerName example.com
ServerAlias app.example.com
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website1/>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

example.com.conf - Website 2

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

Ich würde mich über jede Hilfe, Anregungen und andere Ideen sehr freuen!

Antworten

1 MrWhite Jan 22 2020 at 02:01

https://example.comwird nicht in website2 aufgelöst - es wird in website1 aufgelöst - beachten Sie, dass es nicht zur App umgeleitet wird. aber zeigt website1 aufhttps://example.com

Ja, da alle Ihre vHosts example.comals definiert sind ServerNameund ich erwarte, dass website1 zuerst in der Konfiguration angezeigt wird.

Für app.example.com.conf (Website 1) sollten Sie ServerName app.example.comdie ServerAliasDirektive für die Container vhost: 80 und vhost: 443 insgesamt festlegen und entfernen .

Die HTTP-zu-HTTPS-Umleitung im Container vhost: 80:

RewriteEngine on
RewriteCond %{SERVER_NAME} =app.example.com [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Kann zu einer einzigen mod_alias- RedirectDirektive vereinfacht werden :

Redirect 301 / https://app.example.com/

Zum Beispiel.com.conf (Website 2) haben Sie die Container vhost: 80 und vhost: 443 dupliziert und jeweils definiert ServerName example.com- dies ist ein Fehler. Es ist durchaus möglich, 4 Container wie diesen zu haben (und mod_alias- RedirectDirektiven zu verwenden), aber Sie würden ServerNamefür jeden vHost eindeutige Direktiven benötigen und die Wiederholung reduzieren.

Aus Ihrer Sicht ist es wahrscheinlich am einfachsten, den zweiten (doppelten) Container vhost: 80 und vhost: 443 zu entfernen und in den verbleibenden Containern vhost: 80 und vhost: 443 Folgendes festzulegen.

ServerName example.com
ServerAlias www.example.com

Ich habe dann das https-Zertifikat über letsencrypt erstellt, das die HTTP-zu-HTTPS-Weiterleitungen einrichtet

Das Erstellen des SSL-Zertifikats mit LetsEncrypt sollte nicht "HTTP-zu-HTTPS-Weiterleitungen einrichten" haben.