Mehrere Apache Instanzen in Jails

pom

Well-Known Member
Hallo,

historisch gewachsen sind bei mir mehrere Apache Server mit entsprechenden Anwendungen in verschiedene Jails aufgeteilt (Bugzilla, owncloud, ...).
Von ausserhalb waren die über unterschiedliche Portweiterleitungen (Fritzbox, dyndns) erreichbar.

Nun habe ich einen Server mit https ausgestattet. Die anderen Server nicht. Und z.B. Safari will die "nicht https Adressen" gar nicht mehr ansprechen sondern ändert die Adresse automatisch nach https. So lassen sich die anderen Server nicht mehr erreichen.

Das ganze Setup scheint mir nicht mehr optional zu sein.
- Ich würde gerne alle Server mit https ausstatten
- die verschiedenen Apache Server sollen nach wie vor in unterschiedlichen Jails laufen
- Die verschiedenen Apache Server sollen von Ausserhalb zugänglich sein

Was wäre dann in so einem Fall die richtige Vorgehensweise?

Gruß,
Peter
 
Von ausserhalb waren die über unterschiedliche Portweiterleitungen (Fritzbox, dyndns) erreichbar.
Das heißt, der Client muss ggf. den Port mit angeben?
z.B.
http://owncloud.mydomain.de:80/ aka http://owncloud.mydomain.de/
http://bugzilla.mydomain.de:81/

usw.

Nun habe ich einen Server mit https ausgestattet. Die anderen Server nicht. Und z.B. Safari will die "nicht https Adressen" gar nicht mehr ansprechen sondern ändert die Adresse automatisch nach https.
https ohne Portangabe geht immer nach Port 443
 
Wenn er doch schon gut mit dem Apache ist, könnte man auch einfach das mod_proxy von Apache verwenden :)
 
Hallo nochmal,

erstmal Danke für die hilfreichen Kommentare.

Ich habe inzwischen nginx im Hauptsystem* installiert und als Reverse Proxy konfiguiert. Die Apache Server in den Jails habe ich gelassen wie sie sind. Für Bugzilla und Owncloud funktioniert das prima.

Allerdings scheitere ich an Wordpress. Ich habe viele Beiträge im Web dazu gefunden. Allerdings war ich bisher nicht erfolgreich.

Hat jemand ein "Rezept" Wordpress in Apache hinter nginx als reverse Proxy mit SSL zu konfigurieren?

Gruß,
Peter


*) Im Hauptsystem, da die Fritzbox es nicht zugelassen hat eine Portumleitung auf eine Jail zu machen. Bisher ging das.
 
Ich verstehe Dein Setup noch nicht ganz. Ich ging eigentlich davon aus, dass der Server 1 IP-Adresse hat, und daher der Reverse Proxy (in Deinem Fall Nginx) Anfragen an die verschiedenen Web-Domains an die jweiligen Jails weiterreicht. SSL sollte dann am besten in Nginx konfiguriert sein (Nginx wäre dann auch ein sog. TLS Terminator für HTTPS-Verbindungen von außen). Dahinter könntest Du den Verkehr zwischen Nginx und den Apachen per HTTP laufen lassen.

Dann verstehe ich aber Dein Anmerkung zur Fritzbox nicht. Wie hat die denn Portumleitungen "auf eine Jail" gemacht?

Und kannst Du etwas genauer sagen, was bei WordPress nicht funktioniert? Siehst Du gar nichts? Gibt es Fehlermeldungen? Oder werden andere Resourcen (Images, CSS, JS) nicht gefunden? Ich habe gerade ein ähnliches Setup (zwei Webserver Jails, eine davon mit WordPress, ein Reverse Proxy davor) erfolgreich eingerichtet... zwar mit h2o als Webserver bzw. Reverse Proxy, aber grundsätzlich sollte so auch Nginx bzw. Apache gehen. Kannst Du vom Host aus die Homepage aus der WordPress-Jail per fetch/wget holen? Oder scheitert schon dies?
 
