Unda Majeshi Pekee, Saraka za Kulinda Nenosiri na Vyeti vya SSL kwa kutumia Seva ya Wavuti ya Nginx katika Arch Linux.


Nakala ya awali ya Arch Linux 'LEMP' ilishughulikia mambo ya kimsingi, kutoka kwa kusakinisha huduma za mtandao (Nginx, hifadhidata ya MySQL na PhpMyAdmin) na usanidi usalama mdogo unaohitajika kwa seva ya MySQL na PhpMyadmin.

Mada hii inahusiana kabisa na Usakinishaji wa awali wa LEMP kwenye Arch Linux na itakuongoza katika kuweka usanidi changamano zaidi wa rafu ya LEMP, hasa Nginx usanidi wa seva ya wavuti, kama vile kuunda Wapangishi Virtual , tumia Nenosiri Zilizolindwa Saraka, unda na usanidi Tabaka la Soketi Salama za HTTP, HTTP inaelekeza kwingine kwa HTTPS na pia itakuletea baadhi ya hati muhimu za Bash ambazo itarahisisha kazi ya kuwezesha Wapangishi wa Mtandaoni na kutoa Cheti cha SSL na Funguo.

Sakinisha LEMP na Hifadhidata ya MariaDB katika Arch Linux

Hatua ya 1: Wezesha Majeshi Pekee kwenye Nginx

Mojawapo ya njia rahisi zaidi ya kuwezesha Wapangishi Virtual ni kutumia jumuisha taarifa kwenye faili kuu ya usanidi wa Nginx, ambayo hufanya kazi ya usanidi zaidi kuwa rahisi na ufanisi zaidi kwa sababu unaweza kuunda faili rahisi. kwa kila seva pangishi mpya na weka kisafishaji kikuu cha faili ya usanidi.

Mbinu hii inafanya kazi sawa na kwenye Seva ya Wavuti ya Apache, jambo la kwanza unahitaji kufanya ni kubainisha URI njia mpya ambapo Nginx inapaswa kusoma maagizo ya faili.

1. Kwa hivyo, fungua nginx.conf faili kuu iliyoko kwenye /etc/nginx/ njia ya mfumo na chini, kabla ya mabano ya mwisho ya curly “}” ongeza njia ambapo faili za usanidi za Mpangishaji Mtandaoni wa siku zijazo zitakaa.

$ sudo nano /etc/nginx/nginx.conf

Chini ongeza taarifa ifuatayo.

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

Maagizo haya yanaiambia Nginx inapaswa kusoma faili zote ambazo zinapatikana katika /etc/nginx/sites-enabled/ ambayo inaisha kwa .conf kiendelezi.

2. Hatua inayofuata ni kuunda saraka ya iliyowezeshwa na tovuti na nyingine, iitwayo tovuti zinazopatikana, ambapo unahifadhi faili zako zote za usanidi wa Majeshi Virtual.

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

3. Sasa ni wakati wa kuunda Mpangishi mpya wa Virtual. Mfano huu utatumia anwani ya IP ya mfumo kama Jina la Mwenyeji Pekee, kwa hivyo unda faili mpya inayoitwa name-ip.conf.

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

Ongeza maudhui yafuatayo.

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

Maelekezo ambayo huwezesha Seva pangishi pepe ni server_name taarifa chini ya mlango wa kusikiliza. Pia, agizo lingine muhimu hapa ni root taarifa inayoelekeza Nginx Virtual Host kutoa maudhui ya faili kutoka /srv/http/ njia ya mfumo.

4. Hatua ya mwisho ni kuunda /srv/http/ saraka na kufanya name-ip.conf usanidi wa faili upatikane kwa usomaji wa Nginx (kwa kutumia kiungo cha ishara), kisha uanze upya daemon. kufanya usanidi mpya uonekane.

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

5. Ili kuithibitisha, elekeza kivinjari chako kwenye anwani ya IP ya mfumo wa Arch na unapaswa kuona kwamba maudhui ya wavuti ni tofauti na http://localhost. Hapa nimeongeza hati ndogo ya php ambayo pia hukagua usanidi wa FastCGI PHP kama kwenye picha ya skrini iliyo hapa chini.

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

<?php
phpinfo();
?>

6. Njia nyingine ambayo nimeunda mimi mwenyewe ili kuwezesha au kuzima Seva Vipangishi kwenye Nginx ni ya kifahari zaidi na imetiwa msukumo kutoka hati ya Apache a2eniste.

