Dieser Beitrag soll euch beim Einstieg in die Nginx Webserver Welt helfen – vor allem auch jenen unter euch, die das Apache Imperium verlassen wollen und auf Nginx umsteigen wollen. Die Konfigurationssyntax unterscheidet sich komplett von der des Apache Webservers, ist aber mindestens so einfach gehalten und einfach verständlich. Hier soll es um die ersten Schritte unter Ubuntu Server 14.04 gehen. Wenn ihr ein anderes Linux OS auf eurem Server nutzt, müsst ihr diese Seite aber nicht verlassen – Die Konfiguration an sich bleibt dieselbe. ;)
Nginx installieren
apt-get install nginx
Nach der Installation wird Nginx sofort gestartet und präsentiert euch folgende Seite, wenn ihr die IP-Adresse des Servers im Browser aufruft:
Wie auch beim Apache Webserver üblich, wird für jede Website / Domain ein eigener „Virtual Host“ in einer Datei erstellt. Diese sind in der Ubuntu-Version von Nginx sogar genauso aufgeteilt, wie bei Apache: Im Verzeichnis /etc/nginx/sites-available/ befinden sich die einzelnen Dateien für die virtuellen Server – in jeder Datei wird ein Server in einem „server {}“-Block definiert. Diese Dateien sollten die Dateiendung .conf tragen. Wenn ein Server (eine Website) aktiv sein soll, wird sie in /etc/nginx/sites-enabled/ verlinkt.
Anmerkung: Wenn man die Haupt-Konfigurationsdatei /etc/nginx/nginx.conf öffnet, kann man sehen, dass die Konfigurationen in sites-enabled via include direkt in die Hauptkonfiguration eingebunden werden:
## # Virtual Host Configs ## include /etc/nginx/sites-enabled/*;
Für Ubuntu wurde Nginx also so eingestellt, dass in sites-enabled nach weiteren Konfigurationsdateien gesucht wird. Möglicherweise ist das für andere Linux-Distributionen nicht der Fall. Damit man nicht alle VirtualHost Konfigurationen in die Hauptkonfiguration schreiben muss (und der Übersicht halber!) ist es empfehlenswert, die Virtual Host Konfigurationen – wie bei Ubuntu standardmäßig der Fall – in ein extra Verzeichnis auszulagern.
Für die vorher angezeigte Willkommensseite wurde schon eine Datei „default“ in sites-available angelegt und in sites-enabled verlinkt. Um das Prinzip besser zu verstehen, soll nun der vorhandene Server deaktiviert und ein neuer angelegt werden.
Vorhandenen Server deaktivieren
Um den Server für die default-Seite zu deaktivieren, muss nur der dazugehörige Link im sites-enabled Verzeichnis gelöscht werden:
rm /etc/nginx/sites-enabled/default
Sobald Nginx neu geladen wurde…
service nginx reload
ist die Seite von vorher nicht mehr zu erreichen.
Einen neuen Server anlegen
Nun wird eine neue Server-Datei angelegt, die nur die grundlegendste Konfiguration enthalten soll. Erstellt eine neue Datei „meinserver.conf“ in /etc/nginx/sites-available:
nano /etc/nginx/sites-available/meinserver.conf
… und füllt sie mit diesem Inhalt:
server { server_name meinserver.tld www.meinserver.tld; listen 80 default_server; listen [::]:80 default_server; root /var/www; }
Jeder Server wird mit einem „server {}“ Block umschlossen. Innerhalb dieses Blocks werden die Einstellungen für jeden Server festgelegt. Die Konfiguration beginnt mit „server_name“. Dahinter stehen die Domains, bei deren Aufruf dieser Server aktiv werden soll. Im Beispiel soll der Server die Domains „meinserver.tld“ und „www.meinserver.tld“ versorgen.
Als nächstes folgt die Portdefinition, in der festgelegt wird, auf welchen Ports der Server „lauschen“ soll. Bei normalen HTTP Verbindungen ist dies Port 80. Zuerst wird der Port für IPv4-Adressen festgelegt, in der Zeile darunter für IPv6-Adressen. Das Attribut „default_server“ bedeutet, dass dieser Server angesprochen werden soll, wenn eine Anfrage keiner anderen „server {}“ Definition zugeordnet werden kann. Diese Einstellung darf aber nur bei einem Server gesetzt sein – bei allen weiteren Servern kann diese Einstellung selbstverständlich nicht mehr genutzt werden.
Zuletzt wird mit „root“ angegeben, in welchem Verzeichnis die HTML- oder PHP-Dateien liegen. Damit wird die oberste Verzeichnisebene für den Server definiert. Hier liegt i.d.R. die „index.html“ oder „index.php“.
(Falls das Verzeichnis /var/www/ noch nicht existieren sollte, kann es mit „mkdir /var/www“ angelegt werden. Die passenden Rechte müssen noch gesetzt werden: „chown www-data:www-data /var/www“)
Neuen Server aktivieren
Nun wird die neue Server-Konfigurationsdatei gespeichert und aktiviert. Für die Aktivierung wird – wie vorher schon erklärt – ein Link in sites-enabled auf die Konfiguration in sites-available erstellt:
ln -s /etc/nginx/sites-available/meinserver.conf /etc/nginx/sites-enabled/meinserver
Konfiguration überprüfen und Webserver neu laden
Nach Setzen des Links sollte überprüft werden, ob die neue Konfiguration für den Webserver überhaupt verständlich ist oder ob sich Fehler eingeschlichen haben. Dazu wird der Befehl
nginx -t
gestartet. Wird ein
nginx: configuration file /etc/nginx/nginx.conf test is successful
ausgegeben, ist alles okay, und der Webserver kann neu geladen werden:
service nginx reload
Der Server sollte nun über seine IP-Adressen wieder zu erreichen sein – und das, obwohl kein „server_name“ übereinstimmt. Das macht in diesem Fall aber nichts, weil mit „default_server“ ja bestimmt wurde, dass diese Konfiguration genutzt werden soll, wenn keine andere, passende auffindbar ist.
Wenn in /var/www noch keine index.html Datei liegt, wird vom Server übrigens ein „403-Forbidden“-Fehler ausgegeben. Sobald es eine index.html im /var/www/ Verzeichnis gibt, erscheint diese Fehlermeldung nicht mehr.
PHP installieren
Zur Einrichtung von PHP für den Nginx Webserver habe ich einen weiteren Beitrag geschrieben: Nginx: PHP installieren
http://thomasbeyer.name
Hallo,
bei einem Server mit ipv6 (wie in der Konfiguration) gibt es beim neustart von nginx einen Fehler.
Es müsste so heißen:
listen [::]:80 ipv6only=on default_server;
Vielleicht liegts auch an einem Unterschied von Ubuntu und Debian (ich nutze Debian).
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi,
da gibt es anscheinend differenzen. Bei Ubuntu muss die Option nicht angegeben werden.
LG Thomas
Hallo,
bei manchen Seiten erscheint bei mir im Header auf der Seite „111 Connection refused“. Aber nicht in allen. Was für einen Grund kann es haben?
Hallo,
vielen Dank für deine Anleitung. Nun habe ich PHP 5.5.9 installiert, doch wie kann ich auf 5.4.* downgraden?
Gruß
http://www.crackthe.net
Vielen Dank! Ich habe bislang nicht gewusst wie man mehrere virtuelle Hosts anlegen kann. Hat alles prima geklappt!
Habe die Anleitung unter Debian verwendet :-)
Danke
Hey, ich habe 2 Domains aber es wird obwohl ich 2 Server habe immer nur der Content der einen Website angezeigt. Mein conf ist unten. Händelgym.de.conf:server {
server_name händelgym.de http://www.händelgym.de;
listen 80;
root /var/www/händelgym.de;
location ~* \.php$ {
include fastcgi_params;
fastcgi_pass php;
fastcgi_index index.php;
}
}
Ich weiß echt nicht mehr weiter.
LG Luis