nginx – Mein neuer Favourite (Tutorial)
NGINX ist ein schneller, effizienter und sparsamer Webserver gegenüber Lighttpd oder Apache.
Dieser Webserver wird bereits von vielen großen Internetseiten verwendet (z.B. von SourceForge und WordPress.com), da nginx um einiges weniger RAM und CPU Load benötigt als andere Server.
Ein weiterer Vorteil ist, dass nginx etwa jedes Monat aktualisiert wird was bei Lighttpd oder Apache nicht der Fall ist.
Zwei Zitate:
…in my simple stress tests cpu usage showed lighttpd at 98% while nginx was never more than 52%…
nginx performed almost the same as lighttpd but cpu load was much better with nginx. (LA never got more than 5 while lighttpd bumped it up to ~10, and apache to 20+ while testing with the wordpress setup) Btw, can’t even compare it to apache, which almost crashed my box when testing the sample wordpress install.( 10000 requests, 1000 concurrent)
Auch nginx ist nicht der perfekteste Webserver, da nginx nicht ein FastCGI-Modul mitinstalliert, welches man für PHP benötigt. Jedoch kann man diese Pakete leicht nachinstallieren.
Hier nun eine kleine Anleitung zum installieren von NGINX
Installieren der notwendigen Pakete
apt-get install -y gcc cpp make libatomic-ops-dev libbz2-dev libexpat1-dev libfontconfig1-dev libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev libgeoip-dev libglib2.0-dev libgmp3-dev libgpg-error-dev libjpeg62-dev libpcre3-dev libpng12-dev libpthread-stubs0-dev libssl-dev libxalan110-dev libxerces-c2-dev libxml2-dev libxpm-dev libxslt1-dev linux-libc-dev zlib1g-dev
Der Parameter “-y” überspringt die Nachfrage, ob die Pakete wirklich installiert werden sollen.
Herunterladen und entpacken von nginx
wget # Herunterladen
tar xfz nginx-[cur-nginx-version].tar.gz # Entpacken
Vorbereiten auf das compilieren von nginx
cd nginx-[cur-nginx-version] # In das entpackte Verzeichnis wechseln
Sollte euer Server ein 64bit System sein, fügt folgenden Parameter an das Ende des Befehls unten hinzu:
–with-cpu-opt=amd64
./configure --user=www-data --group=www-data --with-http_image_filter_module --with-http_geoip_module --with-http_xslt_module --with-rtsig_module --with-poll_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-file-aio --with-ipv6 --with-http_realip_module --with-http_addition_module --with-select_module --with-http_ssl_module --with-libatomic --with-debug --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --prefix=/srv/nginx
Achtung! Mit diesen Befehl wird nginx nach /srv/nginx installiert.
Wollt ihr nginx woanders installieren, müsst ihr den Parameter –prefix=/srv/nginx anpassen!
Zur Sicherheit sollte nginx nicht unter root laufen. Ich verwende daher den User und die Gruppe www-data.
Compilieren von nginx
make
make install
Hinweis: Das Compilieren kann je nach Geschwindigkeit des Systems einige Minuten dauern!
Aufräumen
cd ../
rm nginx-[cur-nginx-version].tar.gz
rm nginx-[cur-nginx-version] -R
Starten von nginx
cd /srv/nginx/sbin # Zu nginx wechseln
./nginx # nginx starten
Nun sollte nginx laufen. Jedoch unterstützt nginx noch kein PHP.
Deshalb weiter mit dem Tutorial…
Installieren von PHP
apt-get install -y php5-cgi # Installieren von php5-cgi
wget http://ftp.de.debian.org/debian/pool/main/s/spawn-fcgi/spawn-fcgi_1.6.3.orig.tar.gz # Herunterladen
tar spawn-fcgi_*.orig.tar.gz # entpacken
cd spawn-fcgi*
./configure
make
make install
Anlegen und starten der benötigen Startdatei
cd /srv/nginx/sbin # Wechseln in das Inst.verzeichnis von nginx
echo "spawn-fcgi -d /etc/php5/ -f /usr/bin/php-cgi -a 127.0.0.1 -p 9000 -C 2 -F 2 > /dev/null &" > php
chmod +x php
./php
Hinweis: Die Parameter -C und -F geben die Anzahl der Prozesse an, welche die PHP Dateien verarbeiten.
Schlussendlich eine Beispielconfig für /srv/nginx/conf/nginx.conf:
root-dir/public-dir/html-dir: /var/www
[sourcecode language=”plain” collapse=”true”]user www-data;
worker_processes 2;
events {
worker_connections 256;
multi_accept on;
use epoll;
}
http {
sendfile on;
tcp_nopush off;
tcp_nodelay off;
types_hash_max_size 2048;
charset win-utf;
source_charset win-utf;
ignore_invalid_headers on;
include /srv/nginx/conf/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
gzip_static on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types application/x-httpd-php text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
add_header Cache-Control public;
add_header Vary Accept-Encoding;
client_body_buffer_size 64M;
client_header_buffer_size 64M;
client_max_body_size 64M;
large_client_header_buffers 32 32k;
client_body_timeout 30;
client_header_timeout 30;
keepalive_timeout 30;
send_timeout 30;
server {
autoindex on;
listen 80;
server_name patrik.kernstock.net www.patrik.kernstock.net;
location / {
root /var/www;
index index.php index.html index.htm;
fastcgi_read_timeout 1280;
}
location ~ \.(php)$ {
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
include fastcgi_params;
}
}
#Automatische Domains#
# server {
# autoindex on;
# listen 80;
# server_name $host www.$host;
# location / {
# root /var/www/$host;
# index index.php index.html index.htm;
# fastcgi_read_timeout 1280;
# }
# location ~ \.(php|tpl)$ {
# root /var/www/$host;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /var/www/$host/$fastcgi_script_name;
# include fastcgi_params;
# }
# }
}[/sourcecode]
Automatische Installation per Script
Wär sich nginx + PHP automatisch installieren lassen will, kann folgendes Script verwenden:
wget https://patrik.kernstock.net/nginx-install.sh
chmod +x nginx-install.sh
./nginx-install.sh
Ich übernehme keine Haftung!
Danke an q23p.de für die Beispielconfig und die Auflistung der notwendigen Pakete!
Tutorial darf nur mit Copyright und Link zu diesem Artikel kopiert werden!
danke für dies schnelles antworten!
also in php (unter nginx) steht bei mir
“spawn-fcgi -d /etc/php5/ -f /usr/bin/php-cgi -a 127.0.0.1 -p 9000 -C 2 -F > /dev/null &”
doch wenn ich “ls -la /etc/init.d | grep php” ausführe wird nichts gefunden!
Wieso sollte etwas in /etc/init.d/ sein?
Hast du spawn-fcgi installiert und php-cgi?
Das “> /dev/null” ist eigentlich dazu da, damit er die Ausgabe nicht in der Shell anzeigt.
ja, habe ich installiert gehabt. (alles nach deiner anleitung)
also ich bin kein linux guru, hätte ich auch gleich sagen sollen. 🙂
und dass “…# ./php: line 1: /dev/null/: Is a directory” kriege ich immer noch…
vieleicht ist es besser jemand zu suchen der das für mich fixen kann…
dank dir
Ah glaub ich weiß nun wieso 😀
Schreib mal “/dev/null” ohne dem / am Ende.
Mein Test:
root@server ~ # echo “a” > /dev/null/
-bash: /dev/null/: Is a directory
root@server ~ # echo “a” > /dev/null
root@server ~ #
hehe, verstehe jetzt nicht woher der balken kommt. einetippt wurde ohne! :))
#!/bin/bash
spawn-fcgi -d /etc/php5/ -f /usr/bin/php-cgi -a 127.0.0.1 -p 9000 -C 2 -F 2 > /dev/null &
“root@localhost:/srv/nginx/sbin#: No such file or directory”
sorry falsche ausgabe.
“root@localhost:/srv/nginx/sbin# -bash: /dev/null/: Is a directory”
Ich habe “spawn-fcgi -d /etc/php5/ -f /usr/bin/php-cgi -a 127.0.0.1 -p 9000 -C 3 -F 3 > /dev/null &” in meiner ./php stehen.
Funktioniert ohne Probleme. PHP startet…
Probier mal die Zeile oben.
danke, gutes tut zur nginex!
habe aber was zu bemängeln… 🙂
also bei squeeze hat es paar pakete nicht gefunden/gegeben:
cpp
libgcrypt11-dev
libgmp3-dev
libjpeg62-dev
libpthread-stubs0-dev
und ebim letzen punkt mit php “./php” kriege ich “…# ./php: line 1: /dev/null/: Is a directory”
haste plan?
Probier mal folgendes:
Jeweils eine Zeile:
#!/bin/bash
spawn-fcgi -d /etc/php5/ -f /usr/bin/php-cgi -a 127.0.0.1 -p 9000 -C 2 -F 2 > /dev/null &
wäre da “spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid” nicht das gleiche?
Fein, werde ich gleich mal ausprobieren
Danke vorerst, es hat nun geklappt! Allerdings auf meiner VMDebian Mashine. Auf der Dockstar (Squeeze) findet er das packet nginx nicht. Kannst du mal auf deiner Dockstar ein apt-get install nginx ausführen?
Es gibt auch kein Paket namens nginx in der Debian Repo. nginx musst du laut meiner Anleitung installieren. Oder du nimmst mein fertiges Installationsscript:
wget pkern.at/nginx-install.sh && chmod +x nginx-install.sh && ./nginx-install.sh
Hab vor 1-2 Wochen meine DockStar mit “sensors” geschrottet. Hab ihn noch nicht reinstallt. Sorry.
Danke für die tolle Anleitung. Kannst du eventuel dazu noch einbauen wie man phpmyadmin zum laufen bekommt?
danke
Sobald mein root fertig eingerichtet ist, werde ich eine Anleitung dafür schreiben 🙂
Im großen und ganzen ist es nicht schwer. Einfach mit wget LINK_TO_PHPMYADMIN herunterladen, entpacken und den Ordner in phpmyadmin.domain.com umändern. Danach ist pma unter der Domain erreichbar.
Die einzige Voraussetzung für die Möglichkeit ist, dass du den auskommentierten Teil von der nginx.conf auskommentieren musst. (“Automatische Domain”-Teil)
tar xfz nginx-1.0.4 # Entpacken
->Endung fehlt
Oh, stimmt. Danke!