Nginx Einrichtung

Nachdem ich den Webserver-Wechsel zunächst auf Cherokee vollziehen wollte gab es für diesen zunächst einmal kein aktuelles deb-Paket / Repo und außerdem schien er (in der älteren Version die verfügbar war) auf dem Server massive Probleme zu bereiten, die nach dem Beenden nicht mehr auftraten. Die zweite Wahl war Nginx, welches kürzlich erst in der Version 1.0 veröffentlicht wurde und nach Apache httpd und Lighttpd jener Webserver mit dem größten Marktanteil ist, und vor allem auch sehr große Webseiten hostet. Für Debian und Ubuntu-versionierte Systeme gibt es auch aktuelle Pakete von Nginx, etwa GetDeb für Debian. Der Umstieg ist nun jedenfalls vollzogen.

Cherokee hatte ich auch bereits laufen und konfiguriert. Ansich sehr gut in Konfiguration etc. Aber eben, für mich, mit einem kleinen und einem großen Problem verbunden.

Nginx nutzt Textkonfigurationsdateien.

Für einen Default-Server gibt man einen leeren Servernamen an:

server {

listen 80 default_server; ## listen for ipv4

#listen [::]:8080 default_server; ## listen for ipv4 and ipv6

server_name “”;

access_log /var/log/nginx/default.access.log;

error_log /var/log/nginx/default.error.log;

root /var/www/default;

index index.html;

location / {
 }

 location = /robots.txt  { access_log off; log_not_found off; }
 location = /favicon.ico { access_log off; log_not_found off; }
}

root (Hauptverzeichnis) und index (Index-Dateien) definiert man zunächst im Server (nicht wie oft zu finden nur in einer location – dort sollte man höchstens das server-default überschreiben).

Für PHP installiert man php-fpm, einen FastCGI-Daemon für PHP, inklusive Startscript etc (ab PHP-Version 5.3.3 vorhanden, je nach Paket-Repository auch ohne/vorher). Im Server definiert man dann, dass Dateien die auf .php enden geparst werden:

location ~ \.php$ {
 fastcgi_pass   127.0.0.1:9000;
 fastcgi_index  index.php;
 include fastcgi_params;
 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

Hier gab es auch, je nach Quelle, verschiedene fastcgi_param Werte. So hat es für mich funktioniert. Mit deminclude fastcgi_paramswerden Standardwerte aus der fastcgi_params-Datei inkludiert und gesetzt. Den Standardwert für SCRIPT_FILENAME musste ich anschließend aber mit $document_root$fastcgi_script_name überschreiben.

.htaccess Dateien werden nicht geparst. Eventuell dort definierte Rewrite-Regeln müssen also in die Serverkonfiguration umgesetzt und übernommen werden. (Ist auch richtig so, von htaccess Dateien halte ich nicht viel. Performancemäßig muss mit ihnen jeder Ordner auf diese überprüft werden. Bei jedem Request wird diese ggf. geparst. Und die Serverkonfiguration sollte ohnehin in einer statischen Serverkonfiguration, an einer Stelle, vorgenommen werden.) Eine Regel für eventuell zu versteckende Dateien (die mit einem Punkt beginnen) muss ebenfalls definiert werden.

In der Conf außerdem noch gzip Kompression aktiviert und server_tokens.

Was noch fehlt ist passendes Cache-Control. Standardmäßig wird der CGI-generierte Daten no-cache, also die Aufforderung nicht zwischenzuspeichern, angegeben, bei statischen Daten das zuletzt-geändert Datum. Somit ist wird zumindest schon etwas gecachet, lässt sich aber noch optimieren.

Beim Einrichten außerdem noch wichtig zu beachten: Die häufigsten Irrtümer bei der Konfiguration.