Ili kutumia njia hii, fungua kihariri faili na uunde faili mpya, inayoitwa n2ensite, kwenye $HOME njia yako iliyo na maudhui yaliyo hapa chini, ifanye itekelezwe, iendeshe kwa upendeleo wa mizizi. na upitishe kama chaguo kwa jina lako jipya la Mpangishi Mtandaoni bila .conf kuisha ( jaza bila malipo ili kulirekebisha kulingana na mahitaji yako).

$ 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

Ifanye itekelezwe na iendeshe kama onyesho.

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

7. Ili kulemaza Sevasji Pekee unda faili mpya ya n2dissite yenye maudhui yafuatayo na utumie mipangilio sawa na hapo juu.

$ 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. Sasa unaweza kutumia hati hizi mbili kuwezesha au kuzima Kipangishi chochote cha Virtual lakini ikiwa unataka kuitumia kama amri pana za mfumo nakili hati zote mbili kwa /usr/local/bin/ kisha unaweza. tumia bila kubainisha njia.

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

Hatua ya 2: Wezesha SSL na Wapaji wa Virtual kwenye Nginx

SSL (Safu Salama ya Soketi) ni itifaki iliyoundwa ili kusimba miunganisho ya HTTP kupitia mitandao au Mtandao kwa njia fiche, ambayo hufanya mtiririko wa data kutumwa kupitia chaneli salama kwa kutumia vitufe vya kriptografia linganifu/asymmetric. na hutolewa katika Arch Linux na OpenSSL kifurushi.

$ sudo pacman -S openssl

9. Ili kuwezesha miunganisho ya HTTPS na Nginx, jambo la kwanza unalofikiri unahitaji kufanya ni kutengeneza vitufe vya Vipangishi vya Mtandao. Pia, ili kurahisisha mambo, nimeunda hati ndogo ambayo hutoa funguo za siri kiotomatiki kwenye /etc/nginx/ssl njia ya saraka, kwa kutumia Virtual Host kumtaja kama majina muhimu.

Unda faili iitwayo nginx_gen_ssl na uongeze maudhui yafuatayo.

$ 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. Baada ya hati kutengenezwa ongeza ruhusa za utekelezaji, iendeshe na utoe chaguo zako za Cheti, lililo muhimu zaidi likiwa ni sehemu ya Jina la Kawaida ( ongeza jina rasmi la kikoa hapa) na uache sehemu za Nenosiri na Hiari za Kampuni zikiwa wazi. .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

Mwishoni mwa kazi ya kutengeneza funguo, orodha iliyo na vitufe vyote vinavyopatikana chini ya saraka ya Nginx ssl itaonyeshwa.

Pia ikiwa unataka hati hii itumike kama amri ya mfumo, nakili au isogeze hadi /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Baada ya kutengeneza funguo zinazohitajika kwa Seva dhabiti ya Nginx SSL, ni wakati wa kuunda faili ya usanidi ya Mpangishi Mtandaoni wa SSL. Tumia anwani ya IP ya mfumo sawa na Mpangishaji Mtandaoni kama ilivyo hapo juu kwenye jina_name lakini, badilisha kidogo jina la faili la Mpangishi wa Mtandao kwa kuweka ssl kabla ya .conf, ili kukukumbusha kuwa faili hii inasimamia name-ip SSL Virtual Host.

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

Kwenye faili hii badilisha sikiliza taarifa ya kituo hadi 443 ssl na utoe njia za ufunguo wa faili za SSL na cheti na zile zilizoundwa awali ili kuonekana kama dondoo hapa chini.

## 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. Baada ya faili kuundwa tumia hati ya n2ensite au ln mstari wa amri ili kuiwasha (hutengeneza kiungo cha ishara cha faili katika saraka iliyowezeshwa na tovuti ), kisha anza tena daemon ya Nginx ili kutumia mipangilio.

$ 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. Tena elekeza kivinjari chako kwa Arch IP URL lakini wakati huu ukitumia itifaki ya HTTPS - https://192.168.1.33 kwenye mfumo wangu- na Muunganisho Usioaminika hitilafu ya usalama inapaswa kuonekana ( Ongeza na Thibitisha Isipokuwa Usalama ili kwenda zaidi kwenye ukurasa).

