Izveidojiet virtuālos uzņēmējus, aizsargājiet direktorijus ar paroli un SSL sertifikātus, izmantojot Arch Ninsx Web Server


Iepriekšējais Arch Linux ‘LEMP’ raksts tikai aptvēra pamata lietas, sākot no tīkla pakalpojumu instalēšanas (Nginx, MySQL datu bāze un PhpMyAdmin) un konfigurējot minimālu drošību, kas nepieciešama MySQL serverim un PhpMyadmin.

Šī tēma ir cieši saistīta ar iepriekšējo LEMP instalēšanu Arch Linux un palīdzēs jums iestatīt sarežģītākas LEMP kaudzes konfigurācijas, it īpaši Nginx tīmekļa servera konfigurācijas, piemēram, Virtuālo saimnieku izveidi , izmantojiet Ar paroli aizsargātus direktorijus , izveidojiet un konfigurējiet HTTP drošo ligzdu slāni , HTTP nedrošie novirzīšanas gadījumi uz HTTPS un parādīs arī dažus noderīgus Bash skriptus, atvieglos virtuālo saimnieku aktivizēšanas darbu un ģenerēs SSL sertifikātu un atslēgas .

Arch Linux instalējiet LEMP ar MariaDB datu bāzi

1. darbība: iespējojiet virtuālos resursdatorus vietnē Nginx

Viena no vienkāršākajām metodēm, lai iespējotu virtuālos resursdatorus , ir iekļaut paziņojumu izmantošana galvenajā Nginx konfigurācijas failā, kas padara turpmāko konfigurāciju darbu vienkāršāku un efektīvāku, jo jūs varat izveidot vienkāršus failus katram galvenajam resursdatoram un saglabājiet galveno konfigurācijas failu tīrāku.

Šī pieeja darbojas tāpat kā Apache tīmekļa serverī , vispirms jums jānorāda jaunais URI ceļš, kur Nginx vajadzētu lasīt failu direktīvas.

1. Tātad pirms pēdējās cirtainās iekavas “} nginx.conf , kas atrodas /etc/nginx/ sistēmas ceļā un apakšā. > ”Pievienojiet ceļu, kur atradīsies nākamie virtuālā resursdatora konfigurācijas faili.

$ sudo nano /etc/nginx/nginx.conf

Apakšā pievienojiet šādu paziņojumu.

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

Šī direktīva norāda Nginx, ka tai jālasa visi faili, kas atrodami /etc/nginx/sites-enabled/, kas beidzas ar paplašinājumu .conf .

2. Nākamais solis ir izveidot direktoriju ar vietnēm iespējotu un vēl vienu, ko sauc par pieejamām vietnēm , kur jūs glabājat visus savus virtuālo saimnieku konfigurācijas failus.

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

3. Tagad ir pienācis laiks izveidot jaunu virtuālo resursdatoru. Šajā piemērā sistēmas IP adrese tiks izmantota kā virtuālā resursdatora nosaukums, tāpēc izveidojiet jaunu failu ar nosaukumu name-ip.conf .

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

Pievienojiet šo saturu.

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

Direktīva, kas aktivizē virtuālo resursdatoru, ir paziņojums servera_nosaukums zem klausīšanās porta. Vēl viena svarīga direktīva šeit ir saknes paziņojums, kas norāda Nginx virtuālajam resursdatoram kalpot failu saturam no /srv/http/ sistēmas ceļa.

4. Pēdējais solis ir izveidot direktoriju /srv/http/ un padarīt faila name-ip.conf konfigurāciju pieejamu Nginx lasīšanai (izmantojot simbolisku saiti), pēc tam restartējiet dēmonu lai padarītu redzamas jaunas konfigurācijas.

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

5. Lai to pārbaudītu, norādiet pārlūkprogrammā uz Arch sistēmas IP adresi, un jums vajadzētu redzēt, ka tīmekļa saturs atšķiras no http:// localhost . Šeit esmu pievienojis nelielu php skriptu, kas pārbauda arī FastCGI PHP konfigurācijas, piemēram, zemāk redzamajā ekrānuzņēmumā.

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

<?php
phpinfo();
?>

6. Cita metode, ko esmu pats izstrādājis, lai iespējotu vai atspējotu virtuālos resursdatorus Nginx, ir daudz elegantāka, un tā ir iedvesmojusies no Apache a2eniste skripta.

