Erstellt virtuell Hosten, Passwuertschutzverzeichnungen an SSL Zertifikater mat Nginx Web Server am Arch Linux


De fréiere Arch Linux 'LEMP' Artikel huet just Basis Saachen ofgedeckt, vun der Installatioun vun Netzwierkservicer (Nginx, MySQL Datebank a PhpMyAdmin) a konfiguréieren minimal Sécherheet erfuerderlech fir MySQL Server a PhpMyadmin.

Dëst Thema ass strikt verbonne mat der fréierer Installatioun vu LEMP op Arch Linux a wäert Iech guidéieren duerch méi komplex Konfiguratioune fir LEMP Stack ze setzen, besonnesch Nginx Webserver Konfiguratiounen, wéi d'Erstelle vun Virtual Hosts , benotzt Password Protected Directories, erstellt a konfiguréiert HTTP Secure Sockets Layer, HTTP onsécher Viruleedungen op HTTPS a presentéieren Iech och e puer nëtzlech Bash Scripten déi wäert d'Aarbecht erliichteren fir virtuell Hosten z'aktivéieren an SSL Zertifikat a Schlësselen ze generéieren.

Installéiert LEMP mat MariaDB Datebank an Arch Linux

Schrëtt 1: Aktivéiert virtuell Hosten op Nginx

Eng vun den einfachsten Methoden fir Virtual Hosts z'aktivéieren ass d'Benotzung vun Include Aussoen op der Haapt Nginx Konfiguratiounsdatei, wat d'Aarbecht vu weider Konfiguratiounen méi einfach an effizient mécht, well Dir einfach Dateien erstellen kënnt fir all neien Host an halen Haaptkonfiguratiounsdatei propper.

Dës Approche funktionnéiert déiselwecht wéi op Apache Web Server, dat éischt wat Dir maache musst ass den neie URI Wee ze spezifizéieren wou Nginx Dateidirektiven liesen soll.

1. Also, oppen nginx.conf Haaptdatei um /etc/nginx/ Systemwee an um Enn, virum leschte Curly Klammer } addéiere de Wee wou zukünfteg Virtual Host Konfiguratiounsdateien wunnen.

$ sudo nano /etc/nginx/nginx.conf

Um ënnen füügt déi folgend Ausso.