Kama unavyoweza kuona Seva pangishi yako ya Nginx Virtual hutumikia maudhui sawa na seva pangishi ya awali ya name-ip lakini wakati huu kwa kutumia muunganisho salama wa HTTP.

Hatua ya 3: Fikia PhpMyAdmin kupitia Virtual Host

Iwapo Mpangishi Mwema huwashwa kwenye Nginx, hatuna tena ufikiaji wa http://localhost maudhui ya njia ( localhost kawaida hutumikia maudhui kwa kutumia anwani ya IP ya nyuma au anwani ya IP ya mfumo ikiwa haijasanidiwa vinginevyo) kwa sababu ilitumia Arch system IP kama server_name kwa hivyo njia yetu ya maudhui imebadilika.

14. Mbinu rahisi zaidi ya kupata ufikiaji wa PhpMyAdmin kupitia wavuti ni kuunda kiungo cha ishara kati ya /usr/share/webapps/phpMyAdmin/ njia na njia yetu mpya iliyobainishwa ya Virtual Host. (/srv/http).

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

15. Baada ya kutekeleza amri iliyo hapo juu, onyesha upya ukurasa wako na utaona folda mpya phpMyAdmin ikitokea, ikiwa taarifa ya autoindex imewashwa kwenye Nginx Virtual Host au uelekeze URL yako moja kwa moja kwenye folda ya PhpMyAdmin https: //arch_IP/phpMyAdmin.

16. Iwapo ungependa kutakasa kamba ya phpMyAdmin kwenye kivinjari hariri faili zako za Majeshi Mtandaoni na uongeze maudhui yafuatayo chini ya kizuizi cha seva.

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

Hatua ya 4: Washa Saraka Inayolindwa na Nenosiri kwenye Nginx

Tofauti na Apache, Nginx hutumia sehemu ya HttpAuthBasic ili kuwezesha Saraka Zilizolindwa na Nenosiri lakini haitoi zana zozote ili kuunda faili iliyosimbwa kwa njia fiche ya .htpasswd.

17. Ili kufikia ulinzi wa nenosiri la saraka kwa Nginx kwenye Arch Linux sakinisha seva ya wavuti ya Apache na utumie zana zake kutengeneza faili ya .htaccess iliyosimbwa.

$ sudo pacman -S apache

18. Baada ya kusakinisha Apache unda saraka mpya chini ya /etc/nginx/ iitwayo intuitively passwd ambapo .htpasswd faili itahifadhiwa na kutumia htpasswd amri yenye –c washa mtumiaji aliyeongezwa kwanza ili kuunda faili, basi ikiwa ungependa kuongeza watumiaji zaidi tumia htpasswd bila –c kubadili.

$ 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. Ili kulinda name-ip-ssl mzizi wa seva pangishi /srv/http/ iliyotumika pamoja na folda zake ndogo na faili zilizo chini yake ongeza maagizo yafuatayo ndani yako. Kizuizi cha seva ya seva pangishi chini ya maagizo ya msingi na uelekeze kwenye .htpasswd njia ya faili kabisa.

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

20. Baada ya kuanzisha upya huduma ya Nginx, onyesha ukurasa upya na Uthibitishaji Unahitajika ionekane kuwa inahitaji kitambulisho chako.

Sasa umefanikiwa kuwezesha Nginx Saraka Zilizolindwa za Nenosiri lakini fahamu kuwa wakati huo huo seva ya wavuti ya Apache imesakinishwa kwenye mfumo wako kwa hivyo hakikisha kuwa inabakia imezimwa na kwa vyovyote vile usianzishe kwa sababu inaweza kusababisha bandari zinazokinzana na Nginx.

Hatua ya 5: Elekeza upya HTTP kwa HTTPS kwenye Nginx

21. Iwapo ungependa vivinjari vielekeze upya maombi yote ambayo si salama ya HTTP kwa itifaki ya HTTPS fungua na uhariri wewe si ssl Mpangishi pepe na uongeze maagizo yafuatayo chini ya server_name maelekezo. .

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

Mipangilio yote iliyowasilishwa kwenye makala haya ambapo imefanywa chini ya mfumo wa Arch Linux unaofanya kazi kama seva, lakini mingi yake, hasa ile inayohusu faili za usanidi wa Nginx, inapatikana kwenye mifumo mingi ya Linux yenye tofauti kidogo.