Lade die neueste "mainline"-Version (hier 1.7.9) von http://nginx.org/en/download.html herunter und entpacke sie:
$ wget http://nginx.org/download/nginx-1.7.9.tar.gz
$ tar xf nginx-1.7.9.tar.gz
$ cd nginx-1.7.9
Kompilieren geht wie gewohnt. Der prefix
sorgt dafür, dass ins eigene
Home-Verzeichnis installiert wird und nicht ins Systemverzeichnis, wo man ja
keine Rechte hat.
Damit IP-Adressen richtig weitergegeben werden, sollte das realip-Modul
aktiviert werden. Der Uberspace ist auch via IPv6 erreichbar, was in nginx auch
aktiviert werden muss (wenn man das nicht tut, werden IPv6-Verbindungen als
127.0.0.1
angezeigt).
$ ./configure --prefix=$HOME/nginx --with-http_realip_module --with-ipv6
$ make
$ make install
nginx ist jetzt unter $HOME/nginx installiert. Um auf die ausführbare Datei leicht zugreifen zu können, lohnt sich ein Symlink:
$ ln -s ~/nginx/sbin/nginx ~/bin
Alternativ kann man natürlich den Ordner dem PATH hinzufügen.
Die nginx-Konfigurationsdateien liegen unter ~/nginx/conf
. Dort gibt es
standardmäßig einige verschiedene Dateien, von denen automatisch nur die
nginx.conf geladen wird.
$ cd ~/nginx/conf
$ vim nginx.conf
Hier sind ein paar Sachen auf jeden Fall wichtig:
-
Füge in der obersten Ebene die Zeile
daemon off;
hinzu. Dadurch kann man nginx mit den Daemontools laufen lassen. -
Aktiviere das realip-Modul mit der folgenden Konfiguration im
http
-Block:
set_real_ip_from 127.0.0.1;
set_real_ip_from ::1;
real_ip_header X-Forwarded-For;
- Du kannst nginx natürlich nicht auf den Standardports laufen lassen. Such
dir einen hohen Port aus (siehe Wiki),
der noch nicht belegt ist, und nutze ihn mit
listen
:
server {
listen 65432;
# [...]
}
Wenn du das soweit hast, kannst du einfach nginx
in der Konsole ausführen
(und mit Strg-C wieder beenden), um zu sehen, ob alles soweit passt. Wenn sich
nginx automatisch in den Hintergrund schiebt, fehlt die deamon off
-Konfiguration
von oben!
Wenn alles passt, kannst du wie gewohnt nginx mit den Daemontools laufen lassen:
$ uberspace-setup-service nginx ~/nginx/sbin/nginx
Wenn du Änderungen an der nginx-Konfiguration machst, musst du nicht den Daemon
neustarten (bzw. es wäre sogar eine schlechte Idee, das zu tun), sondern
verwendest einfach nginx -s reload
. Dabei überprüft nginx zuerst, ob deine
Konfiguration gültig ist und startet dann die Worker-Prozesse automatisch
neu, sobald sie alle aktuellen Verbindungen abgearbeitet haben.
Um nginx zu aktualisieren, mache einfach alles so wie oben unter "Installation"
beschrieben, nur eben mit der neueren Version. Danach nginx neu starten mit
svc -du ~/service/nginx
. Die integrierte Upgrade-Funktion, die wie das
Konfigurationsneuladen keine aktiven Verbindungen verliert, funktioniert leider
nicht, da wir daemon off
verwenden.
Falls du bei der vorigen Installation zusätzliche Parameter an ./configure
übergeben hast, kannst du die mit nginx -V
sehen.
Um nginx tatsächlich von außen erreichbar zu machen, kannst du verschiedene Möglichkeiten:
-
Nutze weiterhin den Apache mit einer RewriteRule. Nicht so toll, weil damit alle Anfragen durch eine zusätzliche Ebene müssen und nginx ja dieselben Dinge macht wie Apache.
-
Lass dir den verwendeten Port öffnen. Nachteil: Der Port taucht dann in der URL auf. In dem Fall würdest du aber das realip-Modul natürlich nicht brauchen.
-
Direkt nginx an Pound anbinden lassen. Dazu den gewählten Port zusammen mit den Domains bzw. Pfaden an [email protected] senden. Das hat einen Geschwindigkeitsvorteil im Gegensatz zu Variante 1. Außerdem ist nginx dann regulär über Port 80 bzw. 443 erreichbar und man muss sich nicht selbst um TLS kümmern.
Hey lluchs,
soweit so gut, aber wie hast du es hinbekommen den nginx ohne root zum laufen zu kriegen? Bei mir schnappt er sich immer die root Version vom /etc/nginx Verzeichnis, die ja nicht mir gehört.
Kriege beim "nginx" folgendes:
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2015/12/27 11:55:06 [warn] 19255#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:5
2015/12/27 11:55:06 [emerg] 19255#0: mkdir() "/var/lib/nginx/tmp/client_body" failed (13: Permission denied)