Oħloq Hosts Virtwali, Password Ipproteġi Direttorji u Ċertifikati SSL billi tuża Nginx Web Server f'Arch Linux


L-artikolu 'LEMP' ta' Arch Linux preċedenti biss kopra affarijiet bażiċi, mill-installazzjoni tas-servizzi tan-netwerk (Nginx, database MySQL u PhpMyAdmin) u kkonfigurat sigurtà minima meħtieġa għas-server MySQL u PhpMyadmin.

Dan is-suġġett huwa strettament relatat mal-Installazzjoni preċedenti ta' LEMP fuq Arch Linux u jiggwidak permezz tal-issettjar ta' konfigurazzjonijiet aktar kumplessi għall-munzell LEMP, speċjalment il-konfigurazzjonijiet ta' Nginx web server, bħall-ħolqien ta' Virtwali Hosts , uża Diretorji Protetti bil-Password, oħloq u kkonfigura HTTP Secure Sockets Layer, redirezzjonijiet HTTP mhux sikuri għal HTTPS u se tippreżentalek ukoll xi skripts Bash utli li se jħaffef ix-xogħol meta jattiva Hosts Virtwali u jiġġenera Ċertifikat u Ċwievet SSL.

Installa LEMP ma' MariaDB Database f'Arch Linux

Pass 1: Ippermetti Hosts Virtwali fuq Nginx

Wieħed mill-aktar metodu sempliċi biex jippermetti l-Ospiti Virtwali huwa l-użu tad-dikjarazzjonijiet inkludi fuq il-fajl ewlieni tal-konfigurazzjoni Nginx, li jagħmel ix-xogħol ta 'konfigurazzjonijiet ulterjuri aktar sempliċi u effiċjenti għaliex tista' toħloq fajls sempliċi għal kull ospitanti ġdid u żomm il-fajl tal-konfigurazzjoni prinċipali aktar nadif.

Dan l-approċċ jaħdem bl-istess mod bħal fuq Apache Web Server, l-ewwel ħaġa li trid tagħmel hi li tispeċifika l-mogħdija l-ġdida URI fejn Nginx għandu jaqra d-direttivi tal-fajls.

1. Allura, iftaħ nginx.conf fajl prinċipali li jinsab fuq il-mogħdija tas-sistema /etc/nginx/ u fil-qiegħ, qabel l-aħħar parentesi kaboċċi “}” żid it-triq fejn se jirrisjedu l-fajls tal-konfigurazzjoni tal-Ospitanti Virtwali futuri.

$ sudo nano /etc/nginx/nginx.conf

Fil-qiegħ żid id-dikjarazzjoni li ġejja.

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

Din id-direttiva tgħid lil Nginx li għandu jaqra l-fajls kollha li jinsabu f'/etc/nginx/sites-enabled/ li jispiċċa b'estensjoni .conf.

2. Il-pass li jmiss huwa li toħloq direttorju siti-enabled u ieħor, imsejjaħ siti-disponibbli, fejn taħżen il-fajls kollha tal-konfigurazzjoni tal-Ospiti Virtwali tiegħek.

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

3. Issa wasal iż-żmien li toħloq Ospitanti Virtwali ġdid. Dan l-eżempju se juża l-indirizz IP tas-sistema bħala Isem Virtwali Ospitanti, għalhekk oħloq fajl ġdid bl-isem name-ip.conf.

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

Żid il-kontenut li ġej.

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

Id-direttiva li tattiva Virtual Host hija dikjarazzjoni server_name taħt il-port tas-smigħ. Ukoll, direttiva oħra importanti hawnhekk hija dikjarazzjoni root li tindika Nginx Virtual Host biex iservi l-kontenut tal-fajl minn /srv/http/ passaġġ tas-sistema.

4. L-aħħar pass huwa li toħloq direttorju /srv/http/ u tagħmel il-konfigurazzjoni tal-fajl name-ip.conf disponibbli għall-qari ta 'Nginx (bl-użu ta' rabta simbolika), imbagħad terġa 'tibda d-daemon biex jagħmlu konfigurazzjonijiet ġodda viżibbli.

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

5. Biex tivverifikaha, ippunta l-browser tiegħek lejn l-indirizz IP tas-sistema Arch u għandek tara li l-kontenut tal-web huwa differenti minn http://localhost. Hawnhekk żidt script php żgħir li jiċċekkja wkoll il-konfigurazzjonijiet FastCGI PHP bħal fil-screenshot hawn taħt.

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

<?php
phpinfo();
?>

