expertenaustausch > comm.software.* > comm.software.webserver

Jan Novak (04.10.2018, 16:30)
Hallo NG,

aufgrund eines interessanten Beitrages in der c't 20 bezüglich http2
wollte ich das mal testen. Ich habe einen apache 2.4.25 aus debian stretch.
Dort eine einzige Seite mit einem letsencrypt ssl Zertifikat. Soweit so gut.
Nach dem Eintrag

Protocols h2 http 1.1

im Virtualhost *:443 Bereich und vorigem aktivieren des Moduls http2
(inkl. apache Neustart) sendet Apache aber immer noch mit http/1.1

Die Testseite von zum Beispiel


sendet im gleichen Browser mit h2 (=http2).

Hat jemand noch n Tip, woran das liegen könnte?

Jan
Marcus Frings (04.10.2018, 17:59)
Jan Novak <repcom> writes:

> wollte ich das mal testen. Ich habe einen apache 2.4.25 aus debian
> stretch.
> Dort eine einzige Seite mit einem letsencrypt ssl Zertifikat. Soweit so gut.
> Nach dem Eintrag
> Protocols h2 http 1.1
> im Virtualhost *:443 Bereich und vorigem aktivieren des Moduls http2
> (inkl. apache Neustart) sendet Apache aber immer noch mit http/1.1


> Hat jemand noch n Tip, woran das liegen könnte?


Verwendest Du mpm_prefork?

