Hallo zusammen,
zuerst einmal sorry für meinen Post gestern mit den spärlichen Infos. Ich war frustriert, weil ich nach dem erfolgreichen chroot dachte „cool, jetzt noch einen Proxy und in 5 Minuten läuft das Ding wieder“ und zwei Tage später war ich immer noch nicht weiter.
Ich habe mich heute noch einmal mit frischem Kopf daran gemacht, das Loglevel des nginx auf debug gesetzt und versucht Anfragen von
http://google.de auf
https://google.de weiterzuleiten. Dann fiel mir im Log folgendes auf:
<...>
2020/11/02 09:05:47 [alert] 7045#7045: *7 socket() failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: google.de, request: "GET http://google.de/ HTTP/1.1", upstream: "https://[2a004001:817::2003]:443/", host: "google.de"
<...>
nginx darf keinen Socket aufmachen. Grund ist das restriktive Android-System, das erlaubt sowas nur, wenn der Nutzer in der Gruppe inet ist. Diese muss man im Debian chroot erst anlegen:
addgroup --gid 3003 inet
Anschließend fügt man den Benutzer www-data hinzu (unter dem wird nginx bei Debian ausgeführt):
adduser www-data inet
Nach einem Neustart von nginx konnte ich meine Anfragen auf
https://google.de weiterleiten.
Nun also weiter mit davdroid. Davdroid und nginx meldeten 404er Fehlermeldungen im Zusammenhang mit PROPFIND. Dafür muss man noch ein paar dav-spezifische Optionen (
dav_methods und
dav_ext_methods) in die Config schreiben [1]
Nachdem ich die Config angepasst habe, konnte ich mich mit der Nextcloudinstanz verbinden, allerdings konnte ich keine Daten verändern, die App wurde instabil, startete ständig neu und das Log war mit HTTP400-Fehlern gespickt. Zudem war das Log voll mit Einträgen wie:
2020/11/02 13:10:01 [info] 2302#2302: *99 client sent invalid method while reading client request line, client: 127.0.0.1, server: <SERVER>, request: "qm_�)k3�/*WF���ya�ARt"
Letzteres konnte ich mit der Option
ignore_invalid_headers on; abstellen, bei der instabilen App war ich allerdings ein wenig ratlos. In meiner Verzweiflung habe ich dann die add_header Optionen [2] in die Config eingearbeitet und hatte zu meiner Verwunderung sofort einen stabilen davdroid Clienten.
Blieb noch das Problem der nicht veränderbaren Daten. Ich bemerkte, dass sobald ich im Webinterface oder in der App auf dem Telefon Termine anlegte, diese nur manchmal übertragen wurden. Im Log fielen mir zudem solche Verbindungsabbrüche auf:
2020/11/02 19:03:32 [info] 26706#26706: *23 client 127.0.0.1 closed keepalive connection (104: Connection reset by peer)
Die Ursache der Abbrüche konnte ich nicht nachvollziehen (Internetverbindung scheint okay), aber die Synchronisation funktioniert zumindest dann zuverlässig, wenn man mit einem Cache arbeitet. Ich habe also mit
mkdir -p /var/cache/nginx/temp && chown www-data /var/cache/nginx/temp zwei Ordner angelegt und die Optionen
root und
client_body_temp_path in die Config hinzugefügt.
Jetzt funktioniert alles so wie ich es will: davdroid spricht mit dem Proxy im chroot unverschlüsselt, der Proxy leitet alles brav an die Nextcloud-Instanz weiter.
Puuh, fünf Minuten können manchmal ganz schön lang sein
Bleibt mir nur noch zu sagen: Vielen Dank an alle Beteiligten für eure Beiträge, insbesondere an wanne!
Noch einmal alles zusammengefasst:
Konfiguration Server:
Code: Alles auswählen
# addgroup --gid 3003 inet
# adduser www-data inet
# mkdir -p /var/cache/nginx/temp
# chown www-data /var/cache/nginx/temp
# cat <<EOF > /etc/nginx/conf.d/01_reverse.conf
server {
listen 127.0.0.1:443;
server_name <SERVER>;
ignore_invalid_headers on;
location / {
proxy_pass https://<SERVER>/;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
root /var/cache/nginx;
client_body_temp_path /var/cache/nginx/temp;
}
}
EOF
Konfiguration Client:
URL: http://localhost:<PORT>/remote.php/dav/
Benutzername <USER>
Passwort: <PASSWD>
<PORT> kann ein beliebiger Port sein, <SERVER> ist die Adresse der Nextcloud-Instanz, <USER> und <PASSWD> je nach Benutzer anpassen.
[1]
https://wiki.archlinux.org/index.php/WebDAV#Nginx
[2]
https://docs.nextcloud.com/server/stabl ... t-of-nginx