Ich hab damals ein Wordpress von einem Server auf einen anderen umgezogen und im gleichen Atemzug auf SSL umgestellt, allerdings war da kein proxy dazwischen. WP ging dann auch erstmal nicht, ob weiße Seite oder ne Meldung weiß ich nicht mehr, was aber daran lag, dass sich wegen http:// zu https:// die URL geändert hat. Die muss im WP dann geändert werden.

Funktioniert hat es dann mit RELOCATE wie es offiziell beschrieben wird:
https://codex.wordpress.org/Changing_The_Site_URL

Die große Frage ist aber nun, wie du auf WP zugreifst.

Die Apache Server in den Jails habe ich gelassen wie sie sind. Für Bugzilla und Owncloud funktioniert das prima.

Ok, dann solltest du zumindest mal mit der jailip auf WP draufkönnen? Ich versteh das setup auch nicht in seiner vollen Pracht. :ugly:
Mehrere jails und darin jeweils ein apache oder mit mehreren vhosts oder nur eine jail?
 
ok, ich versuche genauer zu beschreiben

- auf dem Hauptserver IP4 xx.xx.xx.99 läuft nginx mit https (letsencrypt)
- dann gibt es 3 Jails mit eigener IP Adresse worin Apache Server ohne https laufen (wordpress, owncloud, bugzilla)
- Auf der Fritzbox leite ich Port 80 und 443 auf den Hauptserver (reverse proxy) um
- die proxy configuration für nginx sieht jeweils ähnlich. Hier das Beispeil für wordpress.
Code:
location /wordpress {
     proxy_pass http://192.168.6.94:8585;
     proxy_redirect off;
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Nach diesem Schema klappt alles für Owncloud und Bugzilla.

Bei Wordpress habe ich folgende Effekte.
Rufe ich https://www.oeffentlicheseite.de/wordpress auf kommt folgende Fehlermeldung:

Im Broser erscheint folgender Pfad
https://www.oeffentlicheseite.de/wp-login.php?redirect_to=/wordpress/
und
404 Not Found
nginx


Im Log des Webbrowsers innerhalb der Wordpress Jail kommt folgends ins Log:
192.168.6.94 - - [01/Nov/2018:06:58:08 +0000] "GET /wordpress/ HTTP/1.0" 302 20


Tippe ich allerdings folgendes ein:
https://www.oeffentlicheseite.de/wordpress/wp-login.php

Kommt die Wordpress Loginseite, allerdings nur in Textform. Jegliche Grafik ... fehlt
Dann steht das im Logfile:
192.168.6.94 - - [01/Nov/2018:06:59:25 +0000] "GET /wordpress/wp-login.php?redirect_to=%2Fwordpress%2F HTTP/1.0" 200 1092

Tippe ich da user und Passwort ein wird im Browser als nächstes folgendes angezeigt
https://www.oeffentlicheseite.de/wp-login.php
404 Not Found

Das Logfile in der Wordpress Jail enthält keine weitere Einträge.


Es scheint so, dass Wordpress nicht den korrekten Pfad zurückgibt. Das "wordpress" fehlt im Pfad. Damit greift das Redirekt von nginx nicht. Und Grafikinhalte ... werden nicht geliefert.

Hoffe das ist jetzt verständlicher :-)

Gruß,
Peter
 
http://192.168.6.94/wordpress
http://192.168.6.94:8585/wordpress
Geht eins davon korrekt? Mit nginx und proxy hab ich noch nie was gemacht.

Vermute jetzt aber mal stark, dass du einen Denkfehler oder generellen Fehler im Routing hast, dadurch, dass du 'von innen' auf die öffentliche Seite zugreifst.
Ggf. verhackt die Fritzbox auch was.

edit:

Der Slash kanns auch schon bewirken. Entweder an der Stelle und/oder im Browser. Sollte genau so übernommen werden, wie im Apache konfiguriert.

