<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=FastCGI</id>
	<title>FastCGI - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=FastCGI"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=FastCGI&amp;action=history"/>
	<updated>2026-11-14T04:38:33Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=FastCGI&amp;diff=64454&amp;oldid=prev</id>
		<title>Maximilian.pottgiesser: Die Seite wurde neu angelegt: „= FastCGI =  &#039;&#039;&#039;FastCGI&#039;&#039;&#039; ist ein Protokoll für die Kommunikation zwischen Webservern und externen Anwendungen, das als Weiterentwicklung des Commo…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=FastCGI&amp;diff=64454&amp;oldid=prev"/>
		<updated>2025-08-26T05:46:49Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= FastCGI =  &amp;#039;&amp;#039;&amp;#039;FastCGI&amp;#039;&amp;#039;&amp;#039; ist ein &lt;a href=&quot;/index.php?title=Protokoll&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Protokoll (Seite nicht vorhanden)&quot;&gt;Protokoll&lt;/a&gt; für die Kommunikation zwischen &lt;a href=&quot;/index.php/Webserver&quot; title=&quot;Webserver&quot;&gt;Webservern&lt;/a&gt; und externen Anwendungen, das als Weiterentwicklung des Commo…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= FastCGI =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;FastCGI&amp;#039;&amp;#039;&amp;#039; ist ein [[Protokoll]] für die Kommunikation zwischen [[Webserver]]n und externen Anwendungen, das als Weiterentwicklung des [[Common Gateway Interface]] (CGI) konzipiert wurde. FastCGI löst die Performance-Probleme von CGI durch die Wiederverwendung von Prozessen und bietet dabei mehr Flexibilität als eingebettete Lösungen wie [[Apache HTTP Server|Apache]]-Module.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
