Android 3.2 und das Let’s Encrypt Problem

Ich hab ja neulich auf HTTPS-Only Blog umgestellt, aber so ganz „Only“ geht es dann doch nicht.

Da die meisten RSS Feedleser für Handies die Zertifikate aus dem Truststore von Android benutzen, in dem Sie den internen Webbrowser benutzen um die Feeds anzuzeigen, kommt es mit Let’s Encrypt Zertifikaten zu Problemen: Die stehen da schlicht nicht drin. Wer da nicht drin steht, wird nicht angezeigt.

Das Problem habe ich bei meinen eigenen Android Programmen durch einen eigenen Truststore gelöst, der einfach die aktuellen Firefox Zertifikate bekommt. Das dieser Trick zwangsweise nur für eigene Programme funktioniert, mußte ich meinem Blog leider sagen, das Android weiterhin per Port 80 abrufen darf.

Und so geht so eine Ausnahme :

RewriteCond %{HTTP_HOST} .*marius\.bloggt-in-braunschweig\.de
RewriteCond %{SERVER_PORT}   !^443$
RewriteCond %{HTTP_USER_AGENT} !.*Android.3\.2.*
RewriteRule  (.*)  https://%{HTTP_HOST}/$1   [L]

 

Systemd und die Limits

„Jedes System kommt irgendwann an seine Grenzen.“ Einer meiner Server hatte die Grenze heute überschritten. Die Folge, der Apache stieg mit dieser Meldung aus :

„apache (24)Too many open files: couldn’t spawn child process:“

Jetzt können Sie soviel googlen wie Sie wollen, alles was zu dem Fehler kommt ist nicht hilfreich. Alle Hinweise  von RedHat zu limitfiles auf  /etc/security/limits.conf  oder /proc/sys/fs/file-max können Sie getrost vergessen, die greifen in dem Fall gar nicht.

Wenn Sie jetzt ein System V haben, ist /etc/init.d/httpd für Sie da. Tragen Sie dort einfach ulimit -n 100000 ein und starten Sie den Apache neu. Fall erledigt.

Für den Systemd, wie ihn Fedora seit FC 16 einsetzt, sieht die Sache ähnlich einfach aus, wenn man weiß wo man suchen muß. Aber mal ehrlich, würden SIe als Linuxer darauf kommen, daß „man systemd.exec“ die Hilfeseite zum Systemd öffnet? Ich nicht, .exe oder ähnliche Erweiterungen sind Windows Extentions.

Die Manpage liefert eine Übersicht zu den Variblen  die man im Unitfile benutzen kann und eine davon ( immerhin 5 Bildschirmseiten voll davon gibt es ) ist Ihr Freund: „LimitNOFILE

Suchen Sie mit „locate httpd.service“ ihr Unitfile, das ist üblicherweise unter /usr/lib/systemd/system/httpd.service zu finden. Tragen Sie dort im Servicebereich die Variable ein :

[Service]
Type=forking
PIDFile=/var/run/httpd/httpd.pid
LimitNOFILE=1000000
EnvironmentFile=/etc/sysconfig/httpd

Führen Sie noch die zwei Zeilen aus :

systemctl –system daemon-reload
systemctl restart httpd

und Ihr Apache rennt wieder 🙂

Ursachenanalyse:

Jedes Apache Child öffnet alle Domainlogs auf dem Server. Wenn Sie nun einen Multidomainwebserver haben, so wie meine Kunden, dann kommen dort schnell 1000 Vhosts zusammen. Das macht 1000 Files pro httpd-Child und damit viel mehr offene Files als Fedora defaultmäßig bereitstellt.

Hier wäre natürlich ein Logfilebroker für Apache die richtige Lösung, aber da brauchen wir wohl seitens Apache nicht drauf hoffen.