Weboldal keresés

Hozzon létre virtuális gazdagépeket, jelszóval védett könyvtárakat és SSL-tanúsítványokat az "Nginx Web Server" segítségével az Arch Linuxban


Az előző Arch Linux „LEMP” cikk csak az alapvető dolgokat tárgyalta, a hálózati szolgáltatások telepítésétől (Nginx, MySQL adatbázis és PhpMyAdmin) és a MySQL szerverhez és a PhpMyadminhoz szükséges minimális biztonság konfigurálásáig.

Ez a témakör szigorúan kapcsolódik a LEMP korábbi telepítéséhez Arch Linuxra, és végigvezeti Önt a LEMP-verem bonyolultabb konfigurációinak beállításán, különösen az Nginx webszerver konfigurációk, például a virtuális gazdagépek létrehozásán. , használja a Jelszóval védett könyvtárakat, hozza létre és konfigurálja a HTTP Secure Sockets Layer szolgáltatást, a HTTP nem biztonságos átirányításokat a HTTPS-re, és bemutat néhány hasznos Bash-szkriptet is, amelyek megkönnyíti a virtuális gazdagépek aktiválásának feladatát, és SSL-tanúsítványt és kulcsokat generál.

Követelmények

Telepítse a LEMP-t a MariaDB adatbázissal az Arch Linuxban

1. lépés: Engedélyezze a virtuális gazdagépeket az Nginx-en

A virtuális gazdagépek engedélyezésének egyik legegyszerűbb módja az include utasítások használata a fő Nginx konfigurációs fájlban, ami egyszerűbbé és hatékonyabbá teszi a további konfigurációk munkáját, mivel egyszerű fájlokat hozhat létre. minden új gazdagéphez, és tisztább legyen a fő konfigurációs fájl.

Ez a megközelítés ugyanúgy működik, mint az Apache webszerveren, először meg kell adnia az új URI elérési utat, ahol az Nginxnek be kell olvasnia a fájldirektívákat.

1. Tehát nyissa meg az nginx.conf fő fájlt, amely az /etc/nginx/ rendszerútvonalon és alul, az utolsó zárójel előtt található. }” adja meg azt az elérési utat, ahol a jövőbeni Virtual Host konfigurációs fájlok lesznek.

sudo nano /etc/nginx/nginx.conf

Alul adja hozzá a következő nyilatkozatot.

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

Ez az utasítás azt mondja az Nginxnek, hogy minden olyan fájlt be kell olvasnia, amely a /etc/nginx/sites-enabled/ fájlban található, és amely .conf kiterjesztéssel végződik.

2. A következő lépésben létre kell hozni a webhelyek-engedélyezett könyvtárat és egy másikat, az elérhető webhelyeket, ahol tárolja az összes virtuális gazdagép-konfigurációt. fájlokat.

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

3. Most itt az ideje egy új virtuális gazdagép létrehozásának. Ez a példa a rendszer IP-címét használja virtuális gazdagépnévként, ezért hozzon létre egy új fájlt name-ip.conf néven.

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

Adja hozzá a következő tartalmat.

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

A virtuális gazdagépet aktiváló direktíva a figyelő port alatt található szerver_neve utasítás. Egy másik fontos direktíva itt a root utasítás, amely az Nginx Virtual Host-ot a /srv/http/ rendszerútvonalról való fájltartalom kiszolgálására irányítja.

4. Az utolsó lépés az /srv/http/ könyvtár létrehozása, és a name-ip.conf fájlkonfiguráció elérhetővé tétele az Nginx olvasásához (a szimbolikus hivatkozás), majd indítsa újra a démont az új konfigurációk láthatóvá tételéhez.

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

5. Az ellenőrzéshez mutasson böngészőjében az Arch rendszer IP-címére, és látnia kell, hogy a webtartalom eltér a http://localhost-tól. Itt hozzáadtam egy kis php szkriptet, amely a FastCGI PHP konfigurációkat is ellenőrzi, mint az alábbi képernyőképen.

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

<?php
phpinfo();
?>

