Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
    • Help
    • Contribute to GitLab
  • Sign in / Register
QUIQQER
QUIQQER
  • Project
    • Project
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 159
    • Issues 159
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 1
    • Merge Requests 1
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • QUIQQER
  • QUIQQERQUIQQER
  • Wiki
  • nginx konfiguration

nginx konfiguration

Last edited by Florian Bogner Jan 18, 2019
Page history

Nginx Config

Allgemeines

Nginx ermöglicht es nicht eine Config-datei im DokumentRoot des VHosts anzulegen, wie Apache es mit der .htaccess handhabt.
Anstatt dessen liest Nginx Directorybezogene Anweisungen beim Dienststart ein.
Diese Anweisungen werden in einer zentralen ConfigDatei verwaltet und bestehen aus Anweisungsblöcken.
Die zwei Hauptarten jener Blöcke sind Server- und Locationblöcke.


Nginx config für Quiqqer

Bitte beachten Sie, dass folgende Angaben nicht blind kopiert werden sollten. Eventuell verwendet ihr System andere Pfade oder Pakete wie "nano" sind nicht installiert. Folgende Angaben sind also ohne Gewähr und dienen eher als Leitfaden und Beispiel.

Quiqqer bietet die Möglichkeit die Nginx config generieren zu lassen. Dafür muss die quiqqer.php in der Console aufgerufen werden.

php quiqqer.php

Dort meldet man sich mit den Admin-Zugangsdaten an und ruft das tool Nginx auf :

quiqqer:nginx

Dieses Tool erstellt die Nginx-Config im Rootverzeichnis von Quiqqer.
Den Inhalt dieser Configdatei kopiert man nun und fügt sie in die NginX config ein.
Diese residiert im Normalfall unter :

/etc/nginx/

Dort findet man die nginx.config sowie einen Unterordner "sites-available"

/etc/nginx/sites-available/

Dieser Unterordner dient für Vhostbezogene config Dateien, welche in die Hauptconfig eingebunden werden.
Um die Nginx config für Quiqqqer wirksam zu machen legen wir eine neue Datei in diesem Unterordner an.

cd /etc/nginx/sites-avilable	
sudo nano quiqqer.conf

Am einfachsten ist es die von QUIQQER generierte Datei nun zu includieren.

# Change the path to match your systems confifuration
include /var/www/html/quiqqer/etc/nginx/nginx.conf;

Abschließend speichert man die Änderungen.

Crtl +x
Mit  "yes"  bestätigen

Um die Configdatei nun zu "aktivieren" müssen wir einen symbolischen Link von "sites-enabled" nach "sites-available" erstellen.

cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/quiqqer.conf /etc/nginx/sites-enabled/quiqqer.conf 

Darauf folgt eine Verifikation der Configdatei und ein restart von nginx.

nginx -t     # Prüft die Config Dateien
service nginx restart 

Installation GeoIP Module

Um das GeoIP Module im Nginx zu aktivieren muss der http-Block (z.b. nano /etc/nginx/nginx.conf) um folgende einträge ergänzt werden.

http {

        ...

        geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
            auto_reload 5m;
            $geoip2_metadata_country_build metadata build_epoch;
            $geoip2_data_country_code default=US  country iso_code;
            $geoip2_data_country_name country names en;
        }

        geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
            $geoip2_data_city_name default=London city names en;
            $geoip2_data_city_country_code country iso_code;
            $geoip2_data_city_country_name country names en;
            $geoip2_data_location_longitude  location longitude;
            $geoip2_data_location_latitude  location latitude;
            $geoip2_data_continent_code continent code;
            $geoip2_data_postal_code postal code;
        }

Außerdem müssen die Variablen noch in PHP bekannt gemacht werden, hierfür muss im Location Block folgendes eingefügt werden.
QUIQQER legt bereits Konfigurationsdateien, an die von der generierten Datei 'includiert' werden.
Folgender Inhalt kann in die Datei /var/www/html/etc/nginx/conf.d/php.include eingefügt werden:

### SET GEOIP Variables ###
fastcgi_param GEOIP_COUNTRY_CODE $geoip2_data_country_code;
fastcgi_param GEOIP_COUNTRY_NAME $geoip2_data_country_name;
fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip2_data_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip2_data_city_country_name;
fastcgi_param GEOIP_CITY $geoip2_data_city_name;
fastcgi_param GEOIP_POSTAL_CODE $geoip2_data_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip2_data_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip2_data_location_longitude;
fastcgi_param GEOIP_LONGITUDE $geoip2_data_postal_code;

GeoIP datenbanken

Die Datenbanken für GEO IP können über folgendes Tool bezogen und geupdated werden: https://dev.maxmind.com/geoip/geoipupdate/


Aufbau der Nginx config

Http Block

Der Http Block enthält alle Server übergreifenden Konfigurationen.

Server Block

Der Serverblock enthält Anweisungen, die den VHost betreffen.
Also insbesondere die IP bzw. den Port auf welchen der VHost reagiert und auf welche Domain er ansprechen soll.

