Vyhledávání na webu

Vytvářejte virtuální hostitele, adresáře chráněné heslem a certifikáty SSL pomocí „webového serveru Nginx“ v Arch Linuxu


Předchozí článek Arch Linux ‚LEMP‘ se týkal jen základních věcí, od instalace síťových služeb (Nginx, databáze MySQL a PhpMyAdmin) a konfigurace minimálního zabezpečení vyžadovaného pro server MySQL a PhpMyAdmin.

Toto téma úzce souvisí s dřívější instalací LEMP na Arch Linux a provede vás nastavením složitějších konfigurací pro zásobník LEMP, zejména konfigurace webového serveru Nginx, jako je vytváření virtuálních hostitelů , použijte Adresáře chráněné heslem, vytvořte a nakonfigurujte HTTP Secure Sockets Layer, HTTP nezabezpečená přesměrování na HTTPS a také vám představí některé užitečné Bash skripty, které usnadní vám práci s aktivací virtuálních hostitelů a vygenerováním certifikátu a klíčů SSL.

Požadavky

Nainstalujte LEMP s databází MariaDB v Arch Linuxu

Krok 1: Povolte virtuální hostitele na Nginx

Jednou z nejjednodušších metod aktivace virtuálních hostitelů je použití příkazů include v hlavním konfiguračním souboru Nginx, což usnadňuje a zefektivňuje další konfigurace, protože můžete vytvářet jednoduché soubory. pro každého nového hostitele a udržovat hlavní konfigurační soubor čistší.

Tento přístup funguje stejně jako na Apache Web Server, první věc, kterou musíte udělat, je zadat novou cestu URI, kde má Nginx číst direktivy souboru.

1. Otevřete tedy hlavní soubor nginx.conf umístěný v systémové cestě /etc/nginx/ a dole, před poslední složenou závorkou “ }” přidejte cestu, kde budou umístěny budoucí konfigurační soubory virtuálního hostitele.

sudo nano /etc/nginx/nginx.conf

Ve spodní části přidejte následující prohlášení.

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

Tato direktiva říká Nginxu, že by měl číst všechny soubory, které se nacházejí v /etc/nginx/sites-enabled/, které končí příponou .conf.

2. Dalším krokem je vytvoření adresáře sites-enabled a dalšího s názvem sites-available, kam uložíte veškerou konfiguraci virtuálních hostitelů soubory.

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

3. Nyní je čas vytvořit nového virtuálního hostitele. Tento příklad bude používat systémovou IP adresu jako název virtuálního hostitele, takže vytvořte nový soubor s názvem name-ip.conf.

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

Přidejte následující obsah.

## 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, která aktivuje virtuálního hostitele, je příkaz název_serveru pod naslouchajícím portem. Další důležitou direktivou je zde příkaz root, který ukazuje virtuálnímu hostiteli Nginx, aby obsluhoval obsah souboru ze systémové cesty /srv/http/.

4. Posledním krokem je vytvoření adresáře /srv/http/ a zpřístupnění konfigurace souboru name-ip.conf pro čtení Nginx (pomocí symbolický odkaz), poté restartujte démona, aby byly viditelné nové konfigurace.

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

5. Chcete-li to ověřit, nasměrujte svůj prohlížeč na IP adresu systému Arch a měli byste vidět, že webový obsah se liší od http://localhost. Zde jsem přidal malý php skript, který také kontroluje konfigurace FastCGI PHP jako na obrázku níže.

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

<?php
phpinfo();
?>

6. Další metoda, kterou jsem sám vyvinul pro povolení nebo zakázání virtuálních hostitelů na Nginx, je elegantnější a je inspirována skriptem Apache a2eniste.

Chcete-li použít tuto metodu, otevřete editor souborů a vytvořte nový soubor s názvem n2ensite na své cestě $HOME s níže uvedeným obsahem, udělejte jej spustitelným a spusťte jej s právy root a předat jako možnost k vašemu novému názvu virtuálního hostitele bez koncovky .conf (vyplňte zdarma a upravte jej podle svých potřeb).

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

Udělejte jej spustitelný a spusťte jej jako show.

sudo chmod +x n2ensite
sudo ./n2ensite your_virtual_host

7. Chcete-li zakázat virtuální hostitele, vytvořte nový soubor n2dissite s následujícím obsahem a použijte stejná nastavení jako výše.

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. Nyní můžete tyto dva skripty použít k povolení nebo zakázání libovolného virtuálního hostitele, ale pokud jej chcete použít jako příkazy pro celý systém, zkopírujte oba skripty do /usr/local/bin/ a pak jej můžete použít bez zadání cesty.

sudo cp n2ensite n2dissite /usr/local/bin/

Krok 2: Povolte SSL s virtuálními hostiteli na Nginx

SSL (Secure Sockets Layer) je protokol navržený pro šifrování připojení HTTP přes sítě nebo internet, který umožňuje přenos dat přes zabezpečený kanál pomocí symetrických/asymetrických kryptografických klíčů. a je poskytován v balíčku Arch Linux od OpenSSL.

sudo pacman -S openssl

9. Chcete-li povolit připojení HTTPS s Nginx, musíte nejprve vygenerovat klíče virtuálních hostitelů. Pro zjednodušení jsem také vyvinul malé skripty, které automaticky generují kryptografické klíče na cestě k adresáři /etc/nginx/ssl s použitím pojmenování virtuálních hostitelů jako názvů klíčů.

