nginx Tutorial #3 - Grundlegende Konfiguration

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Registriere dich um viele Vorteile zu genießen! Weniger Werbung, bessere Kommunikation und vieles mehr!

  • In diesem Tutorial lernst du den Webserver nginx genauer kennen und wirst lernen wie man diesen konfiguriert.
    Inhaltsverzeichnis
    1. Vorwort
    2. Ein server{}-Block
    3. mod_rewrite bei nginx
    4. auth_basic
    5. Netdata
    6. Phpmyadmin



    1. Vorwort

    In dem 3ten Tutorial dieser Reihe gehe ich auf die Konfiguration eines server{}-Blocks, auf mod_rewrite bei nginx und auf das auth_basic Modul ein. Desweiteren richten wir einen nginx Reverse Proxy für Netdata ein und sichern diesen mit einem Passwort ab. Desweiteren erkläre ich wie man Phpmyadmin einbindet. Ich werde erst in einem kommenden Beitrag auf SSL-Zertifikate und weitere Methoden um den Webserver zusichern eingehen.



    2. Ein server{}-Block

    Als erstes öffnen wir die Datei /etc/nginx/sites-available/default mit einem beliebigen Editor. Für das Tutorial habe ich diese Datei komplett geleert, dies könnt ihr ebenfalls machen oder ihr ergänzt diese Datei nach euren Wünschen. In die leere Datei fügen wir dann folgendes ein.


    Quellcode

    1. server {
    2. listen 80 default_server;
    3. listen [::]:80 default_server ipv6only=on;
    4. server_name example.com;
    5. root /var/www/html;
    6. index.php index.html;
    7. location / {
    8. try_files $uri $uri/ =404;
    9. }
    10. location ~ \.php$ {
    11. include snippets/fastcgi-php.conf;
    12. fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    13. }
    14. }
    Alles anzeigen
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    Mit diesen zwei Zeilen legen wir den Port fest unter dem Server erreichbar ist, in unserem Fall nutzen wir den Standard Http Port (80). Die erste Zeile ist für IPv4- und die zweite Zeile für IPv6-Adressen. Der Parameter default_server legt fest das dies der die Standard Webseite von unserem Webserver sein wird.

    server_name example.com;
    Mit server_name legen wir fest unter welcher Domain bzw. unter welcher Subdomain/Subdomains die Webseite verfügbar ist. Ein Beispiel für mehrere Adressen unter denen die Webseite verfügbar sein soll ist folgendes:
    server_name mysql.example.com phpmyadmin.example.com;

    root /var/www/html;
    Mit dieser Zeile legen wir das Root-Verzeichnis der Webseite fest (root /weg/zum/Verzeichnis/;).

    index.php index.html;
    Darunter legen wir die Datei(en) fest die die Standarddatei(en) sein soll(en) (Im Normalfall sind dieses ja entweder die index.php oder die index.html).

    location / {
    try_files $uri $uri/ =404;
    }
    Der location{}-Block ist das Kernstück der Webseite. Hier werden Konfigurationen vorgenommen die für bestimmte z.B. Pfade (z.b. "/" oder "/ordner1/ordner2/"), einzelne Dateien oder für einzelne Dateiendungen. Die zweite Zeile "try_files $uri $uri/ =404;" ist dafür da, dass der Webserver bei jeder Anfrage überprüft ob die angefragte Datei existiert, tut sie dies nicht zeigt er die 404error Seite an.

    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }

    Diese Zeilen sind die im zweiten Tutorial erklärte PHP7.0 Unterstützung.



    3. mod_rewrite bei nginx

    Wenn du das mod_rewrite Modul von Apache2 kennst wird dir das rewrite Modul von nginx sehr bekannt vorkommen.
    Wenn du z.B. willst das der Link http://example.com/?language=en&page=home nicht so, sondern so example.com/en/home/ aussieht, ergänzt du folgendes in dem location{}-Block :

    rewrite ^/([a-z]+)/$ /?lang=$1;
    rewrite ^/([a-z]+)/([a-z]+)/$ /?lang=$1&page=$2;

    Hierbei steht das "rewrite" für das rewrite Modul und das ^/ entspricht "example.com/". Danach definieren wir in den zwei Klammern (), welche Zeichen genutzt werden dürfen und wie viele Zeichen hier stehen dürfen. In den eckigen Klammern definieren wir dir Zeichen die verwendet werden dürfen, Beispiele dafür sind [a-z],[A-Z],[0-9],[a-z0-9],etc. Mit dem + wird gesagt das "unendlich" viele dieser Zeichen hier stehen können, wollen wir dies z.B. auf drei Zeichen begrenzen schreiben wir den [Erlaubte Zeichen]-Block drei mal in die runden Klammern, z.B.:
    rewrite ^/([a-z][a-z][a-z])/$ /?lang=$1;

    Mit dem Rewrite Modul kannst du noch viel mehr als dies machen, was genau kannst du auf der offiziellen Webseite von nginx nachlesen. nginx.org/en/docs/http/ngx_http_rewrite_module.html



    4. auth_basic

    Du willst deine Seite mit einem Passwort und einem Benutzernamen absichern, dies funktionier auch ganz einfach.
    Als erstes installierst du hierzu open-ssl

    sudo apt-get install openssl

    Dann gibst du folgenden Befehl ein
    openssl passwd

    Du folgst den Anweisung und erhälst zum Schluss so einen Hash-Wert O5az.RSPzd.HE

    Nun erstellst du eine Datei wo der Username und das Passwort deiner Admins gespechert werden wird.

    nano /etc/nginx/example_pass

    In dieser schreibst du:
    Username:Passwort

    Also in unserem Fall
    ExampleUser:O5az.RSPzd.HE

    Nun öffnest du wieder die default-Datei (/etc/nginx/sites-available/default) mit einem beliebigen Editor und fügst in dem location{}-Block folgendes hinzu:

    auth_basic "Admin Login";
    auth_basic_user_file /etc/nginx/example_pass;

    "auth_basic " gibt den Typen deiner Authentifizierung an und "auth_basic_user_file" den Pfad zu deiner Datei wo du die Usernamen und die Passwörter deiner Admins speicherst.
    Nun solltest du, wenn du deine Webseite (example.com/) aufrufst, ein Feld erscheinen wo du nach deinem Benutzernamen und deinem Passwort gefragt wirst. Gibst du dieses richtig ein, so siehst du die gewünschte Seite, gibst du es falsch ein wird dir das Login-Feld erneut angezeigt, klickst du auf "Abrechen", wird dir die Fehlermeldung "401 Authorization Required" angezeigt.



    5. Netdata

    Nun ergänzen wir hier den Reverse Proxy aus dem Beitrag Netdata - performance monitoring, done right! von @LucaDev um das auth_basic Modul.

    Quellcode

    1. location / {
    2. proxy_pass http://127.0.0.1:19999;
    3. auth_basic "Admin Login";
    4. auth_basic_user_file /etc/nginx/example_pass;
    5. }
    Nun solltest du, wenn du deine Webseite (example.com/) aufrufst, ein Feld erscheinen wo du nach deinem Benutzernamen und deinem Passwort gefragt wirst. Gibst du dies richtig ein so wird dir (wenn installiert) Netdata angezeigt.



    6.Phpmyadmin

    Damit man unter example.com/phpmyadmin auch Phpmyadmin erreicht muss folgenden in den server{}-Block hinzugefügt werden.

    Quellcode

    1. location /phpmyadmin/ {
    2. root /usr/share/phpmyadmin/;
    3. index index.php index.html index.htm;
    4. auth_basic "Admin Login";
    5. auth_basic_user_file /etc/nginx/example_pass;
    6. location ~ ^/(.+\.php)$ {
    7. try_files $uri =404;
    8. root /usr/share/phpmyadmin/;
    9. fastcgi_pass unix:/var/run/php5-fpm.sock;
    10. fastcgi_index index.php;
    11. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    12. include /etc/nginx/fastcgi_params;
    13. }
    14. location ~* ^/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
    15. root /usr/share/phpmyadmin/;
    16. }
    17. }
    Alles anzeigen
    Nun solltest du, wenn du deine Webseite mit der Ergänzung phpmyadmin/ (example.com/phpmyadmin/) aufrufst, ein Feld erscheinen wo du nach deinem Benutzernamen und deinem Passwort gefragt wirst. Gibst du dies richtig ein so wird dir (wenn installiert) der Phpmyadmin-Login Bildschirm angezeigt.





    Ich hoffe der erste Teil dieser Reihe hat euch gefallen, ich freue mich auf Feedback und Wünsche für die nächsten Teile (z.B. mod_rewrite, "www to non-www" Weiterletung, etc.)

    MfG
    SirArgon

    173 mal gelesen