Ustvarite navidezne gostitelje, imenike z zaščito z geslom in potrdila SSL z uporabo spletnega strežnika Nginx v Arch Linuxu


Prejšnji članek Arch Linuxa „LEMP“ je vseboval osnovne stvari, od namestitve omrežnih storitev (Nginx, zbirka podatkov MySQL in PhpMyAdmin) in konfiguriranja minimalne varnosti, potrebne za strežnik MySQL in PhpMyadmin.

Ta tema je tesno povezana s prejšnjo namestitvijo LEMP na Arch Linux in vas bo vodila skozi nastavitev bolj zapletenih konfiguracij za sklad LEMP, zlasti konfiguracij spletnega strežnika Nginx , kot je ustvarjanje navideznih gostiteljev , uporabite Imenike, zaščitene z geslom , ustvarite in konfigurirajte Sloj varnih vtičnic HTTP , HTTP nezanesljivo preusmeri na HTTPS in vam bo predstavil tudi nekaj uporabnih skriptov Bash, ki bo olajšal delo pri aktiviranju navideznih gostiteljev in ustvaril SSL certifikat in ključe .

Namestite LEMP z bazo podatkov MariaDB v Arch Linux

1. korak: Omogočite navidezne gostitelje v Nginxu

Eden najpreprostejših načinov za omogočanje navideznih gostiteljev je uporaba stavkov vključi v glavni konfiguracijski datoteki Nginx, zaradi česar je delo nadaljnjih konfiguracij enostavnejše in učinkovitejše, saj lahko ustvarite preproste datoteke za vsakega novega gostitelja in naj bo glavna konfiguracijska datoteka čistejša.

Ta pristop deluje enako kot pri spletnem strežniku Apache , najprej morate določiti novo pot URI , kjer naj Nginx bere direktive datotek.

1. Torej, odprite glavno datoteko nginx.conf , ki se nahaja na sistemski poti /etc/nginx/ in na dnu, pred zadnjim kodrastim oklepajem »} ”Dodajte pot, kjer bodo prebivale prihodnje konfiguracijske datoteke Virtual Host.

$ sudo nano /etc/nginx/nginx.conf

Na dnu dodajte naslednjo izjavo.

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

Ta direktiva Nginxu sporoča, naj prebere vse datoteke, ki jih najdete v /etc/nginx/sites-enabled/, ki se konča s pripono .conf .

2. Naslednji korak je ustvariti imenik z omogočenimi spletnimi mesti in še en, imenovan mesta, ki so na voljo , kjer shranite vse svoje konfiguracijske datoteke navideznih gostiteljev.

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

3. Zdaj je čas, da ustvarite novega navideznega gostitelja. V tem primeru bo sistemski naslov IP uporabljen kot ime navideznega gostitelja, zato ustvarite novo datoteko z imenom name-ip.conf .

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

Dodajte naslednjo vsebino.

## 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;
    }
}

Direktiva, ki aktivira navidezni gostitelj, je izjava ime_strežnika pod vrati za poslušanje. Druga pomembna direktiva tukaj je izjava root , ki usmerja virtualni gostitelj Nginx, da streže vsebino datotek s sistemske poti /srv/http/.

4. Zadnji korak je ustvariti imenik /srv/http/ in omogočiti konfiguracijo datoteke name-ip.conf za branje Nginxa (s simbolično povezavo), nato znova zagnati demon da bodo vidne nove konfiguracije.

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

5. Če ga želite preveriti, usmerite brskalnik na naslov IP sistema Arch in videli bi, da se spletna vsebina razlikuje od http:// localhost . Tu sem dodal majhen skript php, ki prav tako preverja konfiguracije FastCGI PHP , kot je prikazano na spodnjem posnetku zaslona.

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

<?php
phpinfo();
?>

6. Druga metoda, ki sem jo razvil sam za omogočanje ali onemogočanje navideznih gostiteljev na Nginxu, je bolj elegantna in temelji na skriptu Apache a2eniste .

Če želite uporabiti to metodo, odprite urejevalnik datotek in na poti $HOME s spodnjo vsebino ustvarite novo datoteko, imenovano n2ensite , jo naredite izvršljivo in jo zaženite s korenskimi pravicami in prenesite kot možnost na novo ime navideznega gostitelja, ne da bi se .conf končal (prosimo, spremenite ga glede na vaše potrebe)

$ 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

Naj bo izvršljiv in ga zaženite kot show.

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

7. Če želite onemogočiti navidezne gostitelje, ustvarite novo datoteko n2dissite z naslednjo vsebino in uporabite enake nastavitve kot zgoraj.

$ 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. Zdaj lahko s temi dvema skriptama omogočite ali onemogočite kateri koli virtualni gostitelj, če pa ga želite uporabiti kot sistemske ukaze, preprosto kopirajte oba skripta v /usr/local/bin/ in nato lahko uporabite ga brez navedbe poti.

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

2. korak: Omogočite SSL z navideznimi gostitelji v Nginxu

SSL ( Secure Sockets Layer ) je protokol, zasnovan za šifriranje povezav HTTP prek omrežij ali interneta, ki omogoča prenos podatkov po varnem kanalu s pomočjo simetričnih/asimetričnih kriptografskih ključev in je v Arch Linuxu na voljo v paketu OpenSSL.

$ sudo pacman -S openssl

9. Če želite omogočiti povezave HTTPS z Nginxom, morate najprej ustvariti ključe navideznih gostiteljev. Za poenostavitev sem razvil tudi majhne skripte, ki samodejno generirajo kriptografske ključe na poti imenika /etc/nginx/ssl , pri čemer poimenovanje navideznega gostitelja uporablja kot imena ključev.

