Sukurkite virtualius pagrindinius kompiuterius, apsaugokite slaptažodžiu katalogus ir SSL sertifikatus naudodami „Nginx Web Server“ „Arch Linux“


Ankstesnis „Arch Linux“ „LEMP“ straipsnis apėmė pagrindinius dalykus, pradedant tinklo paslaugų (Nginx, MySQL duomenų bazės ir „PhpMyAdmin“) diegimu ir minimalios „MySQL“ serverio ir „PhpMyadmin“ saugos konfigūravimu.

Ši tema yra griežtai susijusi su ankstesniu LEMP diegimu „Arch Linux“ ir padės nustatyti sudėtingesnes LEMP dėklo konfigūracijas, ypač Nginx žiniatinklio serverio konfigūracijas, pvz., sukurti virtualius pagrindinius kompiuterius. , naudokite slaptažodžiu apsaugotus katalogus, kurkite ir sukonfigūruokite HTTP Secure Sockets Layer, HTTP nesaugius peradresavimus į HTTPS ir taip pat pateiks keletą naudingų Bash scenarijų, kurie palengvins virtualių kompiuterių aktyvinimo darbą ir sugeneruos SSL sertifikatą ir raktus.

Reikalavimai

Įdiekite LEMP su MariaDB duomenų baze Arch Linux

1 veiksmas: įgalinkite virtualius pagrindinius kompiuterius „Nginx“.

Vienas iš paprasčiausių būdų įjungti Virtual Hosts yra pagrindiniame Nginx konfigūracijos faile naudoti teiginius include, todėl tolesnių konfigūracijų darbas tampa paprastesnis ir efektyvesnis, nes galite kurti paprastus failus. kiekvienam naujam pagrindiniam kompiuteriui ir švaresnį pagrindinį konfigūracijos failą.

Šis metodas veikia taip pat, kaip ir Apache žiniatinklio serveryje. Pirmas dalykas, kurį turite padaryti, yra nurodyti naują URI kelią, kuriame Nginx turėtų skaityti failų direktyvas.

1. Taigi atidarykite nginx.conf pagrindinį failą, esantį /etc/nginx/ sistemos kelyje ir apačioje, prieš paskutinį lenktą skliaustą “ }“ pridėkite kelią, kuriame bus būsimi virtualiosios prieglobos konfigūracijos failai.

sudo nano /etc/nginx/nginx.conf

Apačioje pridėkite šį teiginį.

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

Ši direktyva nurodo „Nginx“ nuskaityti visus failus, esančius /etc/nginx/sites-enabled/, kuris baigiasi plėtiniu .conf.

2. Kitas veiksmas – sukurti katalogą svetainės įgalintos ir kitą katalogą, vadinamą galimos svetainės, kuriame saugosite visą savo virtualiųjų prieglobų konfigūraciją failus.

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

3. Dabar laikas sukurti naują virtualųjį prieglobą. Šiame pavyzdyje sistemos IP adresas bus naudojamas kaip virtualaus pagrindinio kompiuterio pavadinimas, todėl sukurkite naują failą pavadinimu name-ip.conf.

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

Pridėkite toliau nurodytą turinį.

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

Direktyva, kuri suaktyvina virtualųjį pagrindinį kompiuterį, yra serverio_pavadinimas, esantis klausymo prievade. Be to, dar viena svarbi direktyva yra root teiginys, nurodantis, kad „Nginx Virtual Host“ teiktų failo turinį iš /srv/http/ sistemos kelio.

4. Paskutinis veiksmas yra sukurti /srv/http/ katalogą ir padaryti name-ip.conf failo konfigūraciją prieinamą Nginx skaitymui (naudojant simbolinė nuoroda), tada iš naujo paleiskite demoną, kad būtų matomos naujos konfigūracijos.

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

5. Norėdami tai patvirtinti, nukreipkite naršyklę į Arch sistemos IP adresą ir turėtumėte pamatyti, kad žiniatinklio turinys skiriasi nuo http://localhost. Čia pridėjau nedidelį php scenarijų, kuris taip pat tikrina FastCGI PHP konfigūracijas, kaip parodyta toliau pateiktoje ekrano kopijoje.

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

<?php
phpinfo();
?>

6. Kitas metodas, kurį pats sukūriau norėdamas įjungti arba išjungti virtualiuosius pagrindinius kompiuterius Nginx, yra elegantiškesnis ir įkvėptas Apache a2eniste scenarijaus.

