Nginx Webserver mit PHP einrichten
Wenn man PHP-Scripte mit einem Nginx Webserver anbieten möchte stößt man schnell auf zwei Probleme. Zum einen kann man nicht einfach ein Modul aktivieren wie bei Apache und zum anderen kann Nginx keinen eigene PHP Prozesse starten.
Diese Nachteile können auch sehr schnell zu Vorteile, vor allem bei großen Webseiten umschwenken.
Das einfachste ist die PHP Dateien über einen Proxy zu kompilieren. Dazu muss man zwei Dinge machen.
1.: PHP5-cli im Proxymodus starten:
|
1 |
E:\webserver\php\php-cgi.exe -b 127.0.0.1:9000 -c E:\webserver\php\php.ini |
Dabei müssen natürlich die Pfade angepasst werden. Zur Erklärung:
- Das “-b ip-Adresse:Port” gibt an auf welche IP-Adresse PHP Hören soll und auf welchem Port.
- Mit “-c pfadZurPhp.ini” gibt an welche PHP.ini benutzt werden soll
Zwar benutze ich hier als Beispiel Windows aber es sollte 1:1 in die anderen Betriebssysteme übernehmen möglich sein.
2.: FastCGI Konfigurieren:
|
1 2 3 4 5 6 |
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } |
- fastcgi_pass: Dort gibt auf welchem Server der PHP “Proxy” läuft
- fastcgi_index: Gibt an welches Script aufgerufen wird wenn keine Datei in der URL angegeben wurde
- fastcgi_param: Gibt an welche Informationen an den PHP Proxy übertragen werden. Hier werden einzelne Variabeln gesetzt.
- “Include fastcgi_params” bindet die Standard Parameter Einstellungen ein
Will man bestimmt Ordner absichern und dort die Ausführung von PHP-Dateien verhindern kann man auch die URL in der Konfiguration überprüfen. Zum Beispiel:
|
1 2 3 |
if ($uri !~ "^/images/") { fastcgi_pass 127.0.0.1:9000; } |
Bei diesem Beispiel wird überprüft ob die aufgerufene Url “/images” enthält. Wenn dies nicht der Fall ist (wegen “!-” ) wird die Datei an den Proxy weitergeleitet.
Auch hier sind die Möglichkeiten nahe zu unbegrenzt. Wer Nginx und PHP Produktiv einsetzen möchte, sollte den PHP-Proxy mit einem Init-Script starten, damit dieser auch wieder nach einem Server start nicht von Handgestartet werden.
Wie das geht erklärt das Nginx-Wiki sehr gut: http://wiki.nginx.org/PHPFcgiExample
Mit PHP HDD Speicherplatz auslesen und per E-Mail versenden Easter Egg bei Google – Die Zerglinge kommen