Ustvarite datoteko z imenom nginx_gen_ssl in dodajte naslednjo vsebino.

$ 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. Ko je skript ustvarjen, dodajte dovoljenja za izvrševanje, zaženite ga in zagotovite možnosti potrdila, najpomembnejše je polje Skupno ime (tukaj dodajte uradno ime domene), polja Geslo in Neobvezno podjetje pa pustite prazna .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

Na koncu naloge za ustvarjanje ključev se prikaže seznam z vsemi razpoložljivimi ključi v imeniku Nginx ssl.

Če želite, da se ta skript uporablja kot sistemski ukaz, ga kopirajte ali premaknite v /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Ko smo ustvarili ključe, potrebne za navidezni gostitelj Nginx SSL, je čas, da dejansko ustvarimo konfiguracijsko datoteko SSL navideznega gostitelja. Za navidezni gostitelj uporabite isti sistemski naslov IP kot zgoraj v direktivi ime_strežnika , vendar rahlo spremenite ime datoteke navideznega gostitelja, tako da dodate ssl pred .conf , da vas opomni, da je ta datoteka je kratica za name-ip SSL Virtual Host.

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

V tej datoteki spremenite izjavo vrat poslušaj na 443 ssl in zagotovite poti datotek SSL in ključev potrdil s prej ustvarjenimi, da bo videti tako kot v spodnjem odlomku.

## 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. Ko datoteko ustvarite, jo aktivirajte s skriptom n2ensite ali ukazno vrstico ln (ustvari simbolno povezavo datoteke v imeniku omogočena spletna mesta ), nato znova zaženite demon Nginx, da uporabite nastavitve.

$ 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. Še enkrat usmerite brskalnik na Arch IP URL , vendar tokrat s protokolom HTTPS - https://192.168.1.33 v mojem sistemu- in Connection Untrusted prikazala bi se varnostna napaka ( Dodaj in potrdi varnostno izjemo za nadaljevanje na strani).

Kot lahko vidite, vaš virtualni gostitelj Nginx streže enako vsebino kot prejšnji gostitelj name-ip , vendar tokrat z uporabo varne povezave HTTP.

3. korak: Dostop do PhpMyAdmin prek navideznega gostitelja

Če je v Nginxu omogočen Virtual Host, nimamo več dostopa do vsebine poti http:// localhost (localhost običajno streže vsebino z uporabo povratnega naslova IP ali sistemskega naslova IP, če ni drugače konfiguriran), ker imamo je uporabil IP sistema Arch kot ime_strežnika , zato se je naša vsebinska pot spremenila.

14. Najenostavnejši način za dostop do PhpMyAdmin prek spleta je ustvariti simbolično povezavo med potjo /usr/share/webapps/phpMyAdmin/ in našo novo definirano potjo navideznega gostitelja (/srv/http ).

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

15. Po izvedbi zgornjega ukaza osvežite svojo stran in prikazala se bo nova mapa phpMyAdmin, če je na virtualnem gostitelju Nginx omogočena izjava autoindex ali vaš URL usmerite neposredno v mapo PhpMyAdmin https:/arch_IP/phpMyAdmin .

16. Če želite v brskalniku sanirati niz phpMyAdmin, uredite datoteke navideznih gostiteljev in v blok strežnika dodajte naslednjo vsebino.

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

4. korak: v Nginxu omogočite imenik, zaščiten z geslom

Za razliko od Apacheja Nginx uporablja modul HttpAuthBasic , da omogoči Imenike, zaščitene z geslom , vendar ne ponuja nobenega orodja za ustvarjanje šifrirane datoteke .htpasswd .

17. Za zaščito gesla imenika z Nginxom na Arch Linux namestite spletni strežnik Apache in z njegovimi orodji ustvarite šifrirano datoteko .htaccess .

$ sudo pacman -S apache

18. Ko namestite Apache, v /etc/nginx/ ustvarite nov imenik z imenom intuitivno passwd, kjer bo shranjena datoteka .htpasswd in uporabite htpasswd ukaz s stikalom –c vklopite prvega dodanega uporabnika za ustvarjanje datoteke, nato pa, če želite dodati več uporabnikov, uporabite htpasswd brez stikala –c .

$ 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. Da bi zaščitili name-ip-ssl koren navideznega gostitelja /srv/http/, ki je bila vročena, z vsemi podmapami in datotekami pod njo dodajte naslednja navodila v svoj Blok strežnika navideznega gostitelja pod korensko direktivo in ga usmerite na absolutno pot datoteke .htpasswd .

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

20. Po ponovnem zagonu storitve Nginx se morata prikazati osveževalna stran in pojavno okno Zahteva se preverjanje pristnosti , ki zahteva vaše poverilnice.

Zdaj ste uspešno omogočili Nginx Imenike, zaščitene z geslom , vendar se zavedajte, da je hkrati v vašem sistemu nameščen spletni strežnik Apache, zato poskrbite, da ostane onemogočen in ga nikakor ne zaženite, ker lahko vodi do vrata, ki so v sporu z Nginxom.

5. korak: Preusmerite HTTP na HTTPS v Nginxu

21. Če želite, da brskalniki samodejno preusmerijo vse nezaščitene zahteve HTTP na protokol HTTPS, odpirajo in urejajo, ste ne-ssl navidezni gostitelj in v navodilo ime_strežnika dodate naslednje navodilo .

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

Vse nastavitve, predstavljene v tem članku, so narejene v sistemu Arch Linux , ki deluje kot strežnik, vendar je večina njih, zlasti tiste v zvezi s konfiguracijskimi datotekami Nginx, na voljo v večini sistemov Linux z malce razlikami.