,----[ apache2 (2.4.25-3+deb9u5) stretch; urgency=medium ]
| * Upgrade mod_http and mod_proxy_http2 to the versions from 2.4.33. This
| fixes
| - CVE-2018-1302: mod_http2: Potential crash w/ mod_http2
| - Segfaults in mod_http2 (Closes: #873945)
| - mod_http2 issue with option "Indexes" and directive "HeaderName"
| (Closes: #850947)
| Unfortunately, this also removes support for http2 when running on
| mpm_prefork.
`----

Gruß,
Marcus
Jan Novak (05.10.2018, 07:25)
Am 04.10.18 um 17:59 schrieb Marcus Frings:
[..]
> | Unfortunately, this also removes support for http2 when running on
> | mpm_prefork.
> `----


Ich verwende diese Pakete:
ii apache2 2.4.25-3+deb9u5 amd64
Apache HTTP Server
ii apache2-bin 2.4.25-3+deb9u5 amd64
Apache HTTP Server (modules and other binary files)
ii apache2-data 2.4.25-3+deb9u5 all
Apache HTTP Server (common files)
ii apache2-utils 2.4.25-3+deb9u5 amd64
Apache HTTP Server (utility programs for web servers)
ii libapache2-mod-php7.0 7.0.30-0+deb9u1 amd64
server-side, HTML-embedded scripting language (Apache 2 module)

Wie, bzw. zu welcher funktionierenden Version kann ich wechseln?

Jan
Sven Hartge (05.10.2018, 10:36)
Jan Novak <repcom> wrote:
> Am 04.10.18 um 17:59 schrieb Marcus Frings:


[..]
> Apache HTTP Server (utility programs for web servers)
> ii libapache2-mod-php7.0 7.0.30-0+deb9u1 amd64
> server-side, HTML-embedded scripting language (Apache 2 module)


> Wie, bzw. zu welcher funktionierenden Version kann ich wechseln?


Du version, die du hast, funktioniert schon bestens.

Du musst aber auf mpm_worker oder mpm_event wechseln.

Allerdings funktioneirt libapache2-mod-php7.0 nicht mit diesen MPMs, du
musst also auf php7.0-fpm wechseln.

Wie das geht, wird in mehr wie genug Anleitungen im Web beschrieben.

Friedemann Stoyan (05.10.2018, 10:57)
Jan Novak wrote:

> Wie, bzw. zu welcher funktionierenden Version kann ich wechseln?


Restarte den Apache und kucke in das Error-Log:

$ cat /var/log/apache2/error.log
[Fri Oct 05 00:00:44.456214 2018] [mpm_event:notice] [pid 17103:tid 140670074049600] AH00489: Apache/2.4.34 (Debian) OpenSSL/1.1.0h mod_wsgi/4.5.17 Python/2.7 configured -- resuming normal operations
[Fri Oct 05 00:00:44.456259 2018] [core:notice] [pid 17103:tid 140670074049600] AH00094: Command line: '/usr/sbin/apache2'

Dann siehts Du was Du für eine Worker hast, hier: mpm_event. Wenn aufgrund des
Workers h2 nicht funktioniert, steht meisens auch eine aussagekräftige Zeile
im Error-Log.

mfg Friedemann
Marcus Frings (05.10.2018, 12:23)
Jan Novak <repcom> writes:

> Wie, bzw. zu welcher funktionierenden Version kann ich wechseln?


Ich setze mpm_event und php7.0-fpm mit http2 ein (siehe auch Svens
Antwort).

Gruß,
Marcus
Sven Hartge (05.10.2018, 14:00)
Marcus Frings <protagonist> wrote:
> Jan Novak <repcom> writes:


>> Wie, bzw. zu welcher funktionierenden Version kann ich wechseln?


> Ich setze mpm_event und php7.0-fpm mit http2 ein (siehe auch Svens
> Antwort).


Bei mpm_event gibt es derzeit einen unschönen Bug:


"Event MPM listener thread may get blocked by SSL shutdowns"

Ich kann das Problem bei mir nachstellen und bin daher wieder auf
mpm_worker gewechselt.

Der ist zwar in bestimmten Situationen nicht ganz so performant wie
mpm_event, aber ein komplett hängender Server ist komplett nutzlos.

Jan Novak (05.10.2018, 14:14)
Am 05.10.18 um 14:00 schrieb Sven Hartge:
> Marcus Frings <protagonist> wrote:
> Bei mpm_event gibt es derzeit einen unschönen Bug:
>
> "Event MPM listener thread may get blocked by SSL shutdowns"
> Ich kann das Problem bei mir nachstellen und bin daher wieder auf
> mpm_worker gewechselt.
> Der ist zwar in bestimmten Situationen nicht ganz so performant wie
> mpm_event, aber ein komplett hängender Server ist komplett nutzlos.


Also ich habe jetzt die letzten Stunden damit verbracht, das problem in
den Griff zu bekommen.
Das Apache error log zeigte:

Fri Oct 05 11:43:53.165175 2018] [http2:warn] [pid 239] AH10034: The mpm
module (prefork.c) is not supported by mod_http2. The mpm determines how
things are processed in your server. HTTP/2 has more demands in this
regard and the currently selected mpm will just not do. This is an
advisory warning. Your server will continue to work, but the HTTP/2
protocol will be inactive.

OK, also habe ich statt mod_prefork das mod_event aktiviert. Nun kommt
diese Fehlermeldung:

Apache is running a threaded MPM, but your PHP Module is not compiled to
be threadsafe

Ich habe php7.0-fpm installiert und aktiviert. Geht dennoch nicht.

Wenn ich nach dem "threaded MPM" fehler google, finde ich nur die
Hinweise, dass ich mod_prefork aktivieren soll.
Bin jetzt n bisserl ratlos.

Jan
Sven Hartge (05.10.2018, 20:23)
Jan Novak <repcom> wrote:

> Ich habe php7.0-fpm installiert und aktiviert. Geht dennoch nicht.


Wie hast du das getan?

Du solltest in /etc/apache2/conf-available/php7.0-fpm.conf eine passende
Konfigurationsdatei haben, die du mittels

a2enconf php7.0-fpm

aktivieren musst.

Achtung, wichtig: libapache2-mod-php7.0 musst du entweder deinstallieren
oder via

a2dismod php7.0

deaktivieren! Apache neu starten nicht vergessen.

Dann funktioniert das auch alles, sofern der FPM-Prozess auch läuft.
Was sagt

systemctl status php7.0-fpm

dazu?

Marcus Frings (06.10.2018, 12:33)
Sven Hartge <sh-189> writes:

> Bei mpm_event gibt es derzeit einen unschönen Bug:
>


Danke für den Hinweis; dieser Bug war mir bisher nicht bekannt!

Gruß,
Marcus
Sven Hartge (06.10.2018, 14:00)
Marcus Frings <mf-usenet> wrote:
> Sven Hartge <sh-189> writes:


>> Bei mpm_event gibt es derzeit einen unschönen Bug:
>>


> Danke für den Hinweis; dieser Bug war mir bisher nicht bekannt!


Bevor ich diesen Bug gefunde habe, hatte ich mir zwei Wochen lang das
Hirn zermartert, warum die Frontend-Proxies vom Webserver-Cluster meines
Arbeitgebers temporär immer so erratisches Verhalten gezeigt haben.

Am Ende hatte ich einen Cronjob, der den Apache jede Stunde via "kill
-9" abgeschossen und dann neu gestartet hat, weil ich mir nicht mehr
anders zu helfen wußte.

Die Situation wurde natürlich ingesamt auch nicht dadurch verbessert,
dass mittlerweile alle Zugriffe via SSL laufen, welches den Bug dann
noch viel viel häufiger getriggert hat.

Nach Umstellung auf mpm_worker gibt es keine Probleme mehr.

Jan Novak (08.10.2018, 07:24)
Am 06.10.18 um 14:00 schrieb Sven Hartge:
[..]
> dass mittlerweile alle Zugriffe via SSL laufen, welches den Bug dann
> noch viel viel häufiger getriggert hat.
> Nach Umstellung auf mpm_worker gibt es keine Probleme mehr.


Ich denke, dass http2 mit mpm_worker nicht funktioniert (oder war das
nicht die intension?)!

Jan
Claus Reibenstein (08.10.2018, 08:20)
Sven Hartge schrieb am 06.10.2018 um 14:00:

> Am Ende hatte ich einen Cronjob, der den Apache jede Stunde via "kill
> -9" abgeschossen und dann neu gestartet hat, weil ich mir nicht mehr
> anders zu helfen wußte.


SIGKILL sollte man aber erst dann an einen Prozess senden, wenn er auf
SIGTERM nicht reagiert. Also immer erst "kill" versuchen.

Gruß
Claus
Sven Hartge (08.10.2018, 08:28)
Jan Novak <repcom> wrote:

> Ich denke, dass http2 mit mpm_worker nicht funktioniert (oder war das
> nicht die intension?)!


mod_http2 funktioniert nicht mit mpm_prefork, da es einen
thread-basiertes MPM braucht. mpm_event und mpm_worker erfüllen dies
beide.

mpm_event ist streng genommen eine Weiterentwicklung vom mpm_worker.

Sven Hartge (08.10.2018, 08:30)
Claus Reibenstein <4spamersonly> wrote:
> Sven Hartge schrieb am 06.10.2018 um 14:00:


>> Am Ende hatte ich einen Cronjob, der den Apache jede Stunde via "kill
>> -9" abgeschossen und dann neu gestartet hat, weil ich mir nicht mehr
>> anders zu helfen wußte.


> SIGKILL sollte man aber erst dann an einen Prozess senden, wenn er auf
> SIGTERM nicht reagiert. Also immer erst "kill" versuchen.


Glaub mir, ich weiß, was ich mache und warum ich hier in diesem Falle
direkt "-9" benutze.

Der Bug liegt ja gerade darin, dass der hängende Thread nicht mehr
reagiert, auch nicht auf Signale. Man braucht eh die große Keule, also
kann ich auch direkt damit anfangen und Zeit beim Restart sparen.

Ähnliche Themen