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.