Zwei Laravel Projekte auf einem Apache2 Webserver

Die gleiche IP Adresse aber zwei unterschiedliche URLs die auf unterschiedliche Projekte zeigen? Mit SSL Verschlüsselung? Ja, das ist relativ leicht machbar, wenn man weiß wie. Die Beschreibungen im Netz dazu sind oft nur für ein Projekt auf einem Server.

1) SSL Zertifikate

Sobald Du dein SSL Zertifikat per Mail erhalten hast, kannst Du es für deine Domain entsprechend einbinden. Dafür gibt es einige Anleitungen die ganz verlässlich funktionieren. Am Ende brauchst Du nur noch 3 Dateien:

  • a) dein privater Key, den Du erzeugt hast (*.key)
  • b) das Zertifikat welches per E-Mail kam (*.crt)
  • c) das Server Zertifikat, meist 'Intermediate' (*.crt)
  • Die 3 Dateien legst Du am besten auf deinem Server ab, z.b. in einem Ordner den Du dir erstellst á la : mkdir /etc/zertfikate/ssl/project1 . Um nicht durcheinander zu kommen, kannst Du für jedes Projekt einen Ordner anlegen und entsprechende Zertifikate dort ablegen.

    2) Virtual Hosts

    Unverschlüsselt über http PORT 80

    Um deine erste Website über deine erste URL erreichbar zu machen, erstellen wir eine conf Datei im Apache2 - SitesAvailable Ordner und fügen diese zum Server hinzu. Damit sagst Du dem Server, welches Projekt bei welcher URL angezeigt werden soll. Damit das funktioniert ist es wichtig den ServerName festzulegen und später in der ServerHost Datei entsprechend der IP Adresse des Servers zu zu ordnen. Zu erst erstellst Du aber z.b. die .conf Datei 'project1.conf' mit vim oder nano oder sonstigen Editoren auf deinem Server:
    vim /etc/apache2/sites-available/project1.conf

    Der folgende Inhalt der Datei wird dein Laravel PHP Projekt aufrufen sobald die URL aufgerufen wird:

                    
                    <VirtualHost *:80\>                
    
                                ServerName project1
                                ServerAlias www.project1.de
                                DocumentRoot "/var/www/project1/public"
    
                      <Directory /var/www/project1>  
                                Options Indexes FollowSymLinks MultiViews
                                AllowOverride All
                                Order allow,deny
                                allow from all
                                Require all granted
                      </Directory>  
    
                            ErrorLog ${APACHE_LOG_DIR}/error.log
                            CustomLog ${APACHE_LOG_DIR}/access.log combined               
    
                   </VirtualHost>  
                   
                  
    Das gleiche machen wir für das zweite Projekt, welches über eine andere URL aufgerufen wird: vim /etc/apache2/sites-available/project2.conf

                    
                    <VirtualHost *:80\>                
    
                                ServerName project2
                                ServerAlias www.project2.de
                                DocumentRoot "/var/www/project2/public"
    
                      <Directory /var/www/project2>  
                                Options Indexes FollowSymLinks MultiViews
                                AllowOverride All
                                Order allow,deny
                                allow from all
                                Require all granted
                      </Directory>  
    
                            ErrorLog ${APACHE_LOG_DIR}/error.log
                            CustomLog ${APACHE_LOG_DIR}/access.log combined               
    
                   </VirtualHost>  
                   
                  

    SSL verschlüsselt über https PORT 443

    Wenn Du SSL Zertifikate in einem Ordner für dein Projekt1 angelegt hast, musst du dem Server sagen wo er diese findet. Hier ist besonders zu beachten beim ServerName die URL anzugeben, also z.b. www.project1.de.
    vim /etc/apache2/sites-available/project1-ssl.conf

    
                 <IfModule mod_ssl.c>
                   <VirtualHost *:444>
                       ServerAdmin webmaster@localhost
                       ServerName www.project1.de
                       DocumentRoot /var/www/project1/public
                                       
                        <Directory /var/www/project1>
                              Options Indexes FollowSymLinks MultiViews
                              AllowOverride All
                              Order allow,deny
                              allow from all
                        </Directory>
    
                        ErrorLog ${APACHE_LOG_DIR}/error.log
                        CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
    
                        SSLEngine on
                        SSLCertificateFile    /etc/zertfikate/ssl/project1/certficate.crt
                        SSLCertificateKeyFile /etc/zertfikate/ssl/project1/project1.key
                        SSLCACertificateFile /etc/zertfikate/ssl/project1/intermediateCA.crt
    
                                    
                        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                            SSLOptions +StdEnvVars
                        </FilesMatch>
                        <Directory /usr/lib/cgi-bin>
                            SSLOptions +StdEnvVars
                        </Directory>
    
                        BrowserMatch "MSIE [2-6]" \
                            nokeepalive ssl-unclean-shutdown \
                            downgrade-1.0 force-response-1.0
                        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    
                        </VirtualHost>
                  </IfModule>
                
    Das gleiche wiederholst Du für dein zweites Projekt, gibst aber die anderen 3 SSL Dateien (Key, Zertifikat, Serverzertifikat) an.
    vim /etc/apache2/sites-available/project2-ssl.conf

    
                 <IfModule mod_ssl.c>
                   <VirtualHost *:444>
                       ServerAdmin webmaster@localhost
                       ServerName www.project2.de
                       DocumentRoot /var/www/project2/public
                                       
                        <Directory /var/www/project2>
                              Options Indexes FollowSymLinks MultiViews
                              AllowOverride All
                              Order allow,deny
                              allow from all
                        </Directory>
    
                        ErrorLog ${APACHE_LOG_DIR}/error.log
                        CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
    
                        SSLEngine on
                        SSLCertificateFile    /etc/zertfikate/ssl/project2/certficate.crt
                        SSLCertificateKeyFile /etc/zertfikate/ssl/project2/project2.key
                        SSLCACertificateFile /etc/zertfikate/ssl/project2/intermediateCA.crt
    
                                    
                        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                            SSLOptions +StdEnvVars
                        </FilesMatch>
                        <Directory /usr/lib/cgi-bin>
                            SSLOptions +StdEnvVars
                        </Directory>
    
                        BrowserMatch "MSIE [2-6]" \
                            nokeepalive ssl-unclean-shutdown \
                            downgrade-1.0 force-response-1.0
                        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    
                        </VirtualHost>
                  </IfModule>
                

    3) Server Host & Port File

    Du musst auf deinem Server noch mod ssl aktivieren mit sudo a2enmod ssl und der Konfiguration von vim /etc/apache2/ports.conf mit
    
                         <IfModule ssl_module>
                            Listen 443
                         </IfModule>
    
                      
    Danach kannst Du die host Datei editieren und deine Projekte der IP Adresse des Servers zuweisen:
    vim /etc/hosts
    10.200.300.400 project1 project2

    Durch hinzufügen der Dateien und Neustart des Servers sollten deine URLs auf die entsprechenden Projekte verweisen.
    sudo a2ensite project1.conf
    sudo a2ensite project2.conf
    sudo a2ensite project1-ssl.conf
    sudo a2ensite project2-ssl.conf
    sudo service apache2 restart

    4) .htaccess von jedem Projekt

    Um ggf. noch eine Umleitung von Subdomains und auf HTTPS zu erzwingen, kannst Du die .htaccess deiner Projekte jeweils entsprechend bearbeiten. vim /var/www/project1/public/.htaccess
    
    
                         <IfModule mod_rewrite.c>
                           Options +FollowSymLinks
                           RewriteEngine On
                         </IfModule>
    
                         <IfModule mod_rewrite.c>
    
    
                            <IfModule mod_negotiation.c>
                                Options -MultiViews
                            </IfModule>
    
                            RewriteEngine On
                            RewriteCond %{HTTP_HOST} !^www\project1\.(de)$ [NC] 
                            RewriteCond %{SERVER_PORT} !443
                            RewriteRule ^(.*)$ https://www.project1.de/$1 [L,R=301]    
                            RewriteCond %{HTTPS} off
                            RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
                          #WICHTIG: für das schreiben der routes in der LARAVEL APP
                            RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
                            RewriteRule ^(.*) - [E=BASE:%1]
                            RewriteCond %{ENV:REDIRECT_STATUS} ^$
                            RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
                            RewriteCond %{REQUEST_FILENAME} -f
                            RewriteRule .? - [L]
                            RewriteRule .? %{ENV:BASE}/index.php [L]
                        </IfModule>
    
                
                
    vim /var/www/project2/public/.htaccess
    
    
                         <IfModule mod_rewrite.c>
                           Options +FollowSymLinks
                           RewriteEngine On
                         </IfModule>
    
                         <IfModule mod_rewrite.c>
    
    
                            <IfModule mod_negotiation.c>
                                Options -MultiViews
                            </IfModule>
    
                            RewriteEngine On
                            RewriteCond %{HTTP_HOST} !^www\project2\.(de)$ [NC] 
                            RewriteCond %{SERVER_PORT} !443
                            RewriteRule ^(.*)$ https://www.project2.de/$1 [L,R=301]    
                            RewriteCond %{HTTPS} off
                            RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
                          #WICHTIG: für das schreiben der routes in der LARAVEL APP
                            RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
                            RewriteRule ^(.*) - [E=BASE:%1]
                            RewriteCond %{ENV:REDIRECT_STATUS} ^$
                            RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
                            RewriteCond %{REQUEST_FILENAME} -f
                            RewriteRule .? - [L]
                            RewriteRule .? %{ENV:BASE}/index.php [L]
                        </IfModule>
    
                
                
    Viel Erfolg!
    Zurück zur Startseite