Skip to content

Instantly share code, notes, and snippets.

@lluchs
Last active January 3, 2020 18:14
Show Gist options
  • Save lluchs/fd2f0e5c415490ccda2c to your computer and use it in GitHub Desktop.
Save lluchs/fd2f0e5c415490ccda2c to your computer and use it in GitHub Desktop.

Revisions

  1. lluchs renamed this gist Dec 28, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. lluchs revised this gist Dec 28, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -21,7 +21,7 @@ aktiviert werden muss (wenn man das nicht tut, werden IPv6-Verbindungen als
    `127.0.0.1` angezeigt).

    ```sh
    $ ./configure --prefix=$HOME/nginx --prefix=/home/clnk/nginx --with-http_realip_module --with-ipv6
    $ ./configure --prefix=$HOME/nginx --with-http_realip_module --with-ipv6
    $ make
    $ make install
    ```
  3. lluchs created this gist Dec 28, 2014.
    120 changes: 120 additions & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,120 @@
    # 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:

    ```sh
    $ 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).

    ```sh
    $ ./configure --prefix=$HOME/nginx --prefix=/home/clnk/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:

    ```sh
    $ 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.

    ```sh
    $ 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:

    ```nginx
    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](https://wiki.uberspace.de/system:ports)),
    der noch nicht belegt ist, und nutze ihn mit `listen`:

    ```nginx
    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:

    ```sh
    $ 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](https://wiki.uberspace.de/webserver:htaccess#rewriterule_mit_proxy).
    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](https://wiki.uberspace.de/system:ports#firewall).
    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.