Norėdami naudoti šį metodą, atidarykite failų rengyklę ir sukurkite naują failą, pavadintą n2ensite, savo $HOME kelyje su toliau pateiktu turiniu, padarykite jį vykdomąjį, paleiskite jį su root teisėmis. ir pereikite kaip parinktį į naują virtualiosios prieglobos pavadinimą be pabaigos .conf (užpildykite nemokamai, kad pakeistumėte jį pagal savo poreikius).

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

Padarykite jį vykdomąjį ir paleiskite jį kaip pasirodymą.

sudo chmod +x n2ensite
sudo ./n2ensite your_virtual_host

7. Norėdami išjungti virtualiuosius pagrindinius kompiuterius, sukurkite naują n2dissite failą su tokiu turiniu ir pritaikykite tuos pačius nustatymus, kaip nurodyta anksčiau.

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. Dabar galite naudoti šiuos du scenarijus, kad įjungtumėte arba išjungtumėte bet kurį virtualų pagrindinį kompiuterį, bet jei norite juos taikyti kaip visos sistemos komandas, tiesiog nukopijuokite abu scenarijus į /usr/local/bin/ ir galite jį naudoti nenurodydami kelio.

sudo cp n2ensite n2dissite /usr/local/bin/

2 veiksmas: „Nginx“ įgalinkite SSL naudodami virtualius pagrindinius kompiuterius

SSL (Secure Sockets Layer) – tai protokolas, skirtas HTTP ryšiams užšifruoti tinkluose arba internetu, todėl duomenų srautas perduodamas saugiu kanalu naudojant simetrinius/asimetrinius kriptografijos raktus. ir yra pateikta Arch Linux naudojant OpenSSL paketą.

sudo pacman -S openssl

9. Norėdami įgalinti HTTPS ryšius su Nginx, pirmiausia turite sugeneruoti virtualių kompiuterių raktus. Be to, norėdamas supaprastinti dalykus, sukūriau nedidelį scenarijų, kuris automatiškai generuoja kriptografinius raktus /etc/nginx/ssl katalogo kelyje, kaip raktų pavadinimus naudodamas virtualiosios prieglobos įvardijimą.

Sukurkite failą pavadinimu nginx_gen_ssl ir pridėkite toliau nurodytą turinį.

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. Sukūrę scenarijų pridėkite vykdymo leidimus, paleiskite jį ir pateikite sertifikato parinktis, kurių svarbiausia yra laukas Bendras pavadinimas (čia pridėkite oficialų domeno pavadinimą) ir Palikite slaptažodžio ir pasirenkamos įmonės laukus tuščius.

sudo chmod +x nginx_gen_ssl
sudo ./nginx_gen_ssl

Raktų generavimo užduoties pabaigoje bus rodomas sąrašas su visais galimais raktais, esančiais Nginx ssl kataloge.

Taip pat jei norite, kad šis scenarijus būtų naudojamas kaip sistemos komanda, nukopijuokite arba perkelkite jį į /usr/local/bin/.

sudo mv nginx_gen_ssl  /usr/local/bin

11. Kai sugeneravome raktus, reikalingus Nginx SSL virtualiajai prieglobai, laikas iš tikrųjų sukurti SSL virtualiosios prieglobos konfigūracijos failą. Naudokite tą patį sistemos IP adresą virtualiajai prieglobai, kaip nurodyta aukščiau direktyvoje serverio_pavadinimas, bet šiek tiek pakeiskite virtualiosios prieglobos failo pavadinimą pridėdami ssl prieš .conf, kad primintų, jog šis failas reiškia vardas-ip SSL virtualioji priegloba.

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

Šiame faile pakeiskite klausykite prievado teiginį į 443 ssl ir pateikite SSL ir sertifikato raktų failų kelius su anksčiau sukurtais, kad jie atrodytų toliau pateiktoje ištraukoje.

## 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. Sukūrę failą naudokite scenarijų n2ensite arba ln komandų eilutę, kad jį suaktyvintumėte (sukuria failo simbolinę nuorodą svetainėse -įjungta katalogą), tada iš naujo paleiskite Nginx demoną, kad pritaikytumėte nustatymus.

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. Vėl nukreipkite naršyklę į Arch IP URL, bet šį kartą naudokite HTTPS protokolą – https://192.168.1.33 mano sistemoje ir turėtų pasirodyti saugos klaida Nepatikimas ryšys ( Pridėti ir patvirtinti saugos išimtį, jei norite eiti toliau puslapyje).