6. Metodu ieħor li żviluppajt lili nnifsi biex nippermetti jew inwaqqaf Hosts Virtwali fuq Nginx huwa wieħed aktar eleganti u huwa ispirat mill-iskrittura Apache a2eniste.

Biex tuża dan il-metodu, iftaħ editur tal-fajls u oħloq fajl ġdid, imsejjaħ n2ensite, fuq il-mogħdija ta' $HOME tiegħek bil-kontenut ta' hawn taħt, agħmilha eżekutibbli, ħaddem bi privileġġi tal-għeruq. u tgħaddi bħala għażla għall-isem l-Ospitanti Virtwali l-ġdid tiegħek mingħajr ma jintemm .conf (imla liberu li timmodifikah skont il-bżonnijiet tiegħek).

$ 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

Agħmilha eżekutibbli u mexxiha kif juru.

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

7. Biex tiddiżattiva Hosts Virtwali oħloq fajl ġdid n2dissite bil-kontenut li ġej u applika l-istess settings bħal hawn fuq.

$ 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. Issa tista' tuża dawn iż-żewġ skripts biex tattiva jew tiddiżattiva kwalunkwe Ospitanti Virtwali imma jekk trid tapplikaha bħala kmandi kollha tas-sistema, tikkopja ż-żewġ skripts għal /usr/local/bin/ u mbagħad tista' użaha mingħajr ma tispeċifika l-mogħdija.

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

Pass 2: Ippermetti SSL ma 'Virtwali Hosts fuq Nginx

SSL (Secure Sockets Layer) huwa protokoll iddisinjat biex jikkripta konnessjonijiet HTTP fuq netwerks jew l-Internet, li jagħmlu l-fluss tad-dejta li jiġi trażmess fuq kanal sigur bl-użu ta’ ċwievet kriptografiċi simetriċi/assimetriċi u huwa pprovdut f'Arch Linux mill-pakkett OpenSSL.

$ sudo pacman -S openssl

9. Biex tippermetti konnessjonijiet HTTPS ma 'Nginx l-ewwel taħseb li għandek bżonn tagħmel huwa li tiġġenera ċwievet Virtual Hosts. Ukoll, biex nissimplifika l-affarijiet, żviluppajt skripts żgħar li awtomatikament jiġġenera ċwievet kriptografiċi fuq il-mogħdija tad-direttorju /etc/nginx/ssl, billi tuża ismijiet tal-Ospitanti Virtwali bħala ismijiet ewlenin.

Oħloq fajl bl-isem nginx_gen_ssl u żid il-kontenut li ġej.

$ 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. Wara li l-iskrittura tkun inħoloq ehmeż il-permessi ta' eżekuzzjoni, mexxiha u ipprovdi l-għażliet taċ-Ċertifikat tiegħek, l-aktar waħda importanti tkun il-qasam Isem Komuni (żid l-isem tad-dominju uffiċjali hawn) u ħalli l-oqsma tal-Password u tal-Kumpanija Fakultattiva vojta .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

Fl-aħħar tal-kompitu li jiġġeneraw iċ-ċwievet, se tintwera lista biċ-ċwievet kollha disponibbli taħt id-direttorju Nginx ssl.

Ukoll jekk trid li din l-iskrittura tintuża bħala kmand tas-sistema, ikkupjaha jew ċċaqlaq għal /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Wara li nkunu ġġenerajna ċwievet meħtieġa għal Nginx SSL Virtual Host wasal iż-żmien li fil-fatt noħolqu fajl ta 'konfigurazzjoni SSL Virtual Host. Uża l-istess indirizz IP tas-sistema għal Virtual Host bħal hawn fuq fuq id-direttiva server_name iżda, ibdel ftit l-isem tal-fajl Virtual Host billi tehmeż ssl qabel .conf, biex infakkarkom li dan il-fajl tirreferi għal name-ip SSL Virtual Host.

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

Fuq dan il-fajl ibdel isma dikjarazzjoni tal-port għal 443 ssl u ipprovdi mogħdijiet tal-fajls taċ-ċavetta SSL u taċ-ċertifikat ma' dawk maħluqa qabel biex jidhru bħal fis-silta hawn taħt.

## 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. Wara li l-fajl ikun inħoloq uża l-iskript n2ensite jew il-linja tal-kmand ln biex tattivah (joħloq link simboliku tal-fajl fid-direttorju siti-enabled ), imbagħad terġa 'tibda Nginx daemon biex tapplika s-settings.

