marcus78
Goto Top

Nginx proxypass langsam

Hallo,

ich wollte mal als reverse Proxy den nginx einrichten. Grundsätzlich funktioniert auch alles, aber leider zu langsam.

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

        server_name "~(?<host1>.*).home.XXXXX.de$";  

        location / {
                #proxy_pass https:{{comment_single_line_double_slash:0}}
                proxy_pass https://cam1.internal;
        }
}

Diese Version mit der festen Adresse in proxy_pass geht schnell, wenn ich aber die Version mit der Variabel nutze dauert der gleiche Aufruf 1min ( 30 Resourcen werden geladen). Es wird die gleiche URL aufgerufen
http://cam1.home.XXXXX.de

Es scheint mir als ob das Auswerten der Variable das ganze ausbremst, geht jemand das Verhalten und eventuell eine Lösung?

nginx -version
nginx version: nginx/1.24.0

Content-Key: 43055294217

Url: https://administrator.de/contentid/43055294217

Printed on: May 19, 2024 at 08:05 o'clock

Member: Marcus78
Marcus78 May 07, 2024 at 06:04:06 (UTC)
Goto Top
Leider macht das Forum die die wichtige Zeile kaputt

die Auskommentierte sollte so aussehen

proxy_pass https://$host1.internal;
Member: hempel
hempel May 07, 2024 updated at 06:34:01 (UTC)
Goto Top
Hallo.
Der Regex hat ein paar Fehler, ändere mal zu
server_name "~^(?<host1>.+)\.home\.XXXXX\.de$"  
hilft das?
Gibt es noch andere Server-Blocks?
Was sagt das Debug-Log?

Gruß h.
Member: Marcus78
Marcus78 May 07, 2024 at 06:55:58 (UTC)
Goto Top
Hallo.
Der Regex hat ein paar Fehler, ändere mal zu
1
server_name "~^(?<host1>.+)\.home\.XXXXX\.de$"
hilft das?
nein, leider nicht . Richtig der punkt muss ja gequoted werden.

Gibt es noch andere Server-Blocks?
nein

Was sagt das Debug-Log?
muss ich erst mal schauen, wo ich das aktiviere.
Member: accessViolation
accessViolation May 07, 2024 at 07:18:49 (UTC)
Goto Top
muss ich erst mal schauen, wo ich das aktiviere.


/var/log/nginx/error.log
Member: Marcus78
Marcus78 May 07, 2024 at 07:28:48 (UTC)
Goto Top
Zitat von @accessViolation:

muss ich erst mal schauen, wo ich das aktiviere.


/var/log/nginx/error.log

Es kommt ja keine fehler, damit steht auch nicht in error.log drin. Es ist nur langsam.
Member: hempel
hempel May 07, 2024 updated at 07:53:30 (UTC)
Goto Top
Member: LordGurke
LordGurke May 07, 2024 at 07:54:12 (UTC)
Goto Top
Das könnte an der Namensauflösung liegen.
Funktioniert die denn grundsätzlich auf dem nginx-System halbwegs schnell? Eventuell ist da ein primärer DNS-Server hinterlegt, der ziemlich langsam ist.
Ist auf dem System systemd-resolved aktiviert? Wenn nicht den mal aktivieren, nginx neustarten und gucken ob es dann schneller geht.
Member: Marcus78
Marcus78 May 07, 2024 at 08:01:02 (UTC)
Goto Top
LordGurke 07.05.2024 um 09:54:12 Uhr
MARKIERE ALS 'LÖSUNG'

Das könnte an der Namensauflösung liegen.
Funktioniert die denn grundsätzlich auf dem nginx-System halbwegs schnell? Eventuell ist da ein primärer DNS-Server hinterlegt, der ziemlich langsam ist.


es wird ja immer der gleiche Name verwendet, nur einmal mit Variable und einmal ohne.
Nach dem die Variabel eingesetzt wird, steht also genau das gleiche drin.
Member: hempel
hempel May 07, 2024 updated at 08:12:01 (UTC)
Goto Top
Den Host-Header liest nginx ja eh aus dem Request aus, wozu sollte da zusätzlich noch eine DNS Abfrage dessen stattfinden außer für den internen? Kann ich hier im Test mit tcpdump auch nicht bestätigen.
Schaden kann's aber nicht wenn du es mal damit zur Sicherheit bei dir checkst.
Member: Marcus78
Marcus78 May 07, 2024 at 08:07:39 (UTC)
Goto Top
wozu sollte da zusätzlich noch eine DNS Abfrage