location /wordpress/ {
proxy_pass http://192.168.6.94:8585;
proxy_redirect off;
 
Wordpress geht davon aus, dass es unter / liegt und leitet dich entsprechend um. Du musst die Site URL ändern, dann stimmen auch die Pfade zu den Grafiken etc wieder.
 
Ich habe in der Wordpress Jail Apache durch nginx ersetzt, da ich sowieso auf nginx migrieren wollte.

Dann habe ich eine Einstellung im Wordpress wp-config.php und im nginx.conf File gefunden sodass es jetzt funktioniert.

Falls jemand mal das gleiche Problem hat:

wp-config.php enthält jetzt (Wordpress ist auch in einem Ordner mit dem Namen 'wordpress' installiert):
Code:
define( 'WP_SITEURL', '/wordpress' );
define( 'WP_HOME', '/wordpress' );

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
    $_SERVER['HTTPS'] = 'on';

if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}


Und nginx.conf in der Jail sieht so aus:
Code:
 server {
        listen       80;
        server_name  www.meinserver.de;
        root /usr/local/www/nginx;
        index index.php index.html index.htm;

        location / {
                try_files $uri $uri/ /index.php?q=$uri&$args;      
        }


        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /usr/local/www/nginx-dist;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                include fastcgi_params;
        }

An der nginx.conf auf dem Hauptsystem habe ich Verschiedenes ausprobiert. Ob man das aber alles braucht weiß ich nicht. Bin jetzt aber erstmal froh dass alles läuft.

Code:
location /wordpress/ {
     proxy_pass http://192.168.6.94:80;
     proxy_redirect off;
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Forwarded-Proto $scheme;
     proxy_set_header X-Forwarded-Host $host;
}

Danke nochmals allen die kommentiert haben.
Weitere Verbesserungsvorschläge sind gerne willkommen.

Peter
 
Weitere Verbesserungsvorschläge sind gerne willkommen.

Ansichtssache. Ich wollte keinesfalls die wp-config.php anfassen, ist mir zu murksig. ;)

Ich hab das jetzt mal so ähnlich bei mir hingestellt.

Nach außen habe ich nur eine ipv4.
Pro 'Dienst' habe ich je eine jail samt Apache und Gedöhnse zur Verfügung gestellt.
nginx steckt ebenfalls in einer jail.

https erstmal komplett weggelassen, sind ja schon genug Fallstricke.

nginx.conf
Code:
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

        sendfile        on;
        keepalive_timeout  65;

server  {
        server_name domain1.de www.domain1.de;

        location /      {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://x.x.x.21:80;
                                }
                }

server  {
        server_name domain2.de www.domain2.de;

        location /      {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://x.x.x.22:80;
                                }
                }

}

httpd.conf (je jail mod_rewrite aktiviert)
Code:
LoadModule rewrite_module libexec/apache24/mod_rewrite.so

httpd-vhosts (schnipsel von wordpress-jail)
Code:
ServerName www.domain1.de
        ServerAlias domain1.de
        ServerAdmin benutzer@email.com
        DocumentRoot /usr/local/www/wordpress
          <Directory /usr/local/www/wordpress>
                AllowOverride None
                Require all granted
          </Directory>


httpd-vhosts (schnipsel von nextcloud-jail)
Code:
ServerName www.domain2.de
        ServerAlias domain2.de
        ServerAdmin benutzer@email.com
        DocumentRoot /usr/local/www/nextcloud
          <Directory /usr/local/www/nextcloud>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
          </Directory>

config.php nextcloud
Code:
'trusted_domains' =>
  array (
        0 => 'x.x.x.22',
        1 => 'www.domain2.de',
  ),

Das wars im groben.
Wordpress verleibt sich ja WP_SITEURL und WP_HOME ein, worüber man installiert hat. In meinem Fall hatte ich da noch gar keine domain eingetragen, es stand die ip jeweils drin.
Als ich die korrekte domain eingetragen hatte, ging erstmal nichts mehr, weil kein NAT reflection eingerichtet war. Habe die jeweiligen Hosts dann überbrückend in unbound reingeklöppelt. Lüppt perfekt! :cool:
 
Also hast du den nginx als Reverse Proxy laufen in einer Jail der dann auf die "Instanz Jails" umleitet.

Richtig? Mit Nat Reflection konnte ich nix anfangen. NAT klar. :-)
 
Zurück
Oben