Kaip dabar matote, jūsų „Nginx“ virtualioji priegloba aptarnauja tą patį turinį kaip ir ankstesnė name-ip priegloba, tačiau šį kartą naudoja saugų HTTP ryšį.

3 veiksmas: pasiekite „PhpMyAdmin“ per „Virtual Host“.

Jei „Nginx“ įgalintas „Virtual Host“, nebeturime prieigos prie http://localhost kelio turinio (localhost paprastai teikia turinį naudodamas atgalinio ryšio IP adresą arba sistemos IP adresą, jei jis nesukonfigūruotas kitaip), nes turime naudojo Arch sistemos IP kaip serverio_pavadinimą, todėl mūsų turinio kelias pasikeitė.

14. Paprasčiausias būdas pasiekti PhpMyAdmin per žiniatinklį yra sukurti simbolinę nuorodą tarp /usr/share/webapps/phpMyAdmin/ kelio ir mūsų naujas apibrėžtas virtualios prieglobos kelias (/srv/http).

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

15. Įvykdę aukščiau nurodytą komandą, atnaujinkite puslapį ir pamatysite naują aplanką phpMyAdmin, jei „Nginx Virtual Host“ įgalintas autoindex sakinys arba nukreipkite savo URL tiesiai į PhpMyAdmin aplankas https://arch_IP/phpMyAdmin.

16. Jei norite išvalyti phpMyAdmin eilutę naršyklėje, redaguokite savo virtualių prieglobų failus ir pridėkite toliau nurodytą turinį prie serverio bloko.

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

4 veiksmas: „Nginx“ įjunkite slaptažodžiu apsaugotą katalogą

Skirtingai nuo „Apache“, „Nginx“ naudoja HttpAuthBasic modulį, kad įgalintų slaptažodžiu apsaugotus katalogus, tačiau nepateikia jokių įrankių, leidžiančių sukurti šifruotą .htpasswd failą.

17. Norėdami pasiekti katalogo slaptažodžio apsaugą naudodami „Nginx“ sistemoje „Arch Linux“, įdiekite „Apache“ žiniatinklio serverį ir naudokite jo įrankius, kad sukurtumėte užšifruotą .htaccess failą.

sudo pacman -S apache

18. Įdiegę Apache sukurkite naują katalogą /etc/nginx/, pavadintą intuityviai passwd, kuriame bus saugomas ir naudojamas failas .htpasswd Komanda htpasswd su jungikliu –c įjunkite pirmą pridėtą naudotoją, kad sukurtų failą, tada, jei norite pridėti daugiau naudotojų, naudokite htpasswd be – c jungiklis.

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. Siekiant apsaugoti name-ip-ssl virtualiosios prieglobos šaknį /srv/http/ pateiktas kelias su visais poaplankiais ir failais, esančiais apačioje jis prideda šias instrukcijas virtualiojo pagrindinio kompiuterio serverio bloke pagal šakninę direktyvą ir nukreipia jį į absoliutų .htpasswd failo kelią.

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

20. Iš naujo paleidę „Nginx“ paslaugą, atnaujinkite puslapį ir Reikalingas autentifikavimas turėtų pasirodyti iššokantis langas, reikalaujantis jūsų kredencialų.

Dabar sėkmingai įgalinote „Nginx“ slaptažodžiu apsaugotus katalogus, tačiau atminkite, kad tuo pačiu metu jūsų sistemoje yra įdiegtas „Apache“ žiniatinklio serveris, todėl įsitikinkite, kad jis lieka išjungtas ir jokiu būdu jo nepaleiskite, nes gali prievadai, prieštaraujantys Nginx.

5 veiksmas: peradresuokite HTTP į HTTPS „Nginx“.

21. Jei norite, kad naršyklės automatiškai peradresuotų visas nesaugias HTTP užklausas į HTTPS protokolą, atidarykite ir redaguokite, esate ne ssl virtualioji priegloba ir prie pridėkite šią instrukciją >serverio_pavadinimas.

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

Visi šiame straipsnyje pateikti nustatymai atlikti naudojant Arch Linux sistemą, kuri veikia kaip serveris, tačiau dauguma jų, ypač susijusių su Nginx konfigūracijos failais, yra prieinami daugumoje Linux sistemų su nedideliais skirtumais.