Arch Linux-da Nginx Web Server -i ulanyp, Wirtual Hostlary, Parol Gorag Kataloglaryny we SSL şahadatnamalaryny dörediň


Öňki Arch Linux LEMP makalasy, tor hyzmatlaryny (Nginx, MySQL maglumat bazasy we PhpMyAdmin) gurmakdan başlap, MySQL serweri we PhpMyadmin üçin zerur bolan iň az howpsuzlygy düzýän esasy zatlary öz içine alýardy.

Bu mowzuk, Arch Linux-da öňki LEMP gurnamasy bilen berk baglanyşykly we LEMP ýygyndysy üçin has çylşyrymly konfigurasiýalary, esasanam Wirtual Hostlar döretmek ýaly web serwer konfigurasiýalaryny düzmek arkaly size ýol görkezer. , Parol bilen goralýan kataloglary ulanyň, HTTP Howpsuz Sockets Layer dörediň we düzüň, HTTP ygtybarly däl HTTPS gönükdirýär we size peýdaly Baş skriptleri hem hödürleýär. Wirtual Hostlary işjeňleşdirmek işini ýeňilleşdirer we SSL şahadatnamasy we açarlary döreder.

Arch Linux-da MariaDB maglumatlar bazasy bilen LEMP guruň

1-nji ädim: Nginx-de wirtual hostlary işletmek

Wirtual Hostlar işletmek üçin iň ýönekeý usullaryň biri, esasy Nginx konfigurasiýa faýlynda öz içine jümlelerini ulanmak, bu ýönekeý konfigurasiýalaryň işini has ýönekeý we täsirli edýär, sebäbi ýönekeý faýl döredip bilersiňiz. her täze öý eýesi üçin we esasy konfigurasiýa faýly has arassa saklaň.

Bu çemeleşme, Apache Web Server ýaly işleýär, ilkinji etmeli zadyňyz, Nginx-iň faýl görkezmelerini okamaly täze URI ýoluny kesgitlemekdir.

1. Şeýlelik bilen, /etc/nginx/ ulgam ýolunda we aşaky böleginde ýerleşýän nginx.conf esasy faýly açyň, iň soňky egri ýaýdan öň } Geljekki Wirtual Host konfigurasiýa faýllarynyň ýaşaýan ýoluny goşuň.

$ sudo nano /etc/nginx/nginx.conf

Aşakda aşakdaky jümläni goşuň.

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

Bu görkezme Nginx-e .conf giňeltmesi bilen gutarýan /etc/nginx/sites-enable/ tapylan ähli faýllary okamalydygyny aýdýar.

2. Indiki ädim, ähli Wirtual Host konfigurasiýa faýllaryňyzy saklaýan saýtlar bilen işleýän katalogy we saýtlar elýeterli atly başga bir katalog döretmekdir.

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

3. Indi täze Wirtual Host döretmegiň wagty geldi. Bu mysal ulgam IP adresini Wirtual Host Name hökmünde ulanar, şonuň üçin name-ip.conf atly täze faýl dörediň.

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

Aşakdaky mazmuny goşuň.

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

Wirtual Hosty işjeňleşdirýän görkezme, diňleýiş portunyň aşagyndaky server_name beýanydyr. Mundan başga-da, bu ýerde başga bir möhüm görkezme, /srv/http/ ulgam ýolundan faýl mazmunyna hyzmat etmek üçin Nginx Wirtual Host-y görkezýän kök beýanydyr.

4. Iň soňky ädim, /srv/http/ bukjasyny döretmek we Nginx okamak üçin (simwoliki baglanyşyk ulanyp) name-ip.conf faýl konfigurasiýasyny döretmek, soňra daemon täzeden açmak täze konfigurasiýalary görmek üçin.

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

5. Muny barlamak üçin brauzeriňizi Arch ulgamynyň IP adresine görkeziň we web mazmunynyň http:// localhost -den tapawutlydygyny görmeli. Bu ýerde, aşakdaky skrinshotdaky ýaly FastCGI PHP konfigurasiýalaryny barlaýan kiçijik php skriptini goşdum.

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

<?php
phpinfo();
?>