er muss ja eine Verbindung zu den nächsten Server aufbauen. Also muss er ja

https://cam1.internal auflösen, aber es sollte kein Unterschied zu https://$host1.internal sein, wenn in $host cam1 steht
Member: Marcus78
Marcus78 May 07, 2024 at 08:53:08 (UTC)
Goto Top
server {
        listen 80;
        listen [::]:80;

        root /var/www/html;

        server_name *.home.XXXX.de;

        location / {
                set $host1 cam1;
                proxy_pass https://$host1.internal;
        }
}

Auch diese Version ist langsam. Es scheint also nur mit der Variabel und nicht am Regex zu hängen
Member: hempel
hempel May 07, 2024 updated at 09:19:50 (UTC)
Goto Top
Schreib das stattdessen mal so, dann muss der Interpreter nicht alle möglichen Variablen Varianten durchorgeln
proxy_pass "https://${host1}.internal";  

Aber selbst wenn, 1 Minute wird's dafür auch nicht brauchen da wird ein anderes Problem vorliegen.
Was sagt nun das Debug Log? Und das journal?

Mach auch testweise einen Tcpdump und schau dir das in Wireshark an.
Member: Marcus78
Marcus78 May 07, 2024 at 09:25:38 (UTC)
Goto Top
Schreib das stattdessen mal so, dann muss der Interpreter nicht alle möglichen Variablen Varianten durchorgeln
1
proxy_pass "https://${host1}.internal";

das gleiche, langsam.

Aber selbst wenn, 1 Minute wird's dafür auch nicht brauchen da wird ein anderes Problem vorliegen.
Was sagt nun das Debug Log? Und das journal?
zum Debug bin ich noch nicht gekommen.

Mach auch testweise einen Tcpdump und schau dir das in Wireshark an.
auf was sollte ich da filtern? DNS läuft ja nur über loopback. Browser zeigt mir ja die Zeiten an. Und daten an cam1 sind verschlüsselt.
Nach was sollte ich da suchen? Ohne Variable geht es ja schnell.

Ich schaue mal ob ich mit dem Debug ein paar mehr infos bekomme ...
Member: hempel
hempel May 07, 2024 updated at 09:34:49 (UTC)
Goto Top
Zitat von @Marcus78:
Mach auch testweise einen Tcpdump und schau dir das in Wireshark an.
auf was sollte ich da filtern? DNS läuft ja nur über loopback. Browser zeigt mir ja die Zeiten an. Und daten an cam1 sind verschlüsselt.

Erst mal nicht filtern um zu sehen was die Maschine alles macht. Nur um sicherzugehen das da Netzwerktechnisch nichts schief läuft. Zum Entschlüsseln brauchst du nur die SSL Session Keys aufzeichnen und Wireshark in der Config übergeben, schon siehst du alles im Klartext
https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA14u0000 ...
Member: Marcus78
Marcus78 May 07, 2024 at 10:25:02 (UTC)
Goto Top
# schnell
set $host1 cam1;
proxy_pass https://cam1.internal;

