Skip to content

Instantly share code, notes, and snippets.

@simbo
Forked from lluchs/nginx-uberspace.md
Last active August 29, 2015 14:16
Show Gist options
  • Save simbo/bbee1099782811b88efa to your computer and use it in GitHub Desktop.
Save simbo/bbee1099782811b88efa to your computer and use it in GitHub Desktop.

nginx auf dem Uberspace

Installation

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.

Konfiguration

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.

Aktualisierungen

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.

nginx erreichbar machen

Um nginx tatsächlich von außen erreichbar zu machen, kannst du verschiedene Möglichkeiten:

  1. 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.

  2. 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.

  3. 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment