Looge virtuaalhostid, paroolikaitsekataloogid ja SSL-sertifikaadid, kasutades Arch Linuxis käsku "Nginx Web Server"


Eelmine Arch Linuxi ‘LEMP’ artikkel hõlmas just põhilisi asju alates võrguteenuste (Nginx, MySQL andmebaas ja PhpMyAdmin) installimisest ning MySQL-i serveri ja PhpMyadmini jaoks minimaalse turvalisuse seadistamisest.

See teema on rangelt seotud endise LEMP-i installimisega Arch Linuxi ja juhendab teid keerukamate konfiguratsioonide seadistamisel LEMP-i virnale, eriti Nginx veebiserveri konfiguratsioonidele, näiteks virtuaalsete hostide loomine , kasutage parooliga kaitstud katalooge , looge ja konfigureerige HTTP turvaliste soklite kiht , HTTP ebaturvalised ümbersuunamised saidile HTTPS ja esitavad teile ka kasulikke Bashi skripte, mis hõlbustab virtuaalsete hostide aktiveerimist ja genereerib SSL-i sertifikaadi ja võtmed .

Installige Arch Linuxi LEMP koos MariaDB andmebaasiga

1. samm: lubage virtuaalsed hostid Nginxis

Üks lihtsamaid meetodeid Virtuaalsete hostide lubamiseks on lausete kaasamine kasutamine Nginxi peamises konfiguratsioonifailis, mis muudab edasiste konfiguratsioonide töö lihtsamaks ja tõhusamaks, kuna saate luua lihtsaid faile iga uue masina jaoks ja hoidke peamist konfiguratsioonifaili puhtamana.

See lähenemisviis toimib samamoodi nagu Apache veebiserveris , kõigepealt peate määrama uue URI tee, kus Nginx peaks failidirektiive lugema.

1. Niisiis, avage nginx.conf põhifail, mis asub süsteemiteel /etc/nginx/ ja allosas, enne viimast lokkisulgu „} ”Lisage tee, kus tulevased virtuaalse hosti konfiguratsioonifailid asuvad.

$ sudo nano /etc/nginx/nginx.conf

Allosas lisage järgmine lause.

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

See direktiiv ütleb Nginxile, et see peaks lugema kõiki faile, mis on leitud failist /etc/nginx/sites-enabled/ ja mis lõpevad laiendiga .conf .

2. Järgmine samm on luua saitidega lubatud kataloog ja veel üks nimega saidid saadaval , kuhu salvestate kõik oma virtuaalsete hostide konfiguratsioonifailid.

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

3. Nüüd on aeg luua uus virtuaalne host. Selles näites kasutatakse virtuaalse hostinimena süsteemi IP-aadressi, seega looge uus fail nimega name-ip.conf .

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

Lisage järgmine sisu.

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

Virtuaalhosti aktiveeriv käsk on kuulamise pordi all lause server_name . Veel üks oluline direktiiv on siin juur lause, mis osutab Nginx Virtual Hostile failide sisu serveerimiseks süsteemist /srv/http/.

4. Viimane samm on luua kataloog /srv/http/ ja muuta faili name-ip.conf konfiguratsioon Nginxi lugemiseks kättesaadavaks (kasutades sümboolset linki), seejärel taaskäivitage deemon uute konfiguratsioonide nähtavaks muutmiseks.

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

5. Selle kinnitamiseks suunake brauser Archi süsteemi IP-aadressile ja peaksite nägema, et veebisisu erineb http:// localhost -ist. Siin olen lisanud väikese php-skripti, mis kontrollib ka FastCGI PHP konfiguratsioone nagu allpool oleval ekraanipildil.

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

<?php
phpinfo();
?>

6. Teine meetod, mille olen ise välja töötanud virtuaalsete hostide lubamiseks või keelamiseks Nginxis, on elegantsem ja see on inspireeritud Apache a2eniste skriptist.

Selle meetodi kasutamiseks avage failiredaktor ja looge $HOME teele alloleva sisuga uus fail nimega n2ensite , muutke see käivitatavaks ja käivitage juurõigustega ja edastage võimalusena uuele virtuaalse hostinimele ilma .conf lõppemiseta (täitke tasuta, et seda vastavalt teie vajadustele muuta).

$ 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

Tehke see käivitatavaks ja käivitage see näitusena.

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

7. Virtuaalsete hostide keelamiseks looge uus järgmise sisuga fail n2dissite ja rakendage samu seadeid nagu eespool.

$ 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. Nüüd saate selle kahe skripti abil mis tahes virtuaalse hosti lubada või keelata, kuid kui soovite seda rakendada kogu süsteemi hõlmavate käsudena, kopeerige mõlemad skriptid lihtsalt saidile /usr/local/bin/ ja siis saate kasutage seda ilma teed määramata.

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

2. samm: lubage SSL virtuaalsete hostidega Nginxis

SSL ( Secure Sockets Layer ) on protokoll, mis on ette nähtud HTTP-ühenduste krüptimiseks võrkude või Interneti kaudu, mis muudab andmete voo edastamise turvalise kanali kaudu sümmeetriliste/asümmeetriliste krüptograafiavõtmete abil ja selle pakub Arch Linuxis OpenSSL pakett.

$ sudo pacman -S openssl

9. HTTPS-ühenduse lubamiseks Nginxiga peate esmalt looma virtuaalsete hostide võtmed. Asjade lihtsustamiseks olen välja töötanud ka väikese skripti, mis genereerib automaatselt krüptovõtmed kataloogi /etc/nginx/ssl kataloogile, kasutades võtmete nimedena virtuaalse hosti nimetamist.

Looge fail nimega nginx_gen_ssl ja lisage järgmine sisu.

$ 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. Pärast skripti loomist lisage täitmisõigused, käivitage see ja esitage oma sertifikaadi valikud, millest kõige olulisem on väli Tavaline nimi (siia lisage ametlik domeeninimi) ja jätke väljad Parool ja Valikuline ettevõte tühjaks .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

Klahvide genereerimise lõpus kuvatakse loetelu kõigi saadaolevate võtmetega Nginx ssl kataloogi all.

Samuti, kui soovite, et seda skripti kasutatakse süsteemi käsuna, kopeerige või teisaldage see kausta /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Kui oleme Nginx SSL Virtual Host jaoks vajalikud võtmed genereerinud, on aeg tegelikult luua SSL Virtual Host konfiguratsioonifail. Kasutage virtuaalse hosti jaoks sama süsteemi IP-aadressi, mis ülalpool direktiivis serveri_nimi , kuid muutke veidi virtuaalse hosti failinime, lisades ssl enne .conf , et teile meelde tuletada, et see fail tähistab name-ip SSL-i virtuaalserverit.

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

Muutke sellel failil kuulake pordi avaldust väärtusele 443 ssl ja pakkuge SSL-i ja sertifikaadi võtmefailide teed varem loodud teedega, nagu väljavõte allpool välja näeb.

## 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. Pärast faili loomist kasutage selle aktiveerimiseks skripti n2ensite või käsurida ln (loob faili sümboolse lingi kataloogis saidid lubatud ) ), seejärel taaskäivitage seadete rakendamiseks Nginxi deemon.

$ 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. Suunake oma brauser uuesti aadressile Arch IP URL , kuid seekord kasutage HTTPS-protokolli - https://192.168.1.33 minu süsteemis - ja Connection Untrusted peaks ilmuma turbeviga (lehel edasi liikumiseks lisage ja kinnitage turvaerand )

Nagu nüüd näete, pakub teie Nginxi virtuaalne host sama sisu nagu eelmine name-ip host, kuid seekord HTTP turvalist ühendust kasutades.

3. samm: pääsete PhpMyAdminile juurde virtuaalse hosti kaudu

Kui virtuaalne host on Nginxis lubatud, pole meil enam juurdepääsu teenuse http:// localhost sisule (localhost teenindab sisu tavaliselt loopback IP-aadressi või süsteemi IP-aadressi abil, kui pole teisiti konfigureeritud), kuna meil on kasutas Archi süsteemi IP-d kui serveri_nimi , nii et meie sisutee on muutunud.

14. Lihtsaim viis veebi kaudu juurdepääsu saamiseks veebisaidile PhpMyAdmin on luua sümboliline link /usr/share/webapps/phpMyAdmin/ ja meie uue määratletud virtuaalse hosti tee vahele. (/srv/http ).

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

15. Pärast ülaltoodud käsu käivitamist värskendage oma lehte ja näete uue kausta phpMyAdmin ilmumist, kui autoindex lause on Nginxi virtuaalses hostis lubatud või suunate oma URL-i otse kausta PhpMyAdmin https:/arch_IP/phpMyAdmin .

16. Kui soovite brauseris phpMyAdmini stringi puhastada, muutke oma virtuaalsete hostide faile ja lisage järgmine sisu serveri blokeeringu alla.

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

4. samm: lubage Nginxis parooliga kaitstud kataloog

Erinevalt Apache'ist kasutab Nginx parooliga kaitstud kataloogide lubamiseks moodulit HttpAuthBasic , kuid ei paku mingeid tööriistu krüptitud .htpasswd faili loomiseks.

17. Arch Linuxis kataloogi Nginx abil kataloogi paroolikaitse saavutamiseks installige Apache veebiserver ja kasutage selle tööriistu krüptitud .htaccess faili loomiseks.

$ sudo pacman -S apache

18. Pärast Apache installimist looge jaotises /etc/nginx/ uus kataloog nimega intuitiivselt passwd, kuhu salvestatakse fail .htpasswd , ja kasutage htpasswd käsk –c abil lülitab faili loomiseks sisse esimese kasutaja, seejärel kui soovite lisada rohkem kasutajaid, kasutage htpasswd ilma lülitita –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. name-ip-ssl kaitsmiseks lisage virtuaalse hostijuure /srv/http/ serveeritud tee koos kõigi selle alamkaustade ja failidega allpool olevad juhised Virtuaalhostiserver blokeerib juurdirektiivi alusel ja osutab selle absoluutsele .htpasswd failitee.

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

20. Pärast Nginxi teenuse taaskäivitamist värskendage lehte ja peaks ilmuma teie mandaate nõudev hüpik Nõutav autentimine .

Nüüd olete Nginxi Parooliga kaitstud kataloogid edukalt lubanud, kuid pidage meeles, et samal ajal kui teie süsteemi on installitud Apache veebiserver, veenduge, et see püsiks keelatud ja mingil juhul ärge käivitage seda, kuna see võib põhjustada Nginxiga vastuolus olevad sadamad.

5. samm: suunake HTTP ümber HTTPS-ile Nginxis

21. Kui soovite, et brauserid suunaksid kõik ebaturvalised HTTP-päringud automaatselt ümber HTTPS-protokolli, avage ja muutke oma mitte-ssl virtuaalset hostit ja lisage järgmine käsk serveri_nimi alla .

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

Kõik selles artiklis esitatud sätted on tehtud serverina toimiva süsteemi Arch Linux all, kuid enamik neist, eriti Nginxi konfiguratsioonifailidega seotud seaded, on mõningate erinevustega saadaval enamikus Linuxi süsteemides.