6. Egy másik módszer, amelyet magam fejlesztettem ki a Virtual Hosts engedélyezésére vagy letiltására az Nginx rendszeren, egy elegánsabb módszer, és az Apache a2eniste szkript ihlette.

Ennek a módszernek a használatához nyisson meg egy fájlszerkesztőt, és hozzon létre egy új fájlt n2ensite néven a $HOME útvonalon az alábbi tartalommal, tegye végrehajthatóvá, és futtassa root jogosultságokkal és opcióként adja át az új virtuális gazdagép nevét .conf vég nélkül (szabadon kitöltésével módosíthatja az igényeinek megfelelően).

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

Tegye végrehajthatóvá, és futtassa műsorként.

sudo chmod +x n2ensite
sudo ./n2ensite your_virtual_host

7. A Virtual Hosts letiltásához hozzon létre egy új n2dissite fájlt a következő tartalommal, és alkalmazza a fenti beállításokat.

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. Most már használhatja ezt a két szkriptet bármely Virtual Host engedélyezéséhez vagy letiltásához, de ha rendszerszintű parancsként szeretné alkalmazni, csak másolja mindkét szkriptet a /usr/local/bin/< mappába., majd elérési út megadása nélkül használhatja.

sudo cp n2ensite n2dissite /usr/local/bin/

2. lépés: Engedélyezze az SSL-t virtuális gazdagépekkel az Nginx-en

Az SSL (Secure Sockets Layer) egy protokoll, amelyet a HTTP-kapcsolatok titkosítására terveztek hálózaton vagy interneten keresztül, amely lehetővé teszi az adatáramlás biztonságos csatornán történő továbbítását szimmetrikus/aszimmetrikus kriptográfiai kulcsok segítségével. és az Arch Linuxban az OpenSSL csomag biztosítja.

sudo pacman -S openssl

9. A HTTPS-kapcsolatok Nginx-szel való engedélyezéséhez először virtuális gazdagép-kulcsokat kell létrehoznia. Ezenkívül a dolgok egyszerűsítése érdekében kifejlesztettem egy kis szkriptet, amely automatikusan kriptográfiai kulcsokat generál az /etc/nginx/ssl könyvtár elérési útján, kulcsnévként a Virtual Host elnevezést használva.

Hozzon létre egy nginx_gen_ssl nevű fájlt, és adja hozzá a következő tartalmat.

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. A szkript létrehozása után a végrehajtási engedélyek hozzáfűzése után futtassa, és adja meg a Tanúsítvány beállításait, amelyek közül a legfontosabb a Közös név mező (adjon hozzá hivatalos domain nevet) és hagyja üresen a Jelszó és az Opcionális Vállalat mezőket.

sudo chmod +x nginx_gen_ssl
sudo ./nginx_gen_ssl

A kulcsgenerálási feladat végén megjelenik egy lista az összes elérhető kulcsról az Nginx ssl könyvtárban.

Akkor is, ha ezt a szkriptet rendszerparancsként szeretné használni, másolja vagy helyezze át a /usr/local/bin/ mappába.

sudo mv nginx_gen_ssl  /usr/local/bin

11. Miután létrehoztuk az Nginx SSL Virtual Hosthoz szükséges kulcsokat, ideje létrehozni az SSL Virtual Host konfigurációs fájlt. Használja ugyanazt a rendszer IP-címét a Virtual Host számára, mint fent a server_name direktívánál, de kissé módosítsa a Virtual Host fájl nevét úgy, hogy hozzáfűzi az ssl-t a .conf elé, emlékeztetve arra, hogy ez a fájl a név-ip SSL Virtual Host rövidítése.

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

Ebben a fájlban módosítsa a hallgatni port utasítást 443 ssl-re, és adja meg az SSL- és tanúsítványkulcs-fájlok elérési útját a korábban létrehozottakkal, hogy úgy nézzenek ki, mint az alábbi kivonatban.

## 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. Miután a fájl létrejött -enabled könyvtárat), majd indítsa újra az Nginx démont a beállítások alkalmazásához.

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. Ismét irányítsa böngészőjét az Arch IP URL-re, de ezúttal HTTPS protokollt használva – https://192.168.1.33 a rendszeremen- és Nem megbízható kapcsolat biztonsági hibaüzenet jelenik meg (Biztonsági kivétel hozzáadása és megerősítése a további lépésekhez).