&lt;br /&gt;
FastCGI wurde 1996 von &amp;#039;&amp;#039;&amp;#039;Open Market&amp;#039;&amp;#039;&amp;#039; entwickelt, um die Nachteile des traditionellen CGI zu überwinden. Das Protokoll wurde als offener Standard veröffentlicht und wird heute von praktisch allen modernen Webservern unterstützt. Die Spezifikation ist in RFC-ähnlicher Form dokumentiert und wird von der FastCGI-Community gepflegt.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
&lt;br /&gt;
=== Grundprinzip ===&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu CGI, das für jede Anfrage einen neuen Prozess startet, verwendet FastCGI &amp;#039;&amp;#039;&amp;#039;persistente Prozesse&amp;#039;&amp;#039;&amp;#039;, die mehrere Anfragen nacheinander bearbeiten können:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traditionelles CGI:&lt;br /&gt;
Request 1 → [Start Process] → [Execute] → [Terminate] → Response 1&lt;br /&gt;
Request 2 → [Start Process] → [Execute] → [Terminate] → Response 2&lt;br /&gt;
&lt;br /&gt;
FastCGI:&lt;br /&gt;
Request 1 → [Persistent Process] → Response 1&lt;br /&gt;
Request 2 → [Same Process] → Response 2&lt;br /&gt;
Request 3 → [Same Process] → Response 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protokoll-Architektur ===&lt;br /&gt;
&lt;br /&gt;
FastCGI verwendet ein &amp;#039;&amp;#039;&amp;#039;binäres Protokoll&amp;#039;&amp;#039;&amp;#039; für die Kommunikation zwischen Webserver und Anwendung:&lt;br /&gt;
&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;Records&amp;#039;&amp;#039;&amp;#039; : Dateneinheiten mit Header und Body&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;Multiplexing&amp;#039;&amp;#039;&amp;#039; : Mehrere Requests können gleichzeitig über eine Verbindung laufen&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;Streams&amp;#039;&amp;#039;&amp;#039; : Verschiedene Datentypen (STDIN, STDOUT, STDERR) werden getrennt übertragen&lt;br /&gt;
&lt;br /&gt;
=== Kommunikationsarten ===&lt;br /&gt;
&lt;br /&gt;
==== TCP-Sockets ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Webserver ←→ TCP:9000 ←→ FastCGI Application&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vorteile&amp;#039;&amp;#039;&amp;#039;: Verteilung auf mehrere Server möglich&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nachteile&amp;#039;&amp;#039;&amp;#039;: Netzwerk-Overhead, Latenz&lt;br /&gt;
&lt;br /&gt;
==== Unix-Domain-Sockets ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Webserver ←→ /path/to/socket ←→ FastCGI Application&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vorteile&amp;#039;&amp;#039;&amp;#039;: Höhere Performance, geringere Latenz&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nachteile&amp;#039;&amp;#039;&amp;#039;: Nur lokal verwendbar&lt;br /&gt;
&lt;br /&gt;
== Vergleich mit anderen Technologien ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Technologie&lt;br /&gt;
! Prozess-Overhead&lt;br /&gt;
! Memory-Sharing&lt;br /&gt;
! Skalierbarkeit&lt;br /&gt;
! Isolation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;CGI&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Sehr hoch&lt;br /&gt;
| Nein&lt;br /&gt;
| Schlecht&lt;br /&gt;
| Vollständig&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;FastCGI&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Niedrig&lt;br /&gt;
| Nein&lt;br /&gt;
| Sehr gut&lt;br /&gt;
| Gut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Apache mod_php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Mittel&lt;br /&gt;
| Ja&lt;br /&gt;
| Begrenzt&lt;br /&gt;
| Gering&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Embedded&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Niedrig&lt;br /&gt;
| Ja&lt;br /&gt;
| Begrenzt&lt;br /&gt;
| Keine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vorteile ==&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Keine Prozess-Erstellung&amp;#039;&amp;#039;&amp;#039; bei jeder Anfrage&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Persistente Datenbankverbindungen&amp;#039;&amp;#039;&amp;#039; bleiben erhalten&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Shared Memory&amp;#039;&amp;#039;&amp;#039; für häufig verwendete Daten&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Kompilierte Module&amp;#039;&amp;#039;&amp;#039; müssen nicht neu geladen werden&lt;br /&gt;
&lt;br /&gt;
=== Skalierbarkeit ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Load Balancing&amp;#039;&amp;#039;&amp;#039; zwischen mehreren FastCGI-Prozessen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Horizontale Skalierung&amp;#039;&amp;#039;&amp;#039; über mehrere Server&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Process Pooling&amp;#039;&amp;#039;&amp;#039; für optimale Ressourcen-Nutzung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Adaptive Skalierung&amp;#039;&amp;#039;&amp;#039; basierend auf Last&lt;br /&gt;
&lt;br /&gt;
=== Flexibilität ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Verschiedene Programmiersprachen&amp;#039;&amp;#039;&amp;#039; können verwendet werden&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Unabhängige Updates&amp;#039;&amp;#039;&amp;#039; von Webserver und Anwendung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Verschiedene Versionen&amp;#039;&amp;#039;&amp;#039; parallel möglich&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Service-orientierte Architektur&amp;#039;&amp;#039;&amp;#039; unterstützt&lt;br /&gt;
&lt;br /&gt;
=== Stabilität ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Prozess-Isolation&amp;#039;&amp;#039;&amp;#039; verhindert gegenseitige Beeinflussung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Graceful Restarts&amp;#039;&amp;#039;&amp;#039; ohne Downtime möglich&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fehler-Isolation&amp;#039;&amp;#039;&amp;#039; - Absturz betrifft nur einzelne Anfrage&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Resource Limiting&amp;#039;&amp;#039;&amp;#039; pro Prozess möglich&lt;br /&gt;
&lt;br /&gt;
== Implementierungen ==&lt;br /&gt;
&lt;br /&gt;
=== Webserver-Unterstützung ===&lt;br /&gt;
&lt;br /&gt;
==== Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
# mod_fcgid&lt;br /&gt;
LoadModule fcgid_module modules/mod_fcgid.so&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/html&amp;quot;&amp;gt;&lt;br /&gt;
    SetHandler fcgid-script&lt;br /&gt;
    FCGIWrapper /usr/bin/php-cgi .php&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# mod_proxy_fcgi (Apache 2.4+)&lt;br /&gt;
