Reverse Proxy mit Lets Encrypt funktioniert nicht
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Reverse Proxy mit Lets Encrypt funktioniert nicht
Ich habe einen Reverse Proxy Server eingerichtet und die Ports 80 und 430 auf den PC weitergeleitet, auf dem mein Purebasic-Websocket-Server läuft.
Ein Lets Encrypt Schlüssel ist erfolgreich erstellt.
Der Purebasic-Websocket-Server läuft allerdings auf Port 1602.Dieser Port wird auch auf den PC auf dem der PB-Webserver Server läuft umgeleitet.
Von "draussen" komme ich nur unverschlüsselt auf den Server.
Was mache ich falsch?
Habe ich noch etwas vergessen zu tun?
Ein Lets Encrypt Schlüssel ist erfolgreich erstellt.
Der Purebasic-Websocket-Server läuft allerdings auf Port 1602.Dieser Port wird auch auf den PC auf dem der PB-Webserver Server läuft umgeleitet.
Von "draussen" komme ich nur unverschlüsselt auf den Server.
Was mache ich falsch?
Habe ich noch etwas vergessen zu tun?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
430 ist falsch. Der HTTPS-Port ist 443. Um das Zertifikat zu erzeugen, brauchst du nur Port 80. Deswegen ist es dir vielleicht vorher nicht aufgefallen.
Testen kannst du dein Zertifikat später übrigens hier: https://www.ssllabs.com/ssltest/
Einfach die Domain eingeben und dann wird die Verbindung auf Herz und Nieren getestet.
Testen kannst du dein Zertifikat später übrigens hier: https://www.ssllabs.com/ssltest/
Einfach die Domain eingeben und dann wird die Verbindung auf Herz und Nieren getestet.
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Sorry, 430 war ein Tippfehler. Ich meinte natürlich Port 443.
Getestet habe ich auch. Alles ok. Nur komme ich von einer verschlüsselten Seite NICHT auf meinen Web-Socket Server.
muss ich das:
<VirtualHost *:80>
ServerName doko-lounge-selfhost.eu
ProxyPreserveHost On
DocumentRoot /var/www/html
ProxyPass /.well-known !
ProxyPass / http://192.168.2.32:80/
ProxyPassReverse / http://192.168.2.32:80/
</VirtualHost>
vielleicht in
<VirtualHost *:1602>
ServerName doko-lounge-selfhost.eu
ProxyPreserveHost On
DocumentRoot /var/www/html
ProxyPass /.well-known !
ProxyPass / http://192.168.2.32:1602/
ProxyPassReverse / http://192.168.2.32:1602/
</VirtualHost>
ändern oder hinzufügen da der Web-Server ja auf Port 1602 läuft?
Habe es gerade versucht. Funktioniert leider auch nicht.
Getestet habe ich auch. Alles ok. Nur komme ich von einer verschlüsselten Seite NICHT auf meinen Web-Socket Server.
muss ich das:
<VirtualHost *:80>
ServerName doko-lounge-selfhost.eu
ProxyPreserveHost On
DocumentRoot /var/www/html
ProxyPass /.well-known !
ProxyPass / http://192.168.2.32:80/
ProxyPassReverse / http://192.168.2.32:80/
</VirtualHost>
vielleicht in
<VirtualHost *:1602>
ServerName doko-lounge-selfhost.eu
ProxyPreserveHost On
DocumentRoot /var/www/html
ProxyPass /.well-known !
ProxyPass / http://192.168.2.32:1602/
ProxyPassReverse / http://192.168.2.32:1602/
</VirtualHost>
ändern oder hinzufügen da der Web-Server ja auf Port 1602 läuft?
Habe es gerade versucht. Funktioniert leider auch nicht.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Du brauchst einen VirtualHost für Port 80 und für Port 443.
Aber ich steig jetzt nicht mehr ganz durch bei dir.
Also du hast einen Router mit zwei Port forwarding Regeln. Die Ports 80 und 443 hast du weitergeleitet auf die Ports 80 und 443 deines PCs.
Dieser PC hat einen Apachen auf Port 80 und 443 laufen und dieser soll dann Proxy zu deiner PB-Anwendung spielen, die auf dem selben PC läuft?
Zunächst solltest du sichergehen, dass dein Apache überhaupt auf den Port 443 hört. Unter einem Ubuntu gibt es dafür diese Datei:
/etc/apache2/ports.conf
An ihr erkennt man, dass der Apache nur auf Port 443 läuft, wenn das ssl-Module aktiv ist. Wenn man sich nicht sicher ist, muss man es aktivieren. z.B. so:
Dann solltest du z.B. folgende Datei anlegen:
/etc/apache2/sites-available/doko-lounge.selfhost.eu.conf (Du hattest hier einen Tippfehler. Ich habe - durch . ersetzt)
Danach aktivierst du die Seite und startest den Apachen neu.
Falls du das ganze unter Windows machst, musst du selbst herausfinden, wo diese Dateien alle liegen und ob die Pfade stimmen. Ich habe einfach mal geraten.
Aber ich steig jetzt nicht mehr ganz durch bei dir.
Also du hast einen Router mit zwei Port forwarding Regeln. Die Ports 80 und 443 hast du weitergeleitet auf die Ports 80 und 443 deines PCs.
Dieser PC hat einen Apachen auf Port 80 und 443 laufen und dieser soll dann Proxy zu deiner PB-Anwendung spielen, die auf dem selben PC läuft?
Zunächst solltest du sichergehen, dass dein Apache überhaupt auf den Port 443 hört. Unter einem Ubuntu gibt es dafür diese Datei:
/etc/apache2/ports.conf
Code: Alles auswählen
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Code: Alles auswählen
sudo a2enmod ssl
/etc/apache2/sites-available/doko-lounge.selfhost.eu.conf (Du hattest hier einen Tippfehler. Ich habe - durch . ersetzt)
Code: Alles auswählen
<VirtualHost *:80>
ServerName doko-lounge.selfhost.eu
ServerAdmin mailadresse@example.com
# Falls jemand www. benutzt, schneide es ab.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [L,NE,R=301]
<Location "/.well-known">
Require all granted
</Location>
# Hier muss der Pfad hin, in den Let's Encrypt Dateien anlegen darf
DocumentRoot /var/www/html
# Leite alle Zugriffe direkt auf HTTPS um
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/.well-known/(.*)
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<Virtualhost *:443>
ServerName doko-lounge.selfhost.eu
ServerAdmin mailadresse@example.com
# Let's Encrypt Zertifikate laden
SSLCertificateFile /etc/letsencrypt/live/doko-lounge.selfhost.eu/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/doko-lounge.selfhost.eu/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/doko-lounge.selfhost.eu/fullchain.pem
# Konfiguriere die erlaubten SSL-Protokolle
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
SSLHonorCipherOrder on
SSLCompression off
# Aktiviere HSTS und erlaube Frames nur vom selben Origin
Header always set Strict-Transport-Security "max-age=31536000;"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff
# Das braucht man, damit die RemoteIP weitergegeben wird
RemoteIPHeader X-Forwarded-For
# Das ist wichtig, damit der originale Servername an den Proxy weitergegeben wird
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:1602/
ProxyPassReverse / http://127.0.0.1:1602/
</VirtualHost>
Code: Alles auswählen
sudo a2ensite doko-lounge.selfhost.eu.conf
sudo systemctl restart apache2.service
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Ja Mensch, da guckt man sich 1000 Videos an, aber bei dir habe ich es endlich etwas verstanden, NicTheQuick.
Ich werde das morgen ausgiebig testen.
Ich habe den Apache auf Linux Mint 20 laufen.
Erst einmal vielen Dank!!
Ich werde das morgen ausgiebig testen.
Ich habe den Apache auf Linux Mint 20 laufen.
Erst einmal vielen Dank!!
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Ich habe mir für den ganzen Kram schon einige Makros angelegt, die mir das vereinfachen. Ich hab das gerade extra für dich nochmal etwas aufgedröselt und ein paar Kommentare reingeschrieben. Ich kann mir vor stellen, dass zwischendurch doch noch Fehler passen. Um die Apache-Konfiguration zu testen, schreib einfach das hier:
Ist der Syntax OK, dann sollte ein Restart möglich sein. Solange du keine Module installierst, deinstallierst und ausschließlich nur VirtualHosts änderst, dann reicht auch ein "sudo systemctl reload apache2.service". Aber einen großen Unterschied wird das für dich wahrscheinlich nicht machen.
Falls nicht schon geschehen, musst du auch noch folgendes Modul aktivieren
Und wenn du noch mehr Fragen hast, frag einfach, aber schreib mir auch die genauen Fehlermeldungen hier, damit es einfacher für mich ist. In /var/log/apache/ findest du auch immer allerhand Logs.
Code: Alles auswählen
sudo apachectl configtest
Falls nicht schon geschehen, musst du auch noch folgendes Modul aktivieren
Code: Alles auswählen
sudo a2enmod proxy_http
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Hm, ich hab alle so gemacht wie du es beschrieben hast.
Leider kommt folgende Fehlermeldung:
Ich habe noch eine Verständnisfrage.
Der Client versucht ja sich mit dem Server über Websockets auf Port 1602 zu verbinden.
Muss ich da keinen VirtualHost für Port 1602 erstellen?
Leider kommt folgende Fehlermeldung:
Klammere ich RemoteIPHeader aus, kommt folgende Meldung:Syntax error on line 49 of /etc/apache2/sites-enabled/doko-lounge.selfhost.eu.conf:
Invalid command 'RemoteIPHeader', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
Leider kann ich nirgends einen Eintrag mit der IP 127.0.1.1 finden...apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Ich habe noch eine Verständnisfrage.
Der Client versucht ja sich mit dem Server über Websockets auf Port 1602 zu verbinden.
Muss ich da keinen VirtualHost für Port 1602 erstellen?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Die Zeile brauchst du nicht unbedingt. Du kannst sie entweder löschen, oder du aktivierst das Modul headers:stevie1401 hat geschrieben:Syntax error on line 49 of /etc/apache2/sites-enabled/doko-lounge.selfhost.eu.conf:
Invalid command 'RemoteIPHeader', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
Code: Alles auswählen
sudo a2enmod headers
Das ist nur eine Info, kein echter Fehler. Das kannst du ignorieren.stevie1401 hat geschrieben:Klammere ich RemoteIPHeader aus, kommt folgende Meldung:apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Der Client sollte natürlich auch für seine Websockets https über Port 433 nutzen. Der Port 1602 sollte nur auf deinem PC offen sein, und nicht öffentlich im Internet hängen. Auch die Websockets sollten über den vorhandenen VirtualHost laufen. Die werden dann ja automatisch geproxied zu Port 1602 am PC.stevie1401 hat geschrieben:Ich habe noch eine Verständnisfrage.
Der Client versucht ja sich mit dem Server über Websockets auf Port 1602 zu verbinden.
Muss ich da keinen VirtualHost für Port 1602 erstellen?
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Hm, ok, dann scheint alles ok zu sein.
Aber wie erreiche ich nun per Websocket mein Programm?
Laut Kiffi in der Spiderbasic-Rubrik, muss ich nun nicht mehr mit
sondern mit
Meinen Server erreichen.
Klappt aber nicht.
Auch nicht
und
Aber wie erreiche ich nun per Websocket mein Programm?
Laut Kiffi in der Spiderbasic-Rubrik, muss ich nun nicht mehr mit
Code: Alles auswählen
"ws://doko-lounge.selfhost.eu:1602"
sondern mit
Code: Alles auswählen
"wss://doko-lounge.selfhost.eu:1602"
Meinen Server erreichen.
Klappt aber nicht.
Auch nicht
Code: Alles auswählen
"wss://doko-lounge.selfhost.eu:80"
und
Code: Alles auswählen
"wss://doko-lounge.selfhost.eu:443"
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Reverse Proxy mit Lets Encrypt funktioniert nicht
Oh, interessant. Das Protokoll ws bzw. wss habe ich noch nie genutzt. Jetzt hast du meine Wissenslücke erwischt.
Aber auch dafür gibt es ein Modul im Apachen: https://httpd.apache.org/docs/2.4/mod/m ... unnel.html
Zunächst müsstest du also auch dieses Modul aktivieren:
Und jetzt muss ich raten. Und rate dir diesen Teil
mit diesem zu ersetzen
Das sollte je nach einkommendem Protokoll entweder auf http oder ws Proxy spielen. Das P (Proxy) in [P,L] bedeutet, dass hier nicht wirklich eine URL umgeschrieben wird, sondern das selbe gemacht wird wie normalerweise ProxyPass macht. Das L (Last) in [P,L] bedeutet, dass nach dem Ausführen dieser Regel nichts weiter getan werden soll.
Aber auch dafür gibt es ein Modul im Apachen: https://httpd.apache.org/docs/2.4/mod/m ... unnel.html
Zunächst müsstest du also auch dieses Modul aktivieren:
Code: Alles auswählen
sudo a2enmod proxy_wstunnel
Code: Alles auswählen
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:1602/
ProxyPassReverse / http://127.0.0.1:1602/
Code: Alles auswählen
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule ^/(.*) ws://127.0.0.1:1602/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule ^/(.*) http://127.0.0.1:1602/$1 [P,L]
ProxyPassReverse / http://127.0.0.1:1602/