listen: Angabe auf welcher IP-Adresse/welchem Port reagiert werden soll .
Beispiel : listen 0.0.0.0:80; oder listen 80;

server_name: Angabe auf welche Domain reagiert werden soll. Je genauer, desto höher die Priorität.
Beispiel : *.example.com oder example.com

Location Block

Ein Serverblock kann mehrere Locationblöcke beinhalten.
Locationblöcke sind grundlegend das Äquivalent zur .htaccess Datei.
Sie ermöglichen Konfigurationsdirektiven zu einem bestimmten Ort anzugeben.

Die Syntax des Location-Blocks ist wie folgt :
location modifier path { Anweisungen }

Wobei der Modifier wie folgt ausfallen kann :

Modifier Bedeutung
(leer) Prüft als Prefix. matcht, wenn URI damit anfängt
= Exakt. Matcht nur bei exaktem Treffer.
~ RegEx. Matcht einen Regulären Ausdruck.
~* RegEx. Matcht einen case-insensitiven Regulären Ausdruck
^~ Versucht diesen String in der Url zu finden. Verhindert RegEx matching

Path
Der path Beschreibt die request_uri, als den Teil nach der Host-Angabe.
Hierbei ist zu beachten, dass Nginx einen führenden "/" beachtet.
http://localhost/test/ müsste also mit location = /test/ gematcht werden.

Reihenfolge der Selektion
Da wir nun betrachtet haben, wie ein Locationblock aufgebaut ist, werden wir nun genauer betrachten, wie der Server den zu verwendenden Locationblock auswählt.

Nginx verwendet einen umfangreichen Algorithmus, welcher bei jedem Request einen passenden Locationblock sucht.

Kurz zusammengefasst sehen die Schritte wie folgt aus :

  • Prüfe nicht Reguläre Ausdrücke

    • Suche zuerst exakte treffer (= modifier)

    • Als nächstes werden Prefix-matches gesucht, je länger, desto höher die Priorität

    • Falls beim längsten Prefix-treffer ein ^~ modifier verwendet wird, wird dieser Treffer sofort verwendet (verhindert RegEx-Prüfung)

    • Falls kein modifier verwendet wird, speichere besten Treffer zwischen

  • Prüfe nun, ob RegEx Treffer möglich sind (Reihenfolge wie in der ConfigDatei)

    • Hier gilt, der erste Treffer gewinnt.
  • Falls kein Match durch RegEx erzielt werden konnte, verwende zwischengespeicherten Prefix-Match.

Zu beachten:

Bei machen Anweisungen, wird der Algorithmus von vorne gestartet, wenn ein interner Redirect stattfindet und nicht explizit verhindert wird. Das heißt, es ist möglich in Endlosschleifen zu geraten!

Die Anweisungen

Da wir nun wissen, welcher Block selektiert wird, sollten wir uns damit befassen, was der Block bewirken kann.

Im Locationblock hat man nun diverse Konfigurationsmöglichkeiten. Unter anderem :

index: Man kann die Indexdatei festlegen
root: Man kann den DirectoryRoot erneut festlegen

Besonderes Augenmerk legen wir aber auf die folgenden Direktiven:

  • return : Stoppt die weitere Bearbeitung des Requests und sendet eine Statuscode zurück. Entweder ein redirect oder ein Statuscode mit Responsetext.

  • rewrite: Schreibt einen Teil der URI um und führt einen internen redirect aus.

  • try_files : Prüft gegebene Dateien / Ordner auf Existenz, falls keine davon existiert wird ein interner redirect auf den letzten Parameter ausgeführt

Mehr zu der Direktive : rewrite

**Allgemeines Format : ** rewrite <RegEx-pattern> <replacement> [flag]

Ersetzt den Teil der URI, der das RegEx-Pattern "matcht" durch das angegeben Replacement.
Soweit nicht durch Flags behandelt, wird auf die neu entstandene URI erneut eine Suche nach passenden Locationblöcken gestartet.

Flags :

  • last : Hört sofort mit Bearbeitung des Requests auf und sucht sofort nach neune Location Blöcken

  • break : Stoppt Bearbeitung des Requests und sucht keine neue Locationblöcke.

Vertiefende Literatur

  • Doku : http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

  • Requestprocessing : http://nginx.org/en/docs/http/request_processing.html

  • Ausführliches rewrite Tutorial : https://www.nginx.com/blog/creating-nginx-rewrite-rules/

  • .htaccess in Nginx konvertieren : https://www.nginx.com/blog/converting-apache-to-nginx-rewrite-rules/

Clone repository
  • Aufbau Quiqqer
  • Aufbau Quiqqer DB
  • Authenticator
  • Changelog Quiqqer
  • Console Xml
  • Database Xml
  • DesktopSearch
  • Eclipse Einrichten Fuer Quiqqer
  • Events Xml
  • Group Xml
  • Locale Xml
  • Menu Xml
  • Package Xml
  • Panels Xml
  • Menu-Xml
    • Menu erweitern
More Pages

New Wiki Page

Tip: You can specify the full path for the new file. We will automatically create any missing directories.