Amint most láthatja, az Nginx Virtual Host ugyanazt a tartalmat szolgálja ki, mint az előző name-ip gazdagép, de ezúttal biztonságos HTTP-kapcsolatot használ.

3. lépés: Nyissa meg a PhpMyAdmin programot a Virtual Host segítségével

Ha a Virtual Host engedélyezve van az Nginx-en, akkor többé nem férünk hozzá a http://localhost útvonal tartalmához (a localhost általában loopback IP-címmel vagy rendszer IP-címmel szolgálja ki a tartalmat, ha nincs másként konfigurálva), mert Az Arch rendszer IP-jét használta szerver_névként, így a tartalom elérési útja megváltozott.

14. A legegyszerűbb módszer a PhpMyAdmin eléréséhez az interneten keresztül, ha szimbolikus kapcsolatot hoz létre a /usr/share/webapps/phpMyAdmin/ útvonal között. és az új virtuális gazdagép elérési útja (/srv/http).

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

15. Miután végrehajtotta a fenti parancsot, frissítse az oldalt, és egy új phpMyAdmin mappa jelenik meg, ha az autoindex utasítás engedélyezve van az Nginx Virtual Host-on, vagy ha az URL-címét közvetlenül a címre irányítja. PhpMyAdmin mappa: https://arch_IP/phpMyAdmin.

16. Ha meg szeretné tisztítani a phpMyAdmin karakterláncot a böngészőben, szerkessze a Virtual Hosts fájljait, és adja hozzá a következő tartalmat a szerverblokk alá.

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

4. lépés: Engedélyezze a jelszóval védett könyvtárat az Nginx-en

Az Apache-tól eltérően az Nginx a HttpAuthBasic modult használja a Jelszóval védett könyvtárak engedélyezéséhez, de nem biztosít semmilyen eszközt a titkosított .htpasswd fájl létrehozásához.

17. A címtárjelszavas védelem eléréséhez az Nginx segítségével Arch Linux rendszeren telepítse az Apache webszervert, és használja annak eszközeit egy titkosított .htaccess fájl létrehozásához.

sudo pacman -S apache

18. Az Apache telepítése után hozzon létre egy új könyvtárat az /etc/nginx/ alatt intuitívan passwd néven, ahol a .htpasswd fájl tárolódik és használható A htpasswd parancs –c kapcsolóval kapcsolja be az első hozzáadott felhasználót a fájl létrehozásához, majd ha további felhasználókat szeretne hozzáadni, használja a htpasswd parancsot – nélkül. c kapcsolót.

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. A name-ip-ssl Virtual Host root /srv/http/ elérési útja az összes almappájával és alatta lévő fájljaival együtt hozzáadja a következő utasításokat a Virtual Host szerver blokkjába a root direktíva alatt, és az abszolút .htpasswd fájl elérési útjára irányítja.

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

20. Az Nginx szolgáltatás újraindítása után frissítse az oldalt, és egy Authentication Required (Hitelesítés szükséges) előugró ablaknak kell megjelennie, amely megköveteli az Ön hitelesítő adatait.

Sikeresen engedélyezte az Nginx Jelszóval védett könyvtárakat, de ügyeljen arra, hogy az Apache webszerver telepítésével egy időben győződjön meg arról, hogy az letiltva marad, és semmiképpen ne indítsa el, mert portok ütköznek az Nginx-szel.

5. lépés: A HTTP átirányítása HTTPS-re az Nginx rendszeren

21. Ha azt szeretné, hogy a böngészők automatikusan átirányítsák az összes nem biztonságos HTTP-kérést a HTTPS-protokoll megnyitásához és szerkesztéséhez, Ön nem ssl Virtual Host, és adja hozzá a következő utasítást a alatt >server_name direktíva.

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

Az ebben a cikkben bemutatott összes beállítás egy Arch Linux rendszerben történt, amely szerverként működik, de legtöbbjük, különösen az Nginx konfigurációs fájljaival kapcsolatos, kis eltérésekkel elérhető a legtöbb Linux rendszeren.