6. Nginx-de Wirtual Hostlary işletmek ýa-da öçürmek üçin özümi döreden başga bir usul has owadan we Apache a2eniste skriptinden ylham aldy.

Bu usuly ulanmak üçin aşakdaky mazmunly $HOME ýoluňyzda faýl redaktoryny açyň we n2ensite atly täze bir faýl dörediň, ony ýerine ýetiriň, kök aýratynlyklary bilen işlediň we täze Wirtual Host adyňyza .conf gutarmazdan geçiň (islegleriňize görä üýtgetmek üçin mugt dolduryň).

$ 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

Ony ýerine ýetirip, görkeziş ýaly işlediň.

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

7. Wirtual Hostlary öçürmek üçin aşakdaky mazmunly täze n2dissite faýly dörediň we ýokardaky ýaly sazlamalary ulanyň.

$ 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. Indi islendik Wirtual Hosty işletmek ýa-da öçürmek üçin bu iki skripti ulanyp bilersiňiz, ýöne ulgam giň buýruklary hökmünde ulanmak isleseňiz, iki skripti hem /usr/local/bin/ göçüriň, soňam edip bilersiňiz ýoluny görkezmän ulanyň.

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

2-nji ädim: Nginx-de wirtual hostlar bilen SSL-i işlediň

SSL ( Howpsuz rozetkalar gatlagy ), simmetrik/asimmetrik kriptografiýa düwmelerini ulanyp, ygtybarly kanalyň üsti bilen maglumat akymyny geçirýän HTTP birikmelerini torlar ýa-da internet arkaly şifrlemek üçin döredilen protokoldyr. we Arch Linux-da OpenSSL bukjasy bilen üpjün edilýär.

$ sudo pacman -S openssl

9. Nginx bilen HTTPS birikmelerini işjeňleşdirmek üçin ilki etmeli pikiriňiz, Wirtual Hosts düwmelerini döretmekdir. Mundan başga-da, zatlary ýönekeýleşdirmek üçin, wirtual Host adyny esasy atlar hökmünde ulanyp, /etc/nginx/ssl katalog ýolunda kriptografiki açarlary awtomatiki döredýän kiçijik skriptleri taýýarladym.

nginx_gen_ssl atly bir faýl dörediň we aşakdaky mazmuny goşuň.

$ 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. scriptazgy ýerine ýetirilenden soň, ýerine ýetiriş rugsatlaryny goşuň, işlediň we Şahadatnama opsiýalaryňyzy beriň, iň möhümi umumy at meýdançasy (resmi domen adyny şu ýere goşuň) we parol we goşmaça kompaniýa meýdanlaryny boş goýuň .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

Düwmeleri döredýän meseläniň ahyrynda, Nginx ssl katalogynyň aşagyndaky ähli düwmeler bilen sanaw görkeziler.

Şeýle hem, bu skriptiň ulgam buýrugy hökmünde ulanylmagyny isleseňiz, göçüriň ýa-da /usr/local/bin/ -e geçiriň.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Nginx SSL Wirtual Host üçin zerur düwmeler döredenimizden soň, SSL Wirtual Host konfigurasiýa faýlyny döretmegiň wagty geldi. server_name direktiwasyndaky ýokardaky ýaly wirtual Host üçin ulgam IP adresini ulanyň, ýöne bu faýly ýatlatmak üçin .conf dan öň ssl goşup, Wirtual Host faýl adyny birneme üýtgediň. name-ip SSL Wirtual Host diýmekdir.

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

Bu faýlda diňlemek port beýanyny 443 ssl-e üýtgediň we SSL we şahadatnama açar faýl ýollaryny aşakdaky böleklere meňzeş ýaly öň döredilen ýollar bilen üpjün ediň.

## 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. Faýl döredilenden soň, ony işjeňleşdirmek üçin n2ensite skriptini ýa-da ln buýruk setirini ulanyň ( saýtlar bilen işleýän katalogynda simwoliki baglanyşyk döredýär) ), soňra sazlamalary ulanmak üçin Nginx daemonyny täzeden açyň.