&amp;lt;FilesMatch \.php$&amp;gt;&lt;br /&gt;
    SetHandler &amp;quot;proxy:fcgi://127.0.0.1:9000&amp;quot;&lt;br /&gt;
&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nginx ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    server_name example.com;&lt;br /&gt;
    root /var/www/html;&lt;br /&gt;
&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        fastcgi_pass 127.0.0.1:9000;&lt;br /&gt;
        # oder Unix-Socket:&lt;br /&gt;
        # fastcgi_pass unix:/var/run/php-fpm.sock;&lt;br /&gt;
        &lt;br /&gt;
        fastcgi_index index.php;&lt;br /&gt;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&lt;br /&gt;
        include fastcgi_params;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== lighttpd ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
server.modules += ( &amp;quot;mod_fastcgi&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
fastcgi.server = ( &lt;br /&gt;
    &amp;quot;.php&amp;quot; =&amp;gt; ((&lt;br /&gt;
        &amp;quot;host&amp;quot; =&amp;gt; &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
        &amp;quot;port&amp;quot; =&amp;gt; 9000&lt;br /&gt;
    ))&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FastCGI-Anwendungen ===&lt;br /&gt;
&lt;br /&gt;
==== PHP-FPM ====&lt;br /&gt;
&lt;br /&gt;
[[PHP-FPM]] ist die bekannteste FastCGI-Implementierung für [[PHP]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[www]&lt;br /&gt;
listen = 127.0.0.1:9000&lt;br /&gt;
user = www-data&lt;br /&gt;
group = www-data&lt;br /&gt;
pm = dynamic&lt;br /&gt;
pm.max_children = 50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Python ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
from flup.server.fcgi import WSGIServer&lt;br /&gt;
&lt;br /&gt;
def application(environ, start_response):&lt;br /&gt;
    status = &amp;#039;200 OK&amp;#039;&lt;br /&gt;
    headers = [(&amp;#039;Content-Type&amp;#039;, &amp;#039;text/plain&amp;#039;)]&lt;br /&gt;
    start_response(status, headers)&lt;br /&gt;
    return [&amp;#039;Hello World from FastCGI!&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    WSGIServer(application).run()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ruby ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
require &amp;#039;fcgi&amp;#039;&lt;br /&gt;
&lt;br /&gt;
FCGI.each_cgi do |cgi|&lt;br /&gt;
  cgi.print &amp;quot;Content-Type: text/html\r\n\r\n&amp;quot;&lt;br /&gt;
  cgi.print &amp;quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;Hello from Ruby FastCGI!&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protokoll-Details ==&lt;br /&gt;
&lt;br /&gt;
=== Record-Format ===&lt;br /&gt;
&lt;br /&gt;
Ein FastCGI-Record besteht aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    unsigned char version;&lt;br /&gt;
    unsigned char type;&lt;br /&gt;
    unsigned char requestIdB1;&lt;br /&gt;
    unsigned char requestIdB0;&lt;br /&gt;
    unsigned char contentLengthB1;&lt;br /&gt;
    unsigned char contentLengthB0;&lt;br /&gt;
    unsigned char paddingLength;&lt;br /&gt;
    unsigned char reserved;&lt;br /&gt;
    unsigned char contentData[contentLength];&lt;br /&gt;
    unsigned char paddingData[paddingLength];&lt;br /&gt;
} FCGI_Record;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Record-Typen ===&lt;br /&gt;
&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;FCGI_BEGIN_REQUEST&amp;#039;&amp;#039;&amp;#039; : Startet eine neue Anfrage&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;FCGI_PARAMS&amp;#039;&amp;#039;&amp;#039; : Überträgt Umgebungsvariablen&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;FCGI_STDIN&amp;#039;&amp;#039;&amp;#039; : Überträgt Request-Body&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;FCGI_STDOUT&amp;#039;&amp;#039;&amp;#039; : Response-Daten von der Anwendung&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;FCGI_STDERR&amp;#039;&amp;#039;&amp;#039; : Fehler-Ausgaben&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;FCGI_END_REQUEST&amp;#039;&amp;#039;&amp;#039; : Beendet eine Anfrage&lt;br /&gt;
&lt;br /&gt;
=== Multiplexing ===&lt;br /&gt;
&lt;br /&gt;
FastCGI unterstützt &amp;#039;&amp;#039;&amp;#039;Request-Multiplexing&amp;#039;&amp;#039;&amp;#039; über eine einzige Verbindung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Connection 1:&lt;br /&gt;
├── Request A (ID: 1)&lt;br /&gt;
├── Request B (ID: 2)  &lt;br /&gt;
└── Request C (ID: 3)&lt;br /&gt;
&lt;br /&gt;
Records können verschachtelt übertragen werden:&lt;br /&gt;
BEGIN_REQUEST(1) → PARAMS(2) → STDIN(1) → BEGIN_REQUEST(3) → ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfiguration und Tuning ==&lt;br /&gt;
&lt;br /&gt;
=== Process Management ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# Statische Prozessanzahl&lt;br /&gt;
PM_STYLE = static&lt;br /&gt;
PM_MAX_CHILDREN = 20&lt;br /&gt;
&lt;br /&gt;
# Dynamisches Management&lt;br /&gt;
PM_STYLE = dynamic&lt;br /&gt;
PM_MAX_CHILDREN = 50&lt;br /&gt;
PM_START_SERVERS = 5&lt;br /&gt;
PM_MIN_SPARE_SERVERS = 5&lt;br /&gt;
PM_MAX_SPARE_SERVERS = 35&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connection Pooling ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
upstream backend {&lt;br /&gt;
    server 127.0.0.1:9000;&lt;br /&gt;
    server 127.0.0.1:9001;&lt;br /&gt;
    server 127.0.0.1:9002;&lt;br /&gt;
    keepalive 32;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    location ~ \.php$ {&lt;br /&gt;
        fastcgi_pass backend;&lt;br /&gt;
        fastcgi_keep_conn on;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Timeout-Einstellungen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
location ~ \.php$ {&lt;br /&gt;
    fastcgi_connect_timeout 60s;&lt;br /&gt;
    fastcgi_send_timeout 60s;&lt;br /&gt;
    fastcgi_read_timeout 60s;&lt;br /&gt;
    fastcgi_buffer_size 128k;&lt;br /&gt;
    fastcgi_buffers 4 256k;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Monitoring und Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== Status-Monitoring ===&lt;br /&gt;
&lt;br /&gt;
Viele FastCGI-Implementierungen bieten Status-Seiten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
http://example.com/fpm-status&lt;br /&gt;
&lt;br /&gt;
Ausgabe:&lt;br /&gt;
pool:                 www&lt;br /&gt;
process manager:      dynamic&lt;br /&gt;
start time:           01/Jan/2024:00:00:00 +0000&lt;br /&gt;
accepted conn:        12345&lt;br /&gt;
active processes:     5&lt;br /&gt;
idle processes:       10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
# Debug-Logging aktivieren&lt;br /&gt;
error_log /var/log/nginx/error.log debug;&lt;br /&gt;
&lt;br /&gt;
# FastCGI-spezifische Parameter loggen&lt;br /&gt;
fastcgi_param HTTP_X_DEBUG_INFO $request_id;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sicherheitsaspekte ==&lt;br /&gt;
&lt;br /&gt;
=== Prozess-Isolation ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Separate Benutzer&amp;#039;&amp;#039;&amp;#039; für verschiedene Anwendungen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;chroot-Umgebungen&amp;#039;&amp;#039;&amp;#039; für zusätzliche Isolation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Resource Limits&amp;#039;&amp;#039;&amp;#039; (CPU, Memory, File Descriptors)&lt;br /&gt;
&lt;br /&gt;
=== Netzwerk-Sicherheit ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
# Nur lokale Verbindungen erlauben&lt;br /&gt;
fastcgi_pass 127.0.0.1:9000;&lt;br /&gt;
&lt;br /&gt;
# Bei Unix-Sockets: Dateiberechtigungen&lt;br /&gt;
# chmod 660 /var/run/php-fpm.sock&lt;br /&gt;
# chown www-data:www-data /var/run/php-fpm.sock&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Input-Validation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
# Gefährliche Parameter blockieren&lt;br /&gt;
if ($fastcgi_script_name ~ \.\.) {&lt;br /&gt;
    return 403;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Upload-Limits&lt;br /&gt;
client_max_body_size 10M;&lt;br /&gt;
fastcgi_param CONTENT_LENGTH $content_length;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Performance-Optimierung ==&lt;br /&gt;
&lt;br /&gt;
=== Caching ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OPcode-Caching&amp;#039;&amp;#039;&amp;#039; bei Skriptsprachen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Application-Level Caching&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FastCGI Cache&amp;#039;&amp;#039;&amp;#039; im Webserver&lt;br /&gt;
&lt;br /&gt;
=== Load Balancing ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
upstream fastcgi_backend {&lt;br /&gt;
    least_conn;&lt;br /&gt;
    server 127.0.0.1:9000 weight=3;&lt;br /&gt;
    server 127.0.0.1:9001 weight=2;&lt;br /&gt;
    server 127.0.0.1:9002 weight=1;&lt;br /&gt;
    server 192.168.1.10:9000 backup;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Management ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# Prozess-Recycling nach X Requests&lt;br /&gt;
PM_MAX_REQUESTS = 1000&lt;br /&gt;
&lt;br /&gt;
# Memory-Limits&lt;br /&gt;
memory_limit = 128M&lt;br /&gt;
max_execution_time = 30&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendungsfälle ==&lt;br /&gt;
&lt;br /&gt;
=== Shared Hosting ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Multi-Tenant-Umgebungen&amp;#039;&amp;#039;&amp;#039; mit Isolation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Verschiedene PHP-Versionen&amp;#039;&amp;#039;&amp;#039; parallel&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Resource-Limiting&amp;#039;&amp;#039;&amp;#039; pro Kunde&lt;br /&gt;
&lt;br /&gt;
=== High-Performance Websites ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Horizontale Skalierung&amp;#039;&amp;#039;&amp;#039; über mehrere Server&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Load Balancing&amp;#039;&amp;#039;&amp;#039; zwischen FastCGI-Backends&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Optimierte Resource-Nutzung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Microservices ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Service-spezifische FastCGI-Anwendungen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Unabhängige Deployments&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Language-agnostische Architektur&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Alternativen ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Common Gateway Interface|CGI]]&amp;#039;&amp;#039;&amp;#039;: Einfacher, aber langsamer&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;WSGI&amp;#039;&amp;#039;&amp;#039; (Python): Python-spezifisches Interface&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Rack&amp;#039;&amp;#039;&amp;#039; (Ruby): Ruby-spezifisches Interface&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PSGI&amp;#039;&amp;#039;&amp;#039; (Perl): Perl-spezifisches Interface&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;gRPC/HTTP/2&amp;#039;&amp;#039;&amp;#039;: Moderne Alternative für Microservices&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[PHP-FPM]]&lt;br /&gt;
* [[Common Gateway Interface]]&lt;br /&gt;
* [[nginx]]&lt;br /&gt;
* [[Apache HTTP Server]]&lt;br /&gt;
* [[Webserver]]&lt;br /&gt;
* [[WSGI]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.fastcgi.com/drupal/ Offizielle FastCGI Website]&lt;br /&gt;
* [https://tools.ietf.org/html/rfc3875 CGI/1.1 Specification (RFC 3875)]&lt;br /&gt;
* [https://github.com/FastCGI-Archives/FastCGI.com FastCGI Specification Archive]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Webserver]]&lt;br /&gt;
[[Kategorie:Netzwerkprotokoll]]&lt;br /&gt;
[[Kategorie:PHP]]&lt;br /&gt;
[[Kategorie:Webtechnologie]]&lt;/div&gt;</summary>
		<author><name>Maximilian.pottgiesser</name></author>
	</entry>
</feed>