[07/May/2024:11:44:24 +0200] "GET / HTTP/1.1" 200 7266 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.712 uct="0.704" uht="0.709" urt="0.712"  
[07/May/2024:11:44:24 +0200] "GET /css/glDatePicker.default.css?timeVersion=1652772242477 HTTP/1.1" 200 8171 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.008 uct="0.004" uht="0.008" urt="0.008"  
[07/May/2024:11:44:26 +0200] "GET /css/skin.css?timeVersion=1652772242477 HTTP/1.1" 200 4322 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=1.277 uct="0.008" uht="1.277" urt="1.277"  
[07/May/2024:11:44:26 +0200] "GET /css/reset.css?timeVersion=1652772242477 HTTP/1.1" 200 799 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=1.963 uct="1.285" uht="1.962" urt="1.962"  
[07/May/2024:11:44:26 +0200] "GET /css/index.css?timeVersion=1652772242477 HTTP/1.1" 200 54630 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=1.982 uct="1.305" uht="1.968" urt="1.982"  
[07/May/2024:11:44:26 +0200] "GET /css/channel.css?timeVersion=1652772242477 HTTP/1.1" 200 2177 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=1.983 uct="1.335" uht="1.983" urt="1.983"  
[07/May/2024:11:44:26 +0200] "GET /css/accountLogin.4cd3a0d6.css HTTP/1.1" 200 183597 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=2.056 uct="1.987" uht="2.006" urt="2.050"  
[07/May/2024:11:44:26 +0200] "GET /css/bc_css.css?timeVersion=1652772242477 HTTP/1.1" 200 17982 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=2.070 uct="2.011" uht="2.069" urt="2.070"  
[07/May/2024:11:44:27 +0200] "GET /js/accountLogin.082ba63f.js HTTP/1.1" 200 1051702 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=1.124 uct="0.713" uht="0.783" urt="1.124"  
[07/May/2024:11:44:27 +0200] "GET /js/chunk-vendors.99be692d.js HTTP/1.1" 200 954471 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.720 uct="0.075" uht="0.455" urt="0.720"  
[07/May/2024:11:44:27 +0200] "GET /css/login.css?timeVersion=1652772242477 HTTP/1.1" 200 1433 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.713 uct="0.417" uht="0.713" urt="0.713"  
[07/May/2024:11:44:27 +0200] "GET /css/my_bootstrap.min.css?timeVersion=1652772242477 HTTP/1.1" 200 48865 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.694 uct="0.672" uht="0.688" urt="0.694"  
[07/May/2024:11:44:27 +0200] "GET /css/view.css?timeVersion=1652772242477 HTTP/1.1" 200 7142 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.615 uct="0.595" uht="0.615" urt="0.615"  
[07/May/2024:11:44:27 +0200] "GET /css/dialog.css?timeVersion=1652772242477 HTTP/1.1" 200 1755 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.595 uct="0.586" uht="0.595" urt="0.595"  
[07/May/2024:11:44:27 +0200] "GET /css/contextmenu.css?timeVersion=1652772242477 HTTP/1.1" 200 764 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.308 uct="0.288" uht="0.308" urt="0.308"  

# langsam
set $host1 cam1;
proxy_pass https://${host1}.internal;

[07/May/2024:11:55:52 +0200] "GET / HTTP/1.1" 200 7266 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=0.679 uct="0.669" uht="0.675" urt="0.678"  
[07/May/2024:11:55:55 +0200] "GET /css/glDatePicker.default.css?timeVersion=1652772242477 HTTP/1.1" 200 8171 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.301 uct="1.972" uht="3.299" urt="3.300"  
[07/May/2024:11:55:55 +0200] "GET /css/channel.css?timeVersion=1652772242477 HTTP/1.1" 200 2177 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.292 uct="2.581" uht="3.292" urt="3.292"  
[07/May/2024:11:55:56 +0200] "GET /css/skin.css?timeVersion=1652772242477 HTTP/1.1" 200 4322 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.945 uct="2.589" uht="3.946" urt="3.946"  
[07/May/2024:11:55:56 +0200] "GET /css/bc_css.css?timeVersion=1652772242477 HTTP/1.1" 200 17982 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.970 uct="3.289" uht="3.969" urt="3.969"  
[07/May/2024:11:55:56 +0200] "GET /css/reset.css?timeVersion=1652772242477 HTTP/1.1" 200 799 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.980 uct="3.961" uht="3.979" urt="3.979"  
[07/May/2024:11:55:57 +0200] "GET /css/index.css?timeVersion=1652772242477 HTTP/1.1" 200 54630 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=4.633 uct="3.979" uht="4.615" urt="4.633"  
[07/May/2024:11:55:59 +0200] "GET /css/accountLogin.4cd3a0d6.css HTTP/1.1" 200 183597 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.371 uct="2.008" uht="3.292" urt="3.370"  
[07/May/2024:11:55:59 +0200] "GET /js/accountLogin.082ba63f.js HTTP/1.1" 200 1051702 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.676 uct="2.653" uht="3.375" urt="3.675"  
[07/May/2024:11:56:01 +0200] "GET /js/chunk-vendors.99be692d.js HTTP/1.1" 200 954471 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=4.610 uct="2.714" uht="4.322" urt="4.609"  
[07/May/2024:11:56:01 +0200] "GET /css/login.css?timeVersion=1652772242477 HTTP/1.1" 200 1433 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=5.251 uct="3.665" uht="5.250" urt="5.250"  
[07/May/2024:11:56:02 +0200] "GET /css/my_bootstrap.min.css?timeVersion=1652772242477 HTTP/1.1" 200 48865 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=5.970 uct="4.569" uht="5.962" urt="5.969"  
[07/May/2024:11:56:02 +0200] "GET /css/view.css?timeVersion=1652772242477 HTTP/1.1" 200 7142 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=5.317 uct="4.569" uht="5.316" urt="5.316"  
[07/May/2024:11:56:03 +0200] "GET /css/dialog.css?timeVersion=1652772242477 HTTP/1.1" 200 1755 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.988 uct="3.289" uht="3.987" urt="3.987"  
[07/May/2024:11:56:03 +0200] "GET /css/contextmenu.css?timeVersion=1652772242477 HTTP/1.1" 499 0 "http://cam1.home.itdau.de/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"rt=3.984 uct="3.682" uht="-" urt="3.984"  