$ 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. brauzeriňizi ýene-de Arch IP URL görkeziň, ýöne bu gezek HTTPS protokolyny ulanyp - ulgamymda https://192.168.1.33 we Baglanyşyk ynamsyz howpsuzlyk ýalňyşlygy peýda bolmaly ( Sahypada has giňişleýin gitmek üçin Howpsuzlyk kadasyny goşuň we tassyklaň ).

Indi görşüňiz ýaly, Nginx Wirtual Host öňki name-ip öý eýesi bilen birmeňzeş mazmuna hyzmat edýär, ýöne bu gezek HTTP ygtybarly birikmesini ulanyp.

3-nji ädim: PhpMyAdmin-a wirtual host arkaly giriň

Wgin Host Nginx-de işledilen bolsa, indi http:// localhost ýol mazmunyna girip bilmeris (ýerlihost adatça aýlawly IP adresi ýa-da başga bir sazlanmadyk bolsa ulgam IP adresi bilen mazmuna hyzmat edýär) Arch system IP-ni server_name hökmünde ulandy, şonuň üçin mazmun ýolumyz üýtgedi.

14. Web arkaly PhpMyAdmin girmek üçin iň ýönekeý usul, /usr/share/webapps/phpMyAdmin/ ýoly bilen täze kesgitlenen Wirtual Host ýolumyzyň arasynda simwoliki baglanyşyk döretmekdir. (/srv/http ).

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

15. aboveokardaky buýrugy ýerine ýetireniňizden soň, sahypaňyzy täzeläň we Nginx Wirtual Host-da autoindex beýany açyk bolsa ýa-da URL-ni göni PhpMyAdmin bukjasyna https: görkezseňiz, phpMyAdmin täze bukjasynyň peýda boljakdygyny görersiňiz./arch_IP/phpMyAdmin .

16. Brauzerde phpMyAdmin setirini arassalamak isleseňiz, Wirtual Host faýllaryňyzy redaktirläň we serwer blokynyň aşagyna aşakdaky mazmuny goşuň.

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

4-nji ädim: Nginx-de parol bilen goralýan katalogy açyň

Apache-den tapawutlylykda, Nginx parol bilen goralýan kataloglary işletmek üçin HttpAuthBasic modulyny ulanýar, ýöne kodlanan .htpasswd faýly döretmek üçin gural bermeýär.

17. Arch Linux-da Nginx bilen katalog parolyny goramak üçin Apache web serwerini guruň we kodlanan .htaccess faýly döretmek üçin gurallaryny ulanyň.

$ sudo pacman -S apache

18. Apache guranyňyzdan soň, .htpasswd faýly saklanjak we htpasswd /etc/nginx/ aşagynda täze bir katalog dörediň. > –c buýrugy bilen faýl döretmek üçin ilki goşulan ulanyjyny açyň, soň has köp ulanyjy goşmak isleseňiz htpasswd –c wyklýuçatelini ulanyň.

$ 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. name-ip-ssl Wirtual Host köküni /srv/http/ goramak üçin ähli aşaky bukjalary we aşagyndaky faýllar bilen hyzmat edilen ýoly içerki görkezmeleri goşuň Wirtual Host serwer kök direktiwasy astynda blokirlenýär we ony mutlak .htpasswd faýl ýoluna görkezýär.

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

20.

Indi Nginx Parol bilen goralýan kataloglar -y üstünlikli işledipdiňiz, ýöne şol bir wagtyň özünde ulgamyňyzda Apache web serweriniň gurnalandygyna göz ýetiriň, onuň ýapykdygyna göz ýetiriň we her niçigem bolsa başlamaň, sebäbi sebäp bolup biler Nginx bilen gapma-garşy portlar.

5-nji ädim: HTTP-ni Nginx-de HTTPS-e gönükdiriň

21. Brauzerleriň ähli ygtybarly HTTP isleglerini HTTPS protokolyna açmak we redaktirlemek isleseňiz, ssl däl Wirtual Host we server_name direktiwasynyň aşagyndaky görkezmäni goşuň .

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

Bu makalada serwer hökmünde işleýän Arch Linux ulgamynyň aşagyndaky ähli sazlamalar, ýöne köpüsi, esasanam Nginx konfigurasiýa faýllary bilen baglanyşykly birneme tapawutly Linux ulgamlarynyň köpüsinde bar.