include /etc/nginx/sites-enabled/*.conf;

Dës Direktiv seet dem Nginx et soll all Dateien liesen déi an /etc/nginx/sites-enabled/ fonnt ginn, déi mat enger .conf Extensioun endet.

2. De nächste Schrëtt ass fir Site-enabled Verzeichnis ze erstellen an en aneren, genannt Sites-available, wou Dir all Är Virtual Hosts Konfiguratiounsdateien späichert.

$ sudo mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled

3. Elo ass et Zäit en neie Virtuelle Host ze kreéieren. Dëst Beispill wäert d'System IP Adress als virtuelle Hostnumm benotzen, also erstellt eng nei Datei mam Numm name-ip.conf.

sudo nano /etc/nginx/sites-available/name-ip.conf

Füügt de folgenden Inhalt.

## File content ##

server {
    listen 80;
    server_name 192.168.1.33;

    access_log /var/log/nginx/192.168.1.33.access.log;
    error_log /var/log/nginx/192.168.1.33.error.log;

    root /srv/http;
    location / {
    index index.html index.htm index.php;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
 }
    location /phpmyadmin {
        rewrite ^/* /phpMyAdmin last;
    }

    location ~ \.php$ {
        #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

D'Direktiv déi de Virtual Host aktivéiert ass Server_Name Ausso ënner Nolauschtersport. Och eng aner wichteg Direktiv hei ass root Ausso déi Nginx Virtual Host weist fir Dateiinhalt vum /srv/http/ Systemwee ze déngen.

4. De leschte Schrëtt ass den /srv/http/ Verzeechnes ze kreéieren an d'name-ip.conf Dateikonfiguratioun verfügbar ze maachen fir Nginx Liesen (mat symbolesche Link), da fänkt den Daemon nei un. fir nei Konfiguratiounen siichtbar ze maachen.

$ sudo mkdir /srv/http/
$ sudo ln -s /etc/nginx/sites-available/name-ip.conf /etc/nginx/sites-enabled/
$ sudo systemctl restart nginx

5. Fir et z'iwwerpréiwen, weist Äre Browser op Arch System IP Adress an Dir sollt gesinn datt de Webinhalt anescht ass wéi http://localhost. Hei hunn ech e klenge php Skript bäigefüügt, deen och FastCGI PHP Konfiguratiounen kontrolléiert wéi am Screenshot hei drënner.

$ sudo nano /srv/http/info.php
## File content ##

<?php
phpinfo();
?>

6. Eng aner Method déi ech selwer entwéckelt hunn fir Virtual Hosts op Nginx z'aktivéieren oder auszeschalten ass eng méi elegant an et ass inspiréiert vum Apache a2eniste Skript.

Fir dës Method ze benotzen, öffnen e Fichier Editor an erstellt en neie Fichier, genannt n2ensite, op Ärem $HOME Wee mat dem Inhalt hei ënnen, maacht et ausführbar, fuert et mat root Privilegien a gitt als Optioun un Ären neie Virtuelle Hostnumm ouni .conf Enn (fëllt gratis fir et no Äre Besoinen ze änneren).

$ sudo nano n2ensite
## File content ##

#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled  ; then
echo "-----------------------------------------------"
else
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
fi

avail=/etc/nginx/sites-available/$1.conf
enabled=/etc/nginx/sites-enabled/
site=`ls /etc/nginx/sites-available/`

if [ "$#" != "1" ]; then
                echo "Use script: n2ensite virtual_site"
                echo -e "\nAvailable virtual hosts:\n$site"
                exit 0
else

if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart nginx server: sudo systemctl restart nginx"
else
echo  -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site"
exit 0
fi
fi

Maacht et ausführbar a lafen et als Show.

$ sudo chmod +x n2ensite
$ sudo ./n2ensite your_virtual_host

7. Fir Virtuell Hosten auszeschalten erstellt eng nei n2dissite Datei mat den folgenden Inhalter an applizéiert déi selwecht Astellunge wéi hei uewen.

$ sudo nano n2dissite
## File content ##

#!/bin/bash
avail=/etc/nginx/sites-enabled/$1.conf
enabled=/etc/nginx/sites-enabled
site=`ls /etc/nginx/sites-enabled/`

if [ "$#" != "1" ]; then
                echo "Use script: n2dissite virtual_site"
                echo -e "\nAvailable virtual hosts: \n$site"
                exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting!"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nPlease restart Nginx: sudo systemctl restart nginx"
exit 0
fi
fi

8. Elo kënnt Dir dës zwee Skripte benotze fir all Virtuell Host z'aktivéieren oder auszeschalten, awer wann Dir et als Systembreet Kommandoen benotze wëllt, kopéiert just déi zwee Skripte op /usr/local/bin/ an da kënnt Dir benotzt et ouni Wee ze spezifizéieren.

$ sudo cp n2ensite n2dissite /usr/local/bin/

Schrëtt 2: Aktivéiert SSL mat virtuelle Hosten op Nginx

SSL (Secure Sockets Layer) ass e Protokoll entworf fir HTTP-Verbindungen iwwer Netzwierker oder Internet ze verschlësselen, déi d'Datefluss iwwer e séchere Kanal mat symmetreschen/asymmetresche Kryptografeschlësselen iwwerdroen a gëtt am Arch Linux vum OpenSSL Package geliwwert.

$ sudo pacman -S openssl

9. Fir HTTPS Verbindungen mat Nginx z'aktivéieren, denkt den éischten datt Dir maache musst ass Virtual Hosts Schlësselen ze generéieren. Och, fir d'Saachen ze vereinfachen, hunn ech e klenge Skripte entwéckelt, déi automatesch kryptographesch Schlësselen op /etc/nginx/ssl Verzeechneswee generéiert, andeems Dir Virtual Host Benennung als Schlësselnimm benotzt.

Erstellt e Fichier mam Numm nginx_gen_ssl a füügt de folgenden Inhalt un.

$ sudo nano nginx_gen_ssl
## File content ##

#!/bin/bash
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx  SSL certificate!"
read cert

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt

echo -e " The certificate $cert has been generated!\nPlease link it to nginx ssl available website!"
ls -all /etc/nginx/ssl
exit 0

10. Nodeems de Skript erstallt gouf, bäigefüügt Ausféierungsrechter, lafen et a gitt Är Zertifikatoptiounen, déi wichtegst ass Gemeinsamen Numm Feld (füügt hei offiziellen Domain Numm) a loosst Passwuert an Optional Company Felder eidel .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

Um Enn vun de Schlësselen generéieren Aufgab gëtt eng Oplëschtung mat all verfügbare Schlësselen ënner Nginx ssl Verzeechnes ugewisen.

Och wann Dir wëllt datt dëst Skript als Systembefehl benotzt gëtt, kopéiert oder réckelt et op /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Nodeems mir Schlësselen generéiert hunn, déi néideg sinn fir Nginx SSL Virtual Host, ass et Zäit fir tatsächlech SSL Virtual Host Konfiguratiounsdatei ze kreéieren. Benotzt déi selwecht System IP Adress fir Virtual Host wéi uewen op Server_Name Direktiv, awer ännert e bëssen den Virtual Host Dateinumm andeems Dir ssl virun .conf bäidréit, fir Iech z'erënneren datt dës Datei steet fir name-ip SSL Virtual Host.

$ sudo nano /etc/nginx/sites-availabe/name-ip-ssl.conf

Op dëser Datei ännert d'lauschtert Porterklärung op 443 ssl a gitt SSL- an Zertifikatschlësseldateierweeër mat deenen, déi virdru erstallt goufen, fir ze kucken wéi an ënnen Auszich.

## File content ##

server {
    listen 443 ssl;
    server_name 192.168.1.33;

       ssl_certificate     /etc/nginx/ssl/192.168.1.33.crt;
       ssl_certificate_key  /etc/nginx/ssl/192.168.1.33.key;

       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;

       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;

    access_log /var/log/nginx/192.168.1.33-ssl.access.log;
    error_log /var/log/nginx/192.168.1.33-ssl.error.log;
    root /srv/http;
    location / {
    index index.html index.htm index.php;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
 }
    location /phpmyadmin {
        rewrite ^/* /phpMyAdmin last;
    }
    location ~ \.php$ {
        #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

12. Nodeems d'Datei erstallt gouf, benotzt n2ensite Skript oder ln Kommandozeil fir se z'aktivéieren (erstellt e symbolesche Fichier Link am Site-enabled Verzeichnis ), da starten den Nginx Daemon nei fir Astellungen z'applizéieren.

$ sudo ./n2ensite name-ip-ssl
OR
$ sudo ln -s /etc/nginx/sites-available/name-ip-ssl.conf /etc/nginx/sites-enabled/
$ sudo systemctl restart nginx

13. Gitt Äre Browser nach eng Kéier op Arch IP URL awer dës Kéier benotzt HTTPS Protokoll - https://192.168.1.33 op mengem System- an eng Connection Untrusted Sécherheetsfehler soll erschéngen (Sécherheetsausnahmen derbäisetzen an bestätegt fir weider op Säit ze goen).

Wéi Dir elo kënnt gesinn, servéiert Ären Nginx Virtual Host dee selwechten Inhalt wéi de fréiere name-ip Host awer dës Kéier mat enger HTTP sécher Verbindung.

Schrëtt 3: Zougrëff op PhpMyAdmin duerch Virtual Host

Wann Virtual Host op Nginx aktivéiert ass, hu mir net méi Zougang zu http://localhost Weeinhalter (localhost servéiert normalerweis Inhalt mat loopback IP Adress oder System IP Adress wann net anescht konfiguréiert ass) well mir hunn benotzt Arch System IP als Server_Name sou datt eisen Inhaltswee geännert huet.

14. Déi einfachst Method fir Zougang zu PhpMyAdmin iwwer Web ze kréien ass e symbolesche Link tëscht /usr/share/webapps/phpMyAdmin/ Wee an eisem neie definéierte Virtuelle Host Wee ze kreéieren (/srv/http).

$ sudo ln -s /usr/share/webapps/phpMyAdmin/ /srv/http/

15. Nodeems Dir de uewe genannte Kommando ausgefouert hutt, erfrëscht Är Säit an Dir gesitt en neien Dossier phpMyAdmin erschéngen, wann autoindex Ausso op Nginx Virtual Host aktivéiert ass oder Är URL direkt op PhpMyAdmin Dossier https: //arch_IP/phpMyAdmin.

16. Wann Dir wëllt de phpMyAdmin String am Browser desinfizéieren, ännert Är Virtual Hosts Dateien a füügt de folgenden Inhalt ënner Serverblock.

location /phpmyadmin {
       rewrite ^/* /phpMyAdmin last;
    }

Schrëtt 4: Passwuert geschützt Verzeechnes op Nginx aktivéieren

Am Géigesaz zu Apache benotzt Nginx HttpAuthBasic Modul fir Password Protected Directories z'aktivéieren, awer bitt keng Tools fir eng verschlësselte .htpasswd Datei ze kreéieren.

17. Fir Verzeechnes Passwuert Schutz mat Nginx op Arch Linux z'erreechen installéiert Apache Webserver a benotzt seng Tools fir eng verschlësselte .htaccess Datei ze generéieren.

$ sudo pacman -S apache

18. Nodeems Dir Apache installéiert hutt, erstellt en neien Verzeichnis ënner /etc/nginx/ mam Numm intuitiv passwd wou .htpasswd Datei gespäichert gëtt a benotzt htpasswd Kommando mat –c schalt op den éischte addéierte Benotzer fir Datei ze generéieren, dann wann Dir méi Benotzer wëllt addéieren, benotzt htpasswd ouni –c Schalter.

$ sudo mkdir /etc/nginx/passwd

$ sudo htpasswd -c /etc/nginx/passwd/.htpasswd first_user
$ sudo htpasswd /etc/nginx/passwd/.htpasswd second_user
$ sudo htpasswd /etc/nginx/passwd/.htpasswd third_user

19. Fir name-ip-ssl Virtuell Host root ze schützen /srv/http/ servéiert Wee mat all sengen Ënner-Ordner an Dateien drënner füügt déi folgend Instruktiounen an Ärem Virtuell Host-Server blockéiert ënner der Root-Direktiv a weist et op den absoluten .htpasswd-Dateiwee.

auth_basic "Restricted Website";
auth_basic_user_file /etc/nginx/passwd/.htpasswd;

20. Nodeems Dir den Nginx Service nei gestart hutt, d'Säit erfrëschen an e Authentifikatioun erfuerderlech Popup soll erfuerderlech fir Är Umeldungsinformatiounen erscheinen.

Elo hutt Dir erfollegräich Nginx Password Protected Directories aktivéiert, awer bewosst datt d'selwescht Zäit den Apache Webserver an Ärem System installéiert ass, also vergewëssert Iech datt et behënnert bleift an op alle Fall net starten well Häfen konfliktend mat Nginx.

Schrëtt 5: Redirect HTTP op HTTPS op Nginx

21. Wann Dir wëllt datt d'Browser automatesch all onsécher HTTP-Ufroen op HTTPS-Protokoll opmaachen an änneren, sidd Dir net-ssl Virtual Host a füügt déi folgend Instruktioun ënner Server_Name Direktiv un. .

rewrite        ^ https://$server_name$request_uri? permanent;

All d'Astellungen, déi op dësem Artikel presentéiert goufen, goufen ënner engem Arch Linux System gemaach deen als Server wierkt, awer déi meescht vun hinnen, besonnesch déi iwwer Nginx Konfiguratiounsdateien, sinn op de meeschte Linux Systemer mat liicht Differenzen verfügbar.