$ 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. Għal darb'oħra ippunta l-brawżer tiegħek lejn Arch IP URL iżda din id-darba tuża protokoll HTTPS - https://192.168.1.33 fis-sistema tiegħi- u Konnessjoni Mhux Fdata għandu jidher żball ta' sigurtà ( Żid u Ikkonferma Eċċezzjoni tas-Sigurtà biex tmur aktar fil-paġna).

Kif issa tista' tara l-Nginx Virtual Host tiegħek iservi l-istess kontenut bħall-host preċedenti name-ip iżda din id-darba tuża konnessjoni HTTP sigura.

Pass 3: Aċċess PhpMyAdmin permezz Virtual Host

Jekk Virtual Host huwa attivat fuq Nginx, m'għadx ikollna aċċess għall-kontenut tal-passaġġ http://localhost (il-localhost normalment iservi kontenut billi juża l-indirizz IP loopback jew l-indirizz IP tas-sistema jekk ma jkunx ikkonfigurat mod ieħor) għaliex għandna użaw l-IP tas-sistema Arch bħala server_name għalhekk il-mogħdija tal-kontenut tagħna nbidlet.

14. L-aktar metodu sempliċi biex jinkiseb aċċess għal PhpMyAdmin permezz tal-web huwa li tinħoloq rabta simbolika bejn il-mogħdija /usr/share/webapps/phpMyAdmin/ u l-mogħdija l-ġdida definita tagħna tal-Ospitanti Virtwali (/srv/http).

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

15. Wara li wettaqt il-kmand t'hawn fuq, aġġorna l-paġna tiegħek u tara folder ġdid phpMyAdmin jidher, jekk id-dikjarazzjoni autoindex tkun attivata fuq Nginx Virtual Host jew ippunta l-URL tiegħek direttament lejn il-folder PhpMyAdmin https: //arch_IP/phpMyAdmin.

16. Jekk trid sanitize string phpMyAdmin fuq il-browser editja l-fajls tiegħek Virtual Hosts u żid il-kontenut li ġej taħt blokk tas-server.

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

Pass 4: Ippermetti Direttorju Protett bil-Password fuq Nginx

B'differenza minn Apache, Nginx juża modulu HttpAuthBasic biex jippermetti Diretorji Protetti bil-Password iżda ma jipprovdi l-ebda għodda biex joħloq fajl .htpasswd encrypted.

17. Biex tikseb il-protezzjoni tal-password tad-direttorju b'Nginx fuq Arch Linux installa Apache web server u uża l-għodod tagħha biex tiġġenera fajl .htaccess encrypted.

$ sudo pacman -S apache

18. Wara li tkun installat Apache oħloq direttorju ġdid taħt /etc/nginx/ jismu intuwittivament passwd fejn se jinħażen il-fajl .htpasswd u uża htpasswd kmand b'–c taqleb l-ewwel utent miżjud biex tiġġenera l-fajl, imbagħad jekk trid iżżid aktar utenti uża htpasswd mingħajr –c swiċċ.

$ 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. Sabiex tipproteġi l-name-ip-ssl Virtwali Ospitanti root /srv/http/ moqdija mogħdija bis-sub folders u l-fajls kollha taħtha żid l-istruzzjonijiet li ġejjin ġewwa tiegħek Blokk tas-server tal-Ospitanti Virtwali taħt id-direttiva tal-għerq u ppuntah lejn it-triq tal-fajl .htpasswd assoluta.

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

20. Wara li terġa 'tibda s-servizz Nginx, aġġorna l-paġna u popup Awtentikazzjoni Meħtieġa għandhom jidhru esiġenti għall-kredenzjali tiegħek.

Issa ppermettiet b'suċċess Nginx Diretorji Protetti bil-Password imma kun konxju li fl-istess ħin is-server tal-web Apache jiġi installat fis-sistema tiegħek għalhekk kun żgur li jibqa' diżattivat u bi kwalunkwe mezz ma tibdihx għax jista' jwassal għal portijiet f’kunflitt ma’ Nginx.

Pass 5: Idderieġi HTTP għal HTTPS fuq Nginx

21. Jekk tixtieq li l-browsers jerġgħu jidderieġu awtomatikament it-talbiet HTTP mhux sikuri kollha għall-protokoll HTTPS tiftaħ u teditja int mhux ssl Virtual Host u żid l-istruzzjoni li ġejja taħt id-direttiva server_name .

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

Is-settings kollha ppreżentati f'dan l-artikolu saru taħt sistema Arch Linux li taġixxi bħala server, iżda ħafna minnhom, speċjalment dawk li jirrigwardaw fajls tal-konfigurazzjonijiet Nginx, huma disponibbli fuq il-biċċa l-kbira tas-sistemi Linux b'differenzi kemmxejn.