nginx Anzahl Verbindungen und Timeouts bei Z-Push

  • Hallo zusammen,

    bisher reichte der bisherige PI inkl nginx völlig für meine Belange. Nun wollte ich den Nutzen etwas erweitern und auch Z-Push und Baikal nutzen. Das scheint aber nicht so ganz simpel zu sein. Aus meiner Sicht scheitert es an Timeouts, da der Ngix auf dem Pi nicht schnell genug die Verbindungen bedienen kann. Aber erst mal kurz erklären, wie das aktuelle Setup grob ausschaut:

    Baikal Installation ist erfolgreich. Ich kann Problemlos auf CalDAV und CardDAV zugreifen. Ist auch recht flott was Schreib und Lesezugriffe angeht. Als Backend dient MariaDB. Konfiguriere ich Z-Push auf die einzelnen Dienste wie entweder nur IMAP oder nur CardDAV oder nur CalDAV, läuft auch noch alles im grünen Bereich. Keine Timeouts. Es sind keine Verzögerungen spürbar. Zeitgleich über ein Smartphone syncen via EAS und Zugriff auf die Webseiten stellt kein Problem dar. Wechsle ich die Z-Psuh Konfiguration aber auf das BakendCombined, kommt es zu argen Timeoutproblemen und der Sync bricht irgendwann mit etlichen Loops ab. Das geht soweit, das Fail2Ban sogar irgendwann die extern zugreifenden IP Adressen sperrt. Aus meiner Sicht sind dabei das Problem die vielen gleichzeitigen https Zugriffe. Zum einen sind ja die Anfragen zwischen den Mobilgeräten und nginx bzw. Z-Push. Aber um diese zu beantworten, fragt Z-Push auch wieder per https nach CalDAV und CardDAV und zusätzlich via IMAP nach den Mails für den Sync.

    Wenn ich Roundcube ebenfalls auf der Kiste laufen habe und damit Mails, CalDAV und CardDAV vom Baikal abrufe, habe ich das gleiche Problem, auch hier kommt es irgendwann nach ein paar Minuten zu Timeouts bei den Abfragen vom Baikal, woraufhin auch Roundcube irgendwann abbricht.

    Daher mal die Frage in die Runde: Hat jemand von euch eventuell ähnliches auf seinem PI laufen (Z-Push mit BackendCombined und Abfrage von IMAP, CardDAV und CalDAV) und das möglichst ohne Probleme? Irgendwelche Tipps was man in der Nginx Config anpassen sollte, um das Problem in den Griff zu bekommen?

    Anbei noch Teile meine Config:

    fastcgi_read_timeout hab ich auf 300, worker_processes auf 4 (Kann der höher sein beim Pi2?), worker_connections 256; multi_accept on; keepalive_timeout 5; In der php.ini hab ich den Timeout auch auf 300. Ich nehme an, das sind die interessantesten Werte.

    Achso, der IMAP und SMTP Server ist als einziger ein externer Server, der nicht auf dem PI selbst liegt. Ich wollte das erst mal testen, ob es überhaupt funktioniert, bevor ich mir die Arbeit mache und auch noch einen Mailserver auf dem Pi aufsetze.

  • Hi,
    erst mal Sorry, das ich das alte Thema hervorhole, aber ich hoffe, der Ersteller hat dieses Thema noch abonniert, denn er scheint die Lösung zu meinem Problem zu haben.

    Ich möchte nämlich auch Z-Push mit Baikal nutzen. Ich hatte mich auch vor über einem Jahr schon damit beschäftigt, siehe hier. Leider hatte sich damals keiner darauf gemeldet.
    Da ich jetzt ein wenig Zeit habe, wollte ich es erneut versuchen und bin auf dieses Thema gestoßen.

    Falls Tweenowed das hier noch liest, und mir seine nginx Server Config zukommen lässt, wäre ich sehr dankbar.


    Grüße Alex

  • Naja so alt ist der Thread nun auch nicht :) Aktuell nutze ich selber kein ActiveSync mehr sonder nur noch DAV (CalDAV, CardDAV und WebDAV) über SabreDAV. Leider wurde ja die Entwicklung von Baikal und SabreDAV im April eingestellt, was ich echt schade finde. Hoffen wir mal das jemand den Sourcecode weiter pflegt. Wie auch immer, hat nur am Rande mit dem Thema zu tun, zurück daher dazu. Worker Prozesse habe ich auf 3 reduziert in meinem Setup, es gibt noch einen zusätzlichen Hauptprozess von Nginx, insgesamt also wieder 4. Nach meinem empfinde läuft das etwas runder. Timeouts hatte ich für Z-Push irgendwann sowohl bei fastcgi, als auch in der php.ini auf 600 erhöht, dabei habe ich gleichzeitige Verbindungen von einer IP/Agent arg reduziert, den genauen Wert weiß ich leider nicht mehr. Das hatte ich mittels User Agent und IP Adresse als Bedingung in die config von nginx aufgenommen. Dadurch konnten andere Clients dennoch Verbindungen aufbauen. Bei vielen Kontakten mit relativ großen hinterlegten Kontaktbildern hat dies für den ersten Sync immer noch Timeouts gebracht aber das hat sich mit den nachfolgenden Syncs dann gegeben. Insgesamt lief es recht stabil und ohne Abbrüche. Auch Roundcube und Co laufen damit recht flüssig.

    Wie gesagt, nutze ich aktuell nur noch direktes DAV. Dadurch das ich grad erst vor ein paar Wochen das Ganze mit einem neuen Image von Debian 9 überspielt habe, habe ich leider die alte Config nicht mehr parat. Im Groben hab ich das aber in nem Beitrag im NextCloud Forum beschrieben. Lediglich die Timeout Werte hab ich wie gesagt noch mal nach oben korrigiert. NextCloud habe ich aber auch wieder abgeschrieben. Leider läuft Nextcloud auf dem Raspberry Pi 2 ziemlich zäh. Die WebGUI ist ja noch OK aber WebDAV ist dermaßen langsam das es eine Qual ist das zu nutzen. Ich nehme an das da noch irgendwelche zusätzliche I/O Prozesse laufen, die ich mit reinem SabreDAV nicht habe. Leider konnte oder wollte mir aus der NextCloud Ecke niemand verraten was ich dagegen tun kann. Daher blieb mir nicht viel übrig als auf reines SabreDAV zu wechseln.

    Einmal editiert, zuletzt von Tweenowed (8. September 2017 um 07:48)

  • Danke für deine Antwort.
    Das Baikal / SabraDAV nicht mehr weiter gepflegt wird ist wirklich sehr schade. Aber mein Pi ist nur im Heimnetz, also Sicherheitstechnisch betrifft es mich weniger. Zurück zum Thema:
    Am Anfang meiner neuerlichen Mühen hatte ich dort weiter gemacht, wo ich damals aufgehört hatte. D.h. Baikal Version 0.2.7 und Z-Push Version 2.0.7. Damals haperte es an der Server Konfiguration der verschiedenen nginx Server Blocks. Bei der "location /Microsoft-Server-ActiveSync" war ein seltsames "rewrite" drin, durch welches ich alles zusammen nicht gleichzeitig zum Laufen gebracht hatte.
    Deine Anleitung aus dem Dezember hätte ich bereits im Februar gebrauchen können:).
    Die hat mir sehr weiter geholfen. Nach ein wenig Einarbeitung in die nginx-Doku hätte ich auch darauf kommen können das eine normale location mit separatem root-Verzeichnis und den php-Einstellungen reicht.
    In manchen "HowTo's" samt Kommentaren der Autoren habe ich öfter gelesen, dass das root-Verzeichnis in den locations nichts verloren hat und nur Global angegeben wird. Aber sei es drum.
    Die alte Version von Z-Push konnte ich zwar jetzt auf dem Server unter "Microsoft-Server-ActiveSync" erreichen, aber die lieferte irgendwelche Errors, zumindest beim CardDAV. Keine Ahnung, ob ich damals etwas verbogen hatte, was jetzt nicht mehr gefunden habe, oder woran es auch immer lag.
    Jetzt nutze ich die aktuelle stable (2.3.7). Wobei die anfangs auch nicht ganz rund lief. CardDAV ging mehr oder weniger auf Anhieb. Bei CalDAV musste ich erst recherchieren, dass das libawl-php Modul in der php.ini extra mit "include_path" eingebunden werden muss.
    Beim "BackendCombined" habe ich alles Auskommentiert, was nicht mit CalDAV / CardDAV funktioniert. Emails brauche ich nicht über EAS. Soweit funktioniert alles, zumindest über http, also ohne SSL.

    Noch ausstehende Probleme sind:
    - SSL mit Win Mobile 6.5 und dem selbst signierten Zertifikat.
    - Zeitverschiebung der Termine um 1 Stunde bei WM 6.5

    Das Zertifikat hatte ich auf dem WM 6.5 schon importiert, aber es kommt noch der Fehler "0x80072F0D".
    Termine vom Handy auf Baikal --> Thunderbird funktioniert. Andersherum kommt es zur Abweichung von +1 Stunde.

    Ich werde als nächstes erst mal Baikal auf die 0.4.6 updaten. Danach schaue ich mal weiter.
    Vielleicht fällt dir ja noch etwas dazu ein.

    PS.: Seafile soll doch halbwegs performant auf dem Pi laufen.

  • Im Normalfall hat ein neuer root path im location Anteil nichts zu suchen, richtig. Es ist aber auch nicht falsch, sondern laut Nginx Doku erlaubt. War für mich die schnellste Variante. Geht sicher auch eleganter. Damit wird lediglich mein bereits global definierter root path überschrieben (für diese spezielle location).

    SSL sollte mit WM6.5 kein Problem mehr sein. Entweder selbst signiert und per Hand importiert oder du hast ne eigene Domain und verwendest Let’s Encrypt oder vergleichbares. Letzteres nutze ich selbst, ist ein wenig Aufwand bei der Ersteinrichtung, aber es lohnt sich. Bei der Aktualisierung des Zertifikats wird auch gleich die Fritzbox mit dem entsprechenden Zertifikat automatisch mit versorgt (dazu hab ich das Shellscript entsprechend angepasst), somit gibt’s nirgends mehr einen Grund mein Zertifikat ablehnen zu müssen. Wobei … das CA von Let’s Encrypt ist wahrscheinlich auf einem WM 6.5 Device nicht vorhanden. Evtl. würde es da bei dir haken … Müsste man mal testen, hab leider kein solches Gerät mehr hier. Wenn du aber die gesamte Zertifikatskette als P7B im Browser exportierst und im Device wieder importierst, sollte das dennoch funktionieren (sowohl mit dem selbst signierten, als auch mit dem von Let’s Enrypt).

    Hmm irgendwas war damals mit 1h Zeitverschiebung auf WM 6.5, mein Gott ist das lang her. Ich würde als erstes Mal prüfen, ob auf dem Server selbst, in der richtigen php.ini und auf dem WM 6.5 Device die richtige Zeitzone eingestellt sind. Sollte vermutlich Europe/Berlin sein oder alternativ Amsterdam. Loggst sich dein Mobile Device in einem Mobilfunkmast außerhalb von Deutschland ein und die Zeit wird automatisch bezogen, sollte sich auch die Zeitzone automatisch ändern und deine Termine ein entsprechendes Offset bekommen. Auf dem Server kommen sie dann wieder mit der richtigen Zeit an.

    Seafile hatte ich mal kurz auf dem Radar aber wieder verworfen. Ich brauch primär WebDAV für KeePass und Backups, da reicht mir durchaus SabreDAV. Wenn du Baikal schon laufen hast, kannst ja SabreDAV mal testen. Die config ist nahezu die gleiche. Ich würde aber zu SabreDAV 3.2.0 raten. 3.2.1 hatte einen ziemlich miesen Fehler im CardDAV Protokoll, das wurde zwar nach meiner Meldung in 3.2.2 behoben, aber so richtig rund läuft auch die 3.2.2 mit CardDAV nicht. Ich hab gerade heute ne Menge positives zu Cozy Cloud gelesen. Vielleicht geb ich dem mal eine Chance. Schlimmer als OwnCloud kann's nicht sein :)

  • So, nach längerem Probieren und Recherchieren läuft jetzt alles soweit.
    SSL beim WM 6.5 lag daran, das WM nur Zertifikate mit SHA-1 verwenden kann. Also hab ich mir auf dem Pi ein neues Zertifikat erstellt. Man kann sich auch ein eigenes ROM kochen mit der crypt32.dll aus einem aktuellen Windows-Embedded-Handheld-Image, aber das Stock-ROM, welches als Grundlage dient, mag ich eigentlich nicht.
    Da ich meinen Pi nur im heimischen Netzwerk betreibe, sollte das SHA-1 Zertifikat auch keine Auswirkungen haben. Da ich den Pi mit der IP-Adresse anspreche, ist SNI wohl auch keine Option, um verschiedene Zertifikate zu nutzen. Ich könnte höchstens bei dem Rest was nicht EAS ist den Port wechseln. Aber das lasse ich bleiben, denke ich. Das macht es wahrscheinlich nur komplizierter.

    Die Zeitverschiebung tritt bei allen Clients auf, die ich ausprobiert habe (WM 6.5, Nine und das EAS-Plugin für Thunderbird). Es liegt also an Z-Push, vermutlich an der DST (Sommer-Zeit). Hier ist auch ein Patch. Aber so richtig funktioniert der nicht. Es wird zwar die richtige Startzeit gesetzt, was mir erst mal ausreicht, aber die Termine sind dadurch eine Stunde länger und es wird die Zeitzone geändert. Bis das Ticket geschlossen wird reicht mir der Quick-And-Dirty-Fix ersmal. Ende Oktober werde ich nochmal schauen, ob es wirklich an der DST liegt.

    Was ist denn der Vorteil von SabreDAV? Ich bin mit Baikal soweit eigentlich zufrieden. Für Backups nutze ich Duplicati und die Telekom-Cloud per WebDAV. Keepass synchronisiere ich über die Fritzbox NAS, ist zwar langsam aber dafür reicht es, und über die Telekom-Cloud mit Cryptomator.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!