man sieht sehr gut wie sich die urt zeiten unterscheiden.
https://docs.nginx.com/nginx/admin-guide/monitoring/logging/
Member: Marcus78
Marcus78 May 07, 2024 at 10:32:50 (UTC)
Goto Top
so hier noch der tcpdump vom LO

12:30:10.037857 IP 127.0.0.1.44988 > 127.0.0.11.53: 40980+ A? cam1.internal. (31)
12:30:10.037908 IP 127.0.0.1.44988 > 127.0.0.11.53: 59789+ AAAA? cam1.internal. (31)
12:30:10.038004 IP 127.0.0.11.53 > 127.0.0.1.44988: 40980 1/0/0 A 192.168.3.121 (47)
12:30:10.038120 IP 127.0.0.11.53 > 127.0.0.1.44988: 59789 0/1/0 (80)
12:30:10.881741 IP 127.0.0.1.43060 > 127.0.0.11.53: 12622+ A? cam1.internal. (31)
12:30:10.881796 IP 127.0.0.1.43060 > 127.0.0.11.53: 13301+ AAAA? cam1.internal. (31)
12:30:10.881905 IP 127.0.0.11.53 > 127.0.0.1.43060: 12622 1/0/0 A 192.168.3.121 (47)
12:30:10.882027 IP 127.0.0.11.53 > 127.0.0.1.43060: 13301 0/1/0 (80)
12:30:41.349661 IP 127.0.0.1.44988 > 127.0.0.11.53: 24458+ A? cam1.internal. (31)
12:30:41.349716 IP 127.0.0.1.44988 > 127.0.0.11.53: 35461+ AAAA? cam1.internal. (31)
12:30:41.349819 IP 127.0.0.11.53 > 127.0.0.1.44988: 24458 1/0/0 A 192.168.3.121 (47)
12:30:41.350096 IP 127.0.0.11.53 > 127.0.0.1.44988: 35461 0/1/0 (80)
12:30:41.973680 IP 127.0.0.1.43060 > 127.0.0.11.53: 54767+ A? cam1.internal. (31)
12:30:41.973735 IP 127.0.0.1.43060 > 127.0.0.11.53: 51896+ AAAA? cam1.internal. (31)
12:30:41.973844 IP 127.0.0.11.53 > 127.0.0.1.43060: 54767 1/0/0 A 192.168.3.121 (47)
12:30:41.973967 IP 127.0.0.11.53 > 127.0.0.1.43060: 51896 0/1/0 (80)

sieht mir auch normal aus
Member: hempel
hempel May 07, 2024 updated at 10:36:31 (UTC)
Goto Top
Schalte mal das buffering ab
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Connection "upgrade";  
proxy_buffering off;
proxy_pass "https://${host1}.internal";  

Wieso überhaupt intern https und extern dann http?

so hier noch der tcpdump vom LO
Nicht nur lokal auch sondern auch was an den externen iFs zum Zeitpunkt passiert.
Member: Marcus78
Marcus78 May 07, 2024 at 10:43:49 (UTC)
Goto Top
Schalte mal das buffering ab
1
2
3
4
5
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_pass "https://${host1}.internal";

ändert leider nichts.

Wieso überhaupt intern https und extern dann http?
später soll alles über https laufen, aber fürs mitlesen ist halt http einfacher. Die Kamera will aber zwingend https.

so hier noch der tcpdump vom LO
Nicht nur lokal auch sondern auch was an den externen iFs zum Zeitpunkt passiert.
nicht so einfach. da 2 Netzwerkkarten und ich auch über remote und vpn-tunnel verbunden bin.
(VPN ist nur für SSH, der Test läuft vom Browser direkt auf Interface 1 und die Camera hängt am Interface 2)

Da muss ich halt einige wegfiltern. Un dann möglichst von alles zum selbern Zeitpunkt.