Apache2 & ProxyPass mit SSL funktioniert nicht

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von Exxter » 14.08.2018 12:28:33

Hallo,

ich habe ein frisch installiertes Debian 9.5 mit Apache2 und Lets Encrypt eingerichtet, Standardseite auf https://projekte.example.org funktioniert. Danach installierte ich OpenProject, welches unter der Adresse

http://127.0.0.1:6000/openproject/

erreichbar ist (überprüft mit elinks von localhost). Nun soll das ganze per ProxyPass eingerichtet werden, also so, dass ich über die URL:

https://projekte.example.org/openproject/

Auf obige Seite von OpenProject weitergeleitet werde (liegt alles auf dem selben Rechner). Ohne httpS klappt es, mit nicht:

Not Found
The requested URL /openproject/ was not found on this server.

Folgende Konfiguration:

Code: Alles auswählen

Include /etc/openproject/addons/apache2/includes/server/*.conf

<VirtualHost *:80>
  ServerName projekte.example.org
  DocumentRoot /opt/openproject/public

  ProxyRequests off

  Include /etc/openproject/addons/apache2/includes/vhost/*.conf

  # Can't use Location block since it would overshadow all the other proxypass directives on CentOS
  ProxyPass /openproject/ http://127.0.0.1:6000/openproject/ retry=0
  ProxyPassReverse /openproject/ http://127.0.0.1:6000/openproject/
</VirtualHost>


<VirtualHost *:443>
   ServerName projekte.example.org
   #ServerAlias <www.domain.tld>

   SSLProxyEngine On
   # Analog zu oben
   ProxyPass /openproject https://127.0.0.1:6000/openproject/
   # Analog zu oben
   ProxyPassReverse /openproject https://127.0.0.1:6000/openproject/

   SSLEngine on
   SSLCertificateFile /etc/letsencrypt/live/projekte.example.org/fullchain.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/projekte.example.org/privkey.pem
   SSLCertificateChainFile /etc/letsencrypt/live/projekte.example.org/cert.pem

</VirtualHost>
Die zusätzlich eingelesenen Dateien sind, soweit ich das sehe, irrelevant, sie sind trotzdem unten komplett angehängt. Auch schon getestet, im SSL-Block auf URL's ohne https weiterzuleiten, ist das gleiche.

Das blöde ist, es gibt keinen Error. Wenn ich mit tailf die access.log mitlese kommt nur die normale Access-Meldung von meinem Zugriff.
In der error.log kommt gar nichts. Habe deswegen das LogLevel erhöht und folgendes in die beiden VirtualHost-Blöcke eingefügt:

ErrorLog ${APACHE_LOG_DIR}/openproject.log
LogLevel debug

Folgende Log kommt nach einem Restart vom Apache2:

Code: Alles auswählen

[Tue Aug 14 12:14:03.432984 2018] [ssl:info] [pid 1700:tid 140714080847040] AH01914: Configuring server projekte.example.org:443 for SSL protocol
[Tue Aug 14 12:14:03.433231 2018] [ssl:debug] [pid 1700:tid 140714080847040] ssl_engine_init.c(952): AH01904: Configuring server certificate chain (1 CA certificate)
[Tue Aug 14 12:14:03.433248 2018] [ssl:debug] [pid 1700:tid 140714080847040] ssl_engine_init.c(413): AH01893: Configuring TLS extension handling
[Tue Aug 14 12:14:03.433456 2018] [ssl:debug] [pid 1700:tid 140714080847040] ssl_util_ssl.c(443): AH02412: [projekte.example.org:443] Cert matches for name 'projekte.example.org' [subject: CN=projekte.example.org / issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US / serial: 03ACE1D980284BF86DF4012999F04C9198F6 / notbefore: Jul 24 04:37:42 2018 GMT / notafter: Oct 22 04:37:42 2018 GMT]
[Tue Aug 14 12:14:03.433472 2018] [ssl:info] [pid 1700:tid 140714080847040] AH02568: Certificate and private key projekte.example.org:443:0 configured from /etc/letsencrypt/live/projekte.example.org/fullchain.pem and /etc/letsencrypt/live/projekte.example.org/privkey.pem
[Tue Aug 14 12:14:03.475060 2018] [ssl:info] [pid 1702:tid 140714080847040] AH01914: Configuring server projekte.example.org:443 for SSL protocol
[Tue Aug 14 12:14:03.475320 2018] [ssl:debug] [pid 1702:tid 140714080847040] ssl_engine_init.c(952): AH01904: Configuring server certificate chain (1 CA certificate)
[Tue Aug 14 12:14:03.475337 2018] [ssl:debug] [pid 1702:tid 140714080847040] ssl_engine_init.c(413): AH01893: Configuring TLS extension handling
[Tue Aug 14 12:14:03.475582 2018] [ssl:debug] [pid 1702:tid 140714080847040] ssl_util_ssl.c(443): AH02412: [projekte.example.org:443] Cert matches for name 'projekte.example.org' [subject: CN=projekte.example.org / issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US / serial: 03ACE1D980284BF86DF4012999F04C9198F6 / notbefore: Jul 24 04:37:42 2018 GMT / notafter: Oct 22 04:37:42 2018 GMT]
[Tue Aug 14 12:14:03.475599 2018] [ssl:info] [pid 1702:tid 140714080847040] AH02568: Certificate and private key projekte.example.org:443:0 configured from /etc/letsencrypt/live/projekte.example.org/fullchain.pem and /etc/letsencrypt/live/projekte.example.org/privkey.pem
[Tue Aug 14 12:14:03.480760 2018] [proxy:debug] [pid 1704:tid 140714080847040] proxy_util.c(1779): AH00925: initializing worker https://127.0.0.1:6000/openproject/ shared
[Tue Aug 14 12:14:03.480793 2018] [proxy:debug] [pid 1704:tid 140714080847040] proxy_util.c(1821): AH00927: initializing worker https://127.0.0.1:6000/openproject/ local
[Tue Aug 14 12:14:03.480814 2018] [proxy:debug] [pid 1704:tid 140714080847040] proxy_util.c(1856): AH00930: initialized pool in child 1704 for (127.0.0.1) min=0 max=25 smax=25
[Tue Aug 14 12:14:03.480827 2018] [proxy:debug] [pid 1704:tid 140714080847040] proxy_util.c(1779): AH00925: initializing worker http://127.0.0.1:6000/openproject/ shared
[Tue Aug 14 12:14:03.480839 2018] [proxy:debug] [pid 1704:tid 140714080847040] proxy_util.c(1821): AH00927: initializing worker http://127.0.0.1:6000/openproject/ local
[Tue Aug 14 12:14:03.480853 2018] [proxy:debug] [pid 1704:tid 140714080847040] proxy_util.c(1856): AH00930: initialized pool in child 1704 for (127.0.0.1) min=0 max=25 smax=25
[Tue Aug 14 12:14:03.481498 2018] [proxy:debug] [pid 1705:tid 140714080847040] proxy_util.c(1779): AH00925: initializing worker https://127.0.0.1:6000/openproject/ shared
[Tue Aug 14 12:14:03.481517 2018] [proxy:debug] [pid 1705:tid 140714080847040] proxy_util.c(1821): AH00927: initializing worker https://127.0.0.1:6000/openproject/ local
[Tue Aug 14 12:14:03.481531 2018] [proxy:debug] [pid 1705:tid 140714080847040] proxy_util.c(1856): AH00930: initialized pool in child 1705 for (127.0.0.1) min=0 max=25 smax=25
[Tue Aug 14 12:14:03.481542 2018] [proxy:debug] [pid 1705:tid 140714080847040] proxy_util.c(1779): AH00925: initializing worker http://127.0.0.1:6000/openproject/ shared
[Tue Aug 14 12:14:03.481564 2018] [proxy:debug] [pid 1705:tid 140714080847040] proxy_util.c(1821): AH00927: initializing worker http://127.0.0.1:6000/openproject/ local
[Tue Aug 14 12:14:03.481580 2018] [proxy:debug] [pid 1705:tid 140714080847040] proxy_util.c(1856): AH00930: initialized pool in child 1705 for (127.0.0.1) min=0 max=25 smax=25
Ich raffs nicht, das sieht alles gut aus. Er initialisiert auch den Worker für http und https. Muss die Application, auf die der Apache verweist, eigentlich https aktiviert haben oder nicht? Ich habe es aktuell aktiviert, gleiches Zertifikat wie beim Apache.

Jemand eine Idee? Ich bin mit meinem Latein ziemlich am Ende ...



Hier die Config-Dateien:

In /etc/openproject/addons/apache2/includes/vhost/00_prefix_redirect.conf steht:

Code: Alles auswählen

# Make sure to redirect /prefix to /prefix/
RewriteEngine On
RewriteRule ^/openproject$ /openproject/ [R,L]
In /etc/openproject/addons/apache2/includes/vhost/assets.conf:

Code: Alles auswählen

Alias /openproject/assets /opt/openproject/public/assets
Alias /openproject/uploads /opt/openproject/public/uploads
<Directory "/opt/openproject/public">
  Options -Indexes
  <IfModule mod_authz_core.c>
    # apache 2.4+
    Require all granted
  </IfModule>

  <IfModule !mod_authz_core.c>
    Order deny,allow
    Allow from all
  </IfModule>
</Directory>

ProxyPass /openproject/assets/ !

<Location /openproject/assets/>
  ExpiresActive On ExpiresDefault "access plus 1 year"
</Location>
In /etc/openproject/addons/apache2/includes/vhost/compression.conf:

Code: Alles auswählen

# Enabling compression for common text formats
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript
In /etc/openproject/addons/apache2/includes/vhost/expiration.conf:

Code: Alles auswählen

# Send expiry headers for assets, that carry an asset id. Assuming, an asset
# id is a unix timestamp, which is currently a 10 digit integer. This might
# change in the far future.
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
</FilesMatch>
In /etc/openproject/addons/apache2/includes/vhost/sys.conf:

Code: Alles auswählen

<LocationMatch "^/openproject/sys">
  <IfModule mod_authz_core.c>
    Require local
  </IfModule>

  <IfModule !mod_authz_core.c>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
  </IfModule>
</LocationMatch>
In /etc/openproject/addons/apache2/includes/server/ liegt nur eine leere Datei.

hec_tech
Beiträge: 1088
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von hec_tech » 14.08.2018 18:21:15

Es muss noch access Logs geben. Wenn du einen Zugriff machst muss der auch geloggt werden.

Du machst einerseits ein include im http das du im https vhost nicht machst? Sollte das nicht in beiden includiert werden?

Als rev-proxy würde ich immer zu nginx greifen. Damit habe ich wesentlich bessere Erfahrungen als mit Apache2.

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von r4pt0r » 14.08.2018 18:41:47

Gehe ich richtig in der annahme, dass auf port 6000 ein einfacher webserver _ohne_ SSL horcht und der Apache als proxy für TLS/SSL davorgeschaltet wird?
Dann muss der ProxyPass auch für beide instanzen (:80 UND :443) auf "http://127.0.0.1:6000" verweisen.

Ansonsten kann ich nur hec_tech beipflichten: Für proxy-Aufgaben ist nginx unschlagbar sowohl in der einfacheren Konfiguration als auch bei der Performance und beim Ressourcenverbrauch.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von Exxter » 15.08.2018 12:31:51

Vielen Dank für eure Antworten. Leider kann ich kein nginx nehmen, sonst müsste ich alles zu nginx umziehen was bisher auf Apache läuft.

Ich habe die URL's überall auf http geändert, außerdem habe ich den include gesetzt wie er im ersten Block ist. Danach Apache neu gestartet - Problem bleibt. Ohne SSL funktioniert es, mit nicht. Raffs nicht ...

hec_tech
Beiträge: 1088
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von hec_tech » 15.08.2018 12:51:23

Moment mal ich glaube dein Fehler ist die Fehlenden SSL Headers.
Du musst dem Backend mitteilen ob der Request per SSL kommt.

Eventuell habe ich heute am Abend etwas Zeit dann kann ich das mal in einem Container testen und die Konfiguration posten.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von Exxter » 15.08.2018 13:32:49

Hmm, also das Apache2 Modul headers ist aktiviert.. ansonsten wüsste ich gerade nicht was du meinen könntest.

Zum Thema Access.log: ich habe in beide Blöcke noch die zweite Zeile:

ErrorLog ${APACHE_LOG_DIR}/openproject.log
CustomLog ${APACHE_LOG_DIR}/openproject.log combined
LogLevel debug

hinzugefügt und alle openproject Logdateien unter /var/log/apache2 gelöscht. Apache neu gestartet, auf die Seite

https://projekte.example.org/openproject/

gegangen, kein Eintrag vom access:

Code: Alles auswählen

[Wed Aug 15 13:26:50.942805 2018] [ssl:info] [pid 3785:tid 140589127484608] AH01914: Configuring server projekte.example.org:443 for SSL protocol
[Wed Aug 15 13:26:50.943005 2018] [ssl:debug] [pid 3785:tid 140589127484608] ssl_engine_init.c(952): AH01904: Configuring server certificate chain (1 CA certificate)
[Wed Aug 15 13:26:50.943016 2018] [ssl:debug] [pid 3785:tid 140589127484608] ssl_engine_init.c(413): AH01893: Configuring TLS extension handling
[Wed Aug 15 13:26:50.943177 2018] [ssl:debug] [pid 3785:tid 140589127484608] ssl_util_ssl.c(443): AH02412: [projekte.example.org:443] Cert matches for name 'projekte.example.org' [subject: CN=projekte.example.org / issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US / serial: 03ACE1D980284BF86DF4012999F04C9198F6 / notbefore: Jul 24 04:37:42 2018 GMT / notafter: Oct 22 04:37:42 2018 GMT]
[Wed Aug 15 13:26:50.943187 2018] [ssl:info] [pid 3785:tid 140589127484608] AH02568: Certificate and private key projekte.example.org:443:0 configured from /etc/letsencrypt/live/projekte.example.org/fullchain.pem and /etc/letsencrypt/live/projekte.example.org/privkey.pem
[Wed Aug 15 13:26:50.983930 2018] [ssl:info] [pid 3786:tid 140589127484608] AH01914: Configuring server projekte.example.org:443 for SSL protocol
[Wed Aug 15 13:26:50.984171 2018] [ssl:debug] [pid 3786:tid 140589127484608] ssl_engine_init.c(952): AH01904: Configuring server certificate chain (1 CA certificate)
[Wed Aug 15 13:26:50.984184 2018] [ssl:debug] [pid 3786:tid 140589127484608] ssl_engine_init.c(413): AH01893: Configuring TLS extension handling
[Wed Aug 15 13:26:50.984392 2018] [ssl:debug] [pid 3786:tid 140589127484608] ssl_util_ssl.c(443): AH02412: [projekte.example.org:443] Cert matches for name 'projekte.example.org' [subject: CN=projekte.example.org / issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US / serial: 03ACE1D980284BF86DF4012999F04C9198F6 / notbefore: Jul 24 04:37:42 2018 GMT / notafter: Oct 22 04:37:42 2018 GMT]
[Wed Aug 15 13:26:50.984408 2018] [ssl:info] [pid 3786:tid 140589127484608] AH02568: Certificate and private key projekte.example.org:443:0 configured from /etc/letsencrypt/live/projekte.example.org/fullchain.pem and /etc/letsencrypt/live/projekte.example.org/privkey.pem
[Wed Aug 15 13:26:50.989616 2018] [proxy:debug] [pid 3788:tid 140589127484608] proxy_util.c(1779): AH00925: initializing worker http://127.0.0.1:6000/openproject/ shared
[Wed Aug 15 13:26:50.989643 2018] [proxy:debug] [pid 3788:tid 140589127484608] proxy_util.c(1821): AH00927: initializing worker http://127.0.0.1:6000/openproject/ local
[Wed Aug 15 13:26:50.989659 2018] [proxy:debug] [pid 3788:tid 140589127484608] proxy_util.c(1856): AH00930: initialized pool in child 3788 for (127.0.0.1) min=0 max=25 smax=25
[Wed Aug 15 13:26:50.989667 2018] [proxy:debug] [pid 3788:tid 140589127484608] proxy_util.c(1779): AH00925: initializing worker http://127.0.0.1:6000/openproject/ shared
[Wed Aug 15 13:26:50.989675 2018] [proxy:debug] [pid 3788:tid 140589127484608] proxy_util.c(1821): AH00927: initializing worker http://127.0.0.1:6000/openproject/ local
[Wed Aug 15 13:26:50.989691 2018] [proxy:debug] [pid 3788:tid 140589127484608] proxy_util.c(1856): AH00930: initialized pool in child 3788 for (127.0.0.1) min=0 max=25 smax=25
[Wed Aug 15 13:26:50.990088 2018] [proxy:debug] [pid 3789:tid 140589127484608] proxy_util.c(1779): AH00925: initializing worker http://127.0.0.1:6000/openproject/ shared
[Wed Aug 15 13:26:50.990112 2018] [proxy:debug] [pid 3789:tid 140589127484608] proxy_util.c(1821): AH00927: initializing worker http://127.0.0.1:6000/openproject/ local
[Wed Aug 15 13:26:50.990128 2018] [proxy:debug] [pid 3789:tid 140589127484608] proxy_util.c(1856): AH00930: initialized pool in child 3789 for (127.0.0.1) min=0 max=25 smax=25
[Wed Aug 15 13:26:50.990136 2018] [proxy:debug] [pid 3789:tid 140589127484608] proxy_util.c(1779): AH00925: initializing worker http://127.0.0.1:6000/openproject/ shared
[Wed Aug 15 13:26:50.990144 2018] [proxy:debug] [pid 3789:tid 140589127484608] proxy_util.c(1821): AH00927: initializing worker http://127.0.0.1:6000/openproject/ local
[Wed Aug 15 13:26:50.990158 2018] [proxy:debug] [pid 3789:tid 140589127484608] proxy_util.c(1856): AH00930: initialized pool in child 3789 for (127.0.0.1) min=0 max=25 smax=25
Und wenn ich local mit elinks auf die Seite https://127.0.0.1:6000/openproject/ gehe kommt ein SSL-Fehler "Unable to retrieve .."

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von r4pt0r » 16.08.2018 08:42:14

Exxter hat geschrieben: ↑ zum Beitrag ↑
15.08.2018 12:31:51
Vielen Dank für eure Antworten. Leider kann ich kein nginx nehmen, sonst müsste ich alles zu nginx umziehen was bisher auf Apache läuft.
Nur der vollständigkeit halber: Du müsstest du nichtmal alles umstellen: Lass den/die Apache (und ggf integrierte webserver) auf anderen ports und nur noch auf der loopback-adresse horchen und nginx kommt als proxy vor _alles_ was lokal läuft.
So lasse ich das hier auf etlichen hosts und z.b. meinem mailserver laufen: Jails und deren webserver (rspamd, squirrelmail) horchen auf loopback-adressen (127.0.0.N); nginx horcht extern auf 443 und leitet alles auf die lokalen (non-ssl) webserver weiter via proxy_pass. Vorteil: Nur ein SSL-Zertifikat und eine zentrale SSL-Konfiguration für alles hinter nginx nötig.

Ich habe die URL's überall auf http geändert, außerdem habe ich den include gesetzt wie er im ersten Block ist. Danach Apache neu gestartet - Problem bleibt. Ohne SSL funktioniert es, mit nicht. Raffs nicht ...
Was sprechen ssl_access.log und error.log? Sofern die Verbindung auf port 443 tatsächlich zustande kommt _muss_ irgendwas in einer dieser logs auftauchen, speziell da du den loglevel auf debug erhöht hast (oder gibts evtl auch eine /var/log/debug.log?).

Nur zur Sicherheit: das ssl-modul wurde mit "a2enmod ssl" aktiviert bzw der softlink ist in "sites-enabled"?
Die Dateistruktur mit den zig includes scheint mir auch etwas umständlich und unübersichtlich (und fehleranfällig) - ich habe alles was einzelne hosts/vhosts betrifft (auch deren SSL-konfiguration) immer zusammengefasst in einer datei in "sites-available" abgelegt; aktive Seiten sind dann einfach nur per "a2ensite" in "sites-enabled" verlinkt.


Nur zum test: was passiert wenn du "ProxyPass http://127.0.0.1:80/openproject/" setzt? Dann verweist der apache auf die (funktionierende) instanz auf port 80 und schaltet nur SSL dazu.

Und wenn ich local mit elinks auf die Seite https://127.0.0.1:6000/openproject/ gehe kommt ein SSL-Fehler "Unable to retrieve .."
Was auch korrekt ist da der webserver auf port 6000 nicht mit ssl/tls konfiguriert ist; deshalb muss ja auch der ProxyPass auf "http" weiterleiten.

hec_tech
Beiträge: 1088
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von hec_tech » 16.08.2018 12:07:46

Wie das bei apche2 rev-proxy funktioniert bin ich mir nicht sicher.

Bei nginx wären es diese Werte:

Code: Alles auswählen

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;
Habe mal kurz gesucht. Müsste RequestHeader set X-Forwarded-Proto "https" seub.

Schau dir mal den Link an:
https://shaarli.readthedocs.io/en/maste ... iguration/


Kannst du das mal testen?

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von Exxter » 16.08.2018 13:33:07

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
16.08.2018 08:42:14
Nur der vollständigkeit halber: Du müsstest du nichtmal alles umstellen: Lass den/die Apache (und ggf integrierte webserver) auf anderen ports und nur noch auf der loopback-adresse horchen und nginx kommt als proxy vor _alles_ was lokal läuft.
So lasse ich das hier auf etlichen hosts und z.b. meinem mailserver laufen: Jails und deren webserver (rspamd, squirrelmail) horchen auf loopback-adressen (127.0.0.N); nginx horcht extern auf 443 und leitet alles auf die lokalen (non-ssl) webserver weiter via proxy_pass. Vorteil: Nur ein SSL-Zertifikat und eine zentrale SSL-Konfiguration für alles hinter nginx nötig.
Du hast Recht, ich setze das jetzt so um (will mich schon lange mal näher mit nginx befassen).

Apache ist aus bzw lauscht auf anderen Ports, nginx habe ich installiert, hänge aber gerade bei der Konfiguration. SSL funktioniert, also beim Aufruf von https://projekte.example.org/ kommt die nginx Seite, keine SSL Fehler. Dann las ich in einem HowTo, am besten die /etc/nginx/sites-available/default kopieren und als weitere Seite einbinden. Aktueller Inhalt der /etc/nginx/sites-available/openprojekt:

Code: Alles auswählen

server {
        listen 80;
        listen [::]:80;

location /openproject {
    proxy_pass http://127.0.0.1:6000/openproject/;
   }
}
die Datei natürlich auch per ln -s aktiviert und nginx neu gestartet (da fehlt mir etwas das Tool a2enSITE/CONF/MOD).
Kommt aber auch ein "404 Not Found". In der /var/log/nginx/access.log kommt der normale Eintrag wenn ich mit dem Browser auf den Link http://projekte.example.org/openproject/ gehe:

Code: Alles auswählen

xxx.xxx.xxx.xxx - - [16/Aug/2018:13:29:17 +0200] "GET /openproject/ HTTP/1.1" 404 143 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
in der error.log von nginx stehen nur ältere Einträge. Ich muss mich noch mehr mit nginx befassen.

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von r4pt0r » 16.08.2018 14:19:39

Exxter hat geschrieben: ↑ zum Beitrag ↑
16.08.2018 13:33:07
Dann las ich in einem HowTo, am besten die /etc/nginx/sites-available/default kopieren und als weitere Seite einbinden.
wird /etc/nginx/sites-available überhaupt inkludiert? Das ist zumindest für die "vanilla" nginx.conf nicht der Fall! Hab hier aktuell kein debian mehr zum nachschauen was da mit dem paket ausgeliefert wird...

Solange man nur eine handvoll proxies/redirects definiert ist IMHO der weg über die zentrale nginx.conf _deutlich_ übersichtlicher als alles über zig Einzeldateien zu verteilen die dann teilweise nur 2-3 Zeilen enthalten. Speziell da die nginx.conf sowieso extrem wenig boilerplate enthält und im Gegensatz zur Apache config wirklich sauber und knapp gehalten werden kann.
die Datei natürlich auch per ln -s aktiviert und nginx neu gestartet (da fehlt mir etwas das Tool a2enSITE/CONF/MOD).
Ein reload von nginx reicht, er muss nicht immer neu gestartet werden. Hat auch den Vorteil dass zuerst die config geprüft wird und der Server bei Fehlern mit der alten config im cache weiterläuft.
Kommt aber auch ein "404 Not Found". In der /var/log/nginx/access.log kommt der normale Eintrag wenn ich mit dem Browser auf den Link
Du lässt ngnix nur auf port 80 horchen, wie soll er dann per https etwas anzeigen? "listen 443 ssl;" bzw "listen [::]:443 ssl;" fehlen in deiner config.


Hier die komplette nginx.conf von einem kleinen production-system (ein jail auf FreeBSD). Dieser nging läuft ausschließlich als proxy für non-ssl webserver in anderen jails.

Code: Alles auswählen

worker_processes	2;
events {
        worker_connections  1024;
}
http {
    include       mime.types;
    default_type  text/plain;

    sendfile        on;
    tcp_nopush          on;
    tcp_nodelay             on;
    keepalive_timeout  65;

    server {
        listen          443 ssl;
        listen          [::]:443 ssl;
        server_name     mail1.rostwald.de;
        add_header Strict-Transport-Security "max-age=31536000; includesubdomains" always;
        add_header Referrer-Policy "no-referrer";
        add_header Content-Security-Policy "default-src 'self'; script-src 'self'";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-XSS-Protection "1; mode=block";

        # 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 / {
                        proxy_pass http://127.0.0.7:80;
                        proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $http_host;
        }

        location /rspamd/ {
                        proxy_pass http://127.0.0.4:11334/;
                        proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $http_host;
        }

        ssl on;

        ssl_certificate /usr/local/etc/nginx/ssl/fullchain;
        ssl_trusted_certificate /usr/local/etc/nginx/ssl/fullchain;
        ssl_certificate_key /usr/local/etc/nginx/ssl/key;


                        ssl_protocols TLSv1.3 TLSv1.2;
                        ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:AES256+EECDH:AES256+EDH:EECDH+AES256";
                        ssl_prefer_server_ciphers on;
                        ssl_session_cache builtin;
                        ssl_session_timeout 5m;
                        ssl_session_tickets off;
                        ssl_stapling on;
                        ssl_stapling_verify on;
                        server_tokens off;
                        ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
                        ssl_ecdh_curve "secp521r1:secp384r1:prime256v1";
	}
}
nginx horcht _nur_ auf port 443 (hält schonmal einen großen Anteil webcrawler fern, speziell solche die nur auf der suche nach mailadressen für spamlisten sind...).

Auf "location /" wird an das jail mit squirrelmail weitergeleitet (dort läuft ein weiterer nginx mit minimalkonfiguration ohne ssl); unter "/rspamd/" auf das jail in dem rspamd seine Statusseite an port 11334 bereitstellt.

Darunter dann die ssl/tls Einstellungen die für den gesamten host an port 443 gelten; es (mir) reicht ein Zertifikat für alles was dieser host per https ausliefert, man kann aber auch für jede location eigene Zertifikate verwenden (und andere ssl-optionen).

Das ist eigentlich meine gesamte nginx konfiguration für diesen host bzw die SSL-optionen laufen so auch auf einigen anderen hosts. Mehr Einstellungen braucht man nicht für A+ mit 100% in allen 4 Kategorien auf ssllabs. Verteilen auf mehrere Dateien wäre bei so wenig nötiger config nur unnötig unübersichtlich.

hec_tech
Beiträge: 1088
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von hec_tech » 16.08.2018 19:47:04

Ich bin ein Freund der getrennten Konfigurationsdateien.

Hängt eventuell mit unseren nginx LBs zusammen wo wir mehrere Kunden über einen LB laufen lassen.
Da habe ich auf jeden Fall pro Kunde eine eigene Konfigurationsdatei. Anders ist das nicht zu administrieren.

Mache das aber auch bei meinen privaten Servern so. Ich kann so einfach viel granularer die Konfiguration anpassen.
Vor allem bei SSL Optionen wo ich eventuell ältere Clients unterstützen muss ist es sinnvoll die SSL Optionen nur auf den vhost zu setzen und eben nicht global.

Natürlich kann man alles in eine Datei packen aber diese ist dann sehr lang.

lg
Gregor

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von r4pt0r » 16.08.2018 23:31:41

hec_tech hat geschrieben: ↑ zum Beitrag ↑
16.08.2018 19:47:04
Hängt eventuell mit unseren nginx LBs zusammen wo wir mehrere Kunden über einen LB laufen lassen.
Da habe ich auf jeden Fall pro Kunde eine eigene Konfigurationsdatei. Anders ist das nicht zu administrieren.

Mache das aber auch bei meinen privaten Servern so. Ich kann so einfach viel granularer die Konfiguration anpassen.
Vor allem bei SSL Optionen wo ich eventuell ältere Clients unterstützen muss ist es sinnvoll die SSL Optionen nur auf den vhost zu setzen und eben nicht global.

Natürlich kann man alles in eine Datei packen aber diese ist dann sehr lang.
Wie gesagt: wenn man nur eine handvoll vhosts/locations hat ist IMHO die einzelne nginx.conf übersichtlicher; wenn man natürlich dutzende vhosts über einen server abwickelt muss man die config sauber auftrennen. Bei 2 locations und 2 vhosts die problemlos mit der selben ssl-config (und dem selben Zertifikat da selbe Domain) auskommen ist das aber eher humbug - auch wenn debian per default schon ewig sehr gerne configs über zig dateien zersprengt (z.t. auch in Verzeichnissen wo configs _nichts_ verloren haben...) muss man diese Unart nicht zwanghaft überall fortführen. Aber das ist evtl auch immer persönliche Vorliebe...
Mittlerweile stopfe ich ohnehin nicht mehr mehrere vhosts/kunden/projekte zusammen auf einen einzigen Webserver, sondern verteile das auf mehrere jails bzw Gruppen von jails. Unter Linux wäre das nur notdürftig (und unsicher) via cgroups/namespaces/docker lösbar - da würde ich dann einfach zu getrennten instanzen/VPS raten. Aber wird jetzt doch etwas OT ;)

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von Exxter » 23.08.2018 08:11:59

Guten Morgen,

sorry für die späte Rückmeldung. Wollte erstmal sehen ob ich es nach all den Tipps hier mit nginx nicht allein hinbekomme und habe einiges probiert und gelesen. Jetzt komme ich aber trotzdem nicht weiter, im Grunde noch das gleiche Problem. Erstmal zur Antwort:

/etc/nginx/sites-available wird in der nginx.conf inkludiert:

Code: Alles auswählen

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
"listen [::]:443 ssl;" habe ich eingefügt, ändert aber nichts. Meine aktuelle Konfiguration:

Code: Alles auswählen

server {
        listen 80;
        listen [::]:80;
        listen [::]:443 ssl;

        ssl_certificate /etc/letsencrypt/live/projekte.example.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/projekte.example.org/privkey.pem;

location /openproject {
    proxy_pass http://127.0.0.1:6000/openproject/;
        }
}
Beim Aufruf der Seite kommt "404 Not Found nginx/1.10.3" und in der /var/log/nginx/error.log kommt kein Fehler.

Habe es auch mit einer anderen Konfiguration probiert wo die Weiterleitung auf einem anderen Host mit nginx funktioniert:

Code: Alles auswählen

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/projekte.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/projekte.example.org/privkey.pem;

    server_name projekte.example.org;

    root /opt/openproject/public;

    location /openproject {
        proxy_pass http://localhost:6000/openproject/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
ARGH, weil ich in beiden Konfigblöcken unterschiedliche URL's stehen hatte nach location: "/openproject" und "/projekte/" habe ich den Pfad eben bei beiden auf "/openproject" gesetzt und damit funktioniert es?!? Habe es aber gerade auch wieder geändert auf /projekte/ und es funktioniert trotzdem, OK, dann aber nur wenn ich die URL wirklich mit / aufrufe, sonst funktioniert es nicht. Ohne / funktioniert es aber sowohl mit / als auch ohne in der URL.

Ich bin kurz davor mir ein Buch über nginx zu kaufen..

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von r4pt0r » 23.08.2018 08:36:06

Exxter hat geschrieben: ↑ zum Beitrag ↑
23.08.2018 08:11:59

Code: Alles auswählen

    location /openproject {
        proxy_pass http://localhost:6000/openproject/;
        
Du hast hier einmal ein / am ende; einmal nicht. Das *muss* keine Probleme bereiten, viele, speziell "integrierte" Webserver unterscheiden aber explizit zwischen den beiden Varianten. rspamd z.B. funktioniert nur mit / am ende.

Also: "proxy_pass" muss _EXAKT_ dem entsprechen was auch bei direktem Aufruf verwendet wird. Um seltsames Verhalten beim url-rewrite zu verhindern, sollte die "location" identisch zur "proxy_pass" URI mit oder ohne folgendem / angegeben werden.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von Exxter » 23.08.2018 09:36:05

OK, logisch. Habe es so geändert und es sollte passen. Jetzt habe ich aber noch ein Problem, dass die Browser die Seite nach dem Login nicht als vollständig sicher anzeigen, in der Console kommt:
This page is not secure.
Resources - mixed content
This page includes HTTP resources.
View 1 request in Network Panel
Der versucht auf Gravatar zuzugreifen:

http://gravatar.com/avatar/95804caa8faf ... cure=false

und diese Verbindung ist nicht sicher. Gibt es hier noch Möglichkeiten, das zu ändern im nginx?
Zuletzt geändert von Exxter am 23.08.2018 10:48:28, insgesamt 1-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 3438
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von heisenberg » 23.08.2018 10:28:12

Das hat nix mit nginx zu tun. Das ist eine Sache des Inhaltes, der ausgeliefert wird.

Die Hürden bzgl. SSL werden immer höher. D. h. dieses Problem solltest Du lösen,
indem Du keine http:// Seiten einbindest sondern nur https://.

Würde mich wundern, wenn gravatar nicht auch per https verfügbar ist.
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

hec_tech
Beiträge: 1088
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von hec_tech » 23.08.2018 14:11:01

Diese Probleme habe ich leider auch des Öfteren.

Die meisten Seiten sind auch per https erreichbar. Einfach testen ob die Resourcen per https erreichbar sein und wenn ja im Source von http auf https ändern.

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von r4pt0r » 24.08.2018 10:39:47

Man kann auch per CSP header das nachladen von unsicheren Inhalten komplett unterbinden bzw es kann fein granuliert vorgegeben werden aus welchen quellen was nachgeladen werden darf.
Kombiniert mit report-uri kann man initial sehr schnell feststellen was alles nachgeladen wird, das im Idealfall komplett rauswerfen oder zumindest alles auf sichere quellen ändern, und später mit aktivem "enforce" diese regeln erzwingen und sich direkt alarmieren lassen (z.b. via report-uri.com) wenn plötzlich content aus nicht explizit erlaubten quellen nachgeladen werden soll (z.b. durch XSS).

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Apache2 & ProxyPass mit SSL funktioniert nicht

Beitrag von Exxter » 27.08.2018 10:32:20

Vielen lieben Dank euch allen für die umfangreichen Tipps. Es läuft jetzt alles wies soll.

Antworten