Vytvořte soubor s názvem nginx_gen_ssl a přidejte následující obsah.

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. Po vytvoření skriptu přidejte oprávnění ke spuštění, spusťte jej a zadejte možnosti certifikátu, z nichž nejdůležitější je pole Common Name (zde přidejte oficiální název domény) a ponechte pole Heslo a Nepovinná společnost prázdná.

sudo chmod +x nginx_gen_ssl
sudo ./nginx_gen_ssl

Na konci úlohy generování klíčů se zobrazí seznam všech dostupných klíčů v adresáři Nginx ssl.

Také pokud chcete, aby byl tento skript použit jako systémový příkaz, zkopírujte jej nebo přesuňte do /usr/local/bin/.

sudo mv nginx_gen_ssl  /usr/local/bin

11. Poté, co jsme vygenerovali klíče potřebné pro virtuální hostitele Nginx SSL, je čas skutečně vytvořit konfigurační soubor virtuálního hostitele SSL. Použijte stejnou systémovou IP adresu pro virtuálního hostitele jako výše v direktivě název_serveru, ale mírně změňte název souboru virtuálního hostitele přidáním ssl před .conf, abyste si připomněli, že tento soubor je zkratka pro name-ip SSL Virtual Host.

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

V tomto souboru změňte listen příkaz portu na 443 ssl a poskytněte cesty k souborům s klíčem SSL a certifikátu s cestami vytvořenými dříve, aby vypadaly jako v níže uvedeném úryvku.

## 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. Po vytvoření souboru jej aktivujte pomocí skriptu n2ensite nebo příkazového řádku ln (vytvoří symbolický odkaz na soubor v webech -enabled), poté restartujte démona Nginx a použijte nastavení.

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. Znovu nasměrujte prohlížeč na Arch IP URL, ale tentokrát pomocí protokolu HTTPS – https://192.168.1.33 v mém systému – a měla by se objevit bezpečnostní chyba Nedůvěryhodné připojení (Přidat a potvrdit bezpečnostní výjimku, chcete-li pokračovat na stránce).

Jak nyní vidíte, váš virtuální hostitel Nginx poskytuje stejný obsah jako předchozí hostitel name-ip, ale tentokrát používá zabezpečené připojení HTTP.

Krok 3: Přístup k PhpMyAdmin prostřednictvím virtuálního hostitele

Pokud je na Nginx povolen virtuální hostitel, nemáme již přístup k obsahu cesty http://localhost (localhost obvykle obsluhuje obsah pomocí IP adresy zpětné smyčky nebo systémové IP adresy, pokud není nakonfigurována jinak), protože použili IP systému Arch jako název_serveru, takže se naše cesta k obsahu změnila.

14. Nejjednodušší způsob, jak získat přístup k PhpMyAdmin přes web, je vytvořit symbolický odkaz mezi cestou /usr/share/webapps/phpMyAdmin/ a naši novou definovanou cestu virtuálního hostitele (/srv/http).

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

15. Po provedení výše uvedeného příkazu obnovte stránku a uvidíte novou složku phpMyAdmin, pokud je na virtuálním hostiteli Nginx povolen příkaz autoindex nebo nasměrujte svou adresu URL přímo na Složka PhpMyAdmin https://arch_IP/phpMyAdmin.

16. Pokud chcete dezinfikovat řetězec phpMyAdmin v prohlížeči, upravte soubory virtuálních hostitelů a přidejte následující obsah pod blok serveru.

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

Krok 4: Povolte adresář chráněný heslem na Nginx

Na rozdíl od Apache používá Nginx modul HttpAuthBasic k povolení Adresáře chráněné heslem, ale neposkytuje žádné nástroje pro vytvoření šifrovaného souboru .htpasswd.

17. Chcete-li dosáhnout ochrany heslem adresáře pomocí Nginx na Arch Linuxu, nainstalujte webový server Apache a použijte jeho nástroje ke generování zašifrovaného souboru .htaccess.

sudo pacman -S apache

18. Po instalaci Apache vytvořte nový adresář pod /etc/nginx/ s názvem intuitivně passwd, kde bude uložen a použit soubor .htpasswd Příkaz htpasswd s –c zapněte prvního přidaného uživatele, aby se vygeneroval soubor, a pokud chcete přidat další uživatele, použijte htpasswd bez – c přepínač.

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. Za účelem ochrany name-ip-ssl kořenového adresáře virtuálního hostitele /srv/http/ obsluhovaná cesta se všemi podsložkami a soubory pod nimi přidá následující instrukce do bloku vašeho virtuálního hostitelského serveru pod direktivu root a nasměruje je na absolutní cestu k souboru .htpasswd.

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

20. Po restartování služby Nginx by se měla zobrazit stránka obnovení a vyskakovací okno Vyžadováno ověření, které vyžaduje vaše přihlašovací údaje.

Nyní jste úspěšně povolili Nginx Adresáře chráněné heslem, ale uvědomte si, že ve stejnou dobu je ve vašem systému nainstalován webový server Apache, takže se ujistěte, že zůstane deaktivován a v žádném případě jej nespouštějte, protože může vést k porty v konfliktu s Nginx.

Krok 5: Přesměrujte HTTP na HTTPS na Nginx

21. Pokud chcete, aby prohlížeče automaticky přesměrovávaly všechny nezabezpečené HTTP požadavky na protokol HTTPS otevřený a upravovaný, jste ne-ssl virtuální hostitel a přidejte následující instrukce pod název_serveru.

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

Všechna nastavení uvedená v tomto článku byla provedena v systému Arch Linux, který funguje jako server, ale většina z nich, zejména nastavení týkající se konfiguračních souborů Nginx, je s drobnými rozdíly dostupná na většině systémů Linux.