Lai izmantotu šo metodi, atveriet failu redaktoru un savā $HOME ceļā izveidojiet jaunu failu ar nosaukumu n2ensite ar zemāk redzamo saturu, padariet to izpildāmu, palaidiet to ar root tiesībām un kā opciju nododiet jaunajam virtuālā resursdatora nosaukumam bez .conf beigām (aizpildiet brīvi, lai mainītu to atbilstoši savām vajadzībām).

$ 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

Padariet to izpildāmu un palaidiet kā šovu.

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

7. Lai atspējotu virtuālos saimniekus, izveidojiet jaunu failu n2dissite ar šādu saturu un lietojiet tos pašus iestatījumus kā iepriekš.

$ 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. Tagad jūs varat izmantot šos divus skriptus, lai iespējotu vai atspējotu jebkuru virtuālo resursdatoru, taču, ja vēlaties to izmantot kā visas sistēmas komandas, vienkārši kopējiet abus skriptus uz /usr/local/bin/ un pēc tam varat izmantojiet to, nenorādot ceļu.

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

2. solis: Nginx iespējojiet SSL ar virtuālajiem saimniekiem

SSL ( Secure Sockets Layer ) ir protokols, kas paredzēts HTTP savienojumu šifrēšanai tīklos vai internetā, kas liek datu plūsmu pārsūtīt pa drošu kanālu, izmantojot simetriskas/asimetriskas kriptogrāfijas atslēgas. un to nodrošina Arch Linux ar OpenSSL pakotni.

$ sudo pacman -S openssl

9. Lai iespējotu HTTPS savienojumus ar Nginx, vispirms jādomā par virtuālo saimnieku atslēgu ģenerēšanu. Turklāt, lai vienkāršotu lietas, esmu izstrādājis nelielu skriptu, kas automātiski ģenerē kriptogrāfiskās atslēgas direktorijas ceļā /etc/nginx/ssl , kā atslēgas nosaukumus izmantojot virtuālā resursdatora nosaukumus.

Izveidojiet failu ar nosaukumu nginx_gen_ssl un pievienojiet šādu saturu.

$ 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. Kad skripts ir izveidots, pievienojiet izpildes atļaujas, palaidiet to un norādiet savas sertifikāta opcijas, vissvarīgākais ir lauks Kopējais nosaukums (šeit pievienojiet oficiālo domēna nosaukumu) un atstājiet laukus Parole un Izvēles uzņēmums tukšus. .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

Atslēgu ģenerēšanas uzdevuma beigās tiks parādīts saraksts ar visiem pieejamajiem taustiņiem Nginx ssl direktorijā.

Ja vēlaties, lai šis skripts tiktu izmantots kā sistēmas komanda, kopējiet vai pārvietojiet to uz vietni /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Kad esam izveidojuši atslēgas, kas nepieciešamas Nginx SSL Virtual Host, ir pienācis laiks faktiski izveidot SSL Virtual Host konfigurācijas failu. Izmantojiet to pašu sistēmas IP adresi virtuālajam resursdatoram, kas iepriekš norādīts servera_nosaukums direktīvā, taču nedaudz mainiet virtuālā resursdatora faila nosaukumu, pievienojot ssl pirms .conf , lai atgādinātu, ka šis fails nozīmē name-ip SSL virtuālais resursdators.

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

Šajā failā mainiet noklausīties porta paziņojumu uz 443 ssl un norādiet SSL un sertifikāta atslēgu failu ceļus ar tiem, kas izveidoti iepriekš, lai izskatās šādi zemāk esošajā fragmentā.

## 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ēc faila izveides izmantojiet skriptu n2ensite vai komandrindu ln , lai to aktivizētu (izveido faila simbolisko saiti direktorijā vietnēm iespējots ), pēc tam restartējiet Nginx dēmonu, lai lietotu iestatījumus.

$ 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. Atkal novirziet pārlūkprogrammu uz Arch IP URL , bet šoreiz izmantojot HTTPS protokolu - https://192.168.1.33 manā sistēmā - un Savienojums neuzticams Parādās drošības kļūda ( lai pievienotu un apstiprinātu drošības izņēmumu , lai pārietu tālāk lapā).

Kā jūs tagad redzat, jūsu Nginx virtuālais resursdators apkalpo to pašu saturu kā iepriekšējais name-ip resursdators, taču šoreiz, izmantojot HTTP drošu savienojumu.

3. darbība. Piekļūstiet vietnei PhpMyAdmin, izmantojot virtuālo resursdatoru

Ja Nginx ir iespējots virtuālais resursdators, mums vairs nav piekļuves ceļa http:// localhost saturam (localhost parasti apkalpo saturu, izmantojot atgriezeniskās saites IP adresi vai sistēmas IP adresi, ja tā nav konfigurēta citādi), jo mums ir izmantoja Arch sistēmas IP kā servera_nosaukums , tāpēc mūsu satura ceļš ir mainījies.

14. Vienkāršākā metode, kā piekļūt tīmekļa vietnei PhpMyAdmin , ir izveidot simbolisku saiti starp /usr/share/webapps/phpMyAdmin/ ceļu un mūsu jauno definēto virtuālā resursdatora ceļu (/srv/http ).

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

15. Pēc tam, kad esat izpildījis iepriekš minēto komandu, atsvaidziniet lapu un redzēsiet jaunu mapi phpMyAdmin, ja Nginx virtuālajā resursdatorā ir iespējots autoindex priekšraksts vai norādiet savu URL tieši uz mapi PhpMyAdmin https:/arch_IP/phpMyAdmin .

16. Ja vēlaties iztīrīt phpMyAdmin virkni pārlūkprogrammā, rediģējiet savus virtuālo saimnieku failus un pievienojiet šādu saturu servera blokā.

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

4. solis: Nginx iespējojiet direktoriju, kas aizsargāts ar paroli

Atšķirībā no Apache, Nginx izmanto moduli HttpAuthBasic , lai iespējotu direktorijus, kas aizsargāti ar paroli , taču nenodrošina nekādus rīkus, lai izveidotu šifrētu failu .htpasswd .

17. Lai sasniegtu direktoriju paroles aizsardzību ar Nginx uz Arch Linux, instalējiet Apache tīmekļa serveri un izmantojiet tā rīkus, lai ģenerētu šifrētu .htaccess failu.

$ sudo pacman -S apache

18. Pēc Apache instalēšanas izveidojiet jaunu direktoriju sadaļā /etc/nginx/ intuitīvi ar nosaukumu passwd, kur tiks saglabāts fails .htpasswd , un izmantojiet htpasswd komanda ar –c ieslēdziet pirmo pievienoto lietotāju, lai ģenerētu failu, pēc tam, ja vēlaties pievienot vairāk lietotāju, izmantojiet htpasswd bez slēdza –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. Lai aizsargātu name-ip-ssl virtuālā resursdatora saknes /srv/http/ servēto ceļu ar visām apakšmapēm un failiem zem tā, pievienojiet šādus norādījumus Virtuālā resursdatora serveris bloķē saskaņā ar sakņu direktīvu un norāda uz absolūto .htpasswd faila ceļu.

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

20. Pēc Nginx pakalpojuma restartēšanas atsvaidziniet lapu un uznirstošajam logam Nepieciešama autentifikācija ir jāparāda jūsu akreditācijas dati.

Tagad esat veiksmīgi iespējojis Nginx direktorijus, kas aizsargāti ar paroli , taču ņemiet vērā, ka tajā pašā laikā jūsu sistēmā ir instalēts Apache tīmekļa serveris, tāpēc pārliecinieties, ka tas paliek atspējots un nekādā gadījumā to neuzsāk, jo tas var izraisīt ostas, kas ir pretrunā ar Nginx.

5. darbība: Pāradresējiet HTTP uz HTTPS vietnē Nginx

21. Ja vēlaties, lai pārlūkprogrammas automātiski novirzītu visus nedrošos HTTP pieprasījumus uz HTTPS protokolu, atveriet un rediģējiet jūs ne-ssl virtuālo resursdatoru un pievienojiet šo instrukciju servera_nosaukums direktīvā .

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

Visi šajā rakstā izklāstītie iestatījumi veikti, izmantojot sistēmu Arch Linux , kas darbojas kā serveris, taču lielākā daļa no tiem, īpaši tie, kas attiecas uz Nginx konfigurācijas failiem, ir pieejami lielākajā daļā Linux sistēmu ar nelielām atšķirībām.