Luo virtuaalisia isäntiä, salasanasuojattuja hakemistoja ja SSL-varmenteita käyttämällä "Nginx Web Server" -palvelinta Arch Linuxissa


Edellinen Arch Linux "LEMP" -artikkeli kattoi vain perusasioita verkkopalvelujen (Nginx, MySQL-tietokanta ja PhpMyAdmin) asentamisesta ja MySQL-palvelimen ja PhpMyadminin vaaditun vähimmäissuojauksen määrittämisestä.

Tämä aihe liittyy tiukasti LEMP:n aiempaan asennukseen Arch Linuxiin ja opastaa sinua määrittämään monimutkaisempia kokoonpanoja LEMP-pinolle, erityisesti Nginx-verkkopalvelinkokoonpanoihin, kuten luomaan virtuaalisia isäntiä. , käytä salasanalla suojattuja hakemistoja, luo ja määritä HTTP Secure Sockets Layer, suojaamattomat HTTP-uudelleenohjaukset HTTPS:ään ja esittelee myös hyödyllisiä Bash-komentotiedostoja, jotka helpottaa virtuaalipalvelinten aktivointia ja luo SSL-varmennetta ja avaimia.

Vaatimukset

Asenna LEMP MariaDB-tietokannan kanssa Arch Linuxiin

Vaihe 1: Ota virtuaalipalvelimet käyttöön Nginxissä

Yksi yksinkertaisimmista tavoista ottaa virtuaaliset isännät käyttöön on käyttää include-lauseita Nginx-pääasetustiedostossa, mikä tekee lisämäärityksistä yksinkertaisempaa ja tehokkaampaa, koska voit luoda yksinkertaisia tiedostoja. jokaiselle uudelle isännälle ja pidä pääasetustiedosto puhtaana.

Tämä lähestymistapa toimii samalla tavalla kuin Apache-verkkopalvelimessa. Ensimmäinen asia, joka sinun on tehtävä, on määrittää uusi URI-polku, jossa Nginxin tulee lukea tiedostokäskyt.

1. Avaa siis päätiedosto nginx.conf, joka sijaitsee järjestelmäpolussa /etc/nginx/ ja alareunassa ennen viimeistä kiharaa hakasulkua " }" lisää polku, jossa tulevat Virtual Host -määritystiedostot sijaitsevat.

sudo nano /etc/nginx/nginx.conf

Lisää alareunaan seuraava lausunto.

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

Tämä käsky kertoo Nginxille, että sen tulee lukea kaikki tiedostot, jotka löytyvät hakemistosta /etc/nginx/sites-enabled/ ja jotka päättyvät .conf-tunnisteeseen.

2. Seuraava vaihe on luoda sivustot-käyttöinen-hakemisto ja toinen, nimeltään sivustot-käytettävissä, johon tallennat kaikki Virtual Hosts -määrityksesi tiedostot.

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

3. Nyt on aika luoda uusi virtuaalipalvelin. Tässä esimerkissä käytetään järjestelmän IP-osoitetta virtuaalisena isäntänimenä, joten luo uusi tiedosto nimeltä nimi-ip.conf.

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

Lisää seuraava sisältö.

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

Virtual Hostin aktivoiva käsky on palvelimen_nimi kuunteluportissa. Toinen tärkeä ohje tässä on myös root-lause, joka osoittaa Nginx Virtual Hostin palvelemaan tiedostosisältöä järjestelmäpolusta /srv/http/.

4. Viimeinen vaihe on /srv/http/-hakemiston luominen ja name-ip.conf-tiedoston määrittäminen Nginx-lukua varten (käyttäen symbolinen linkki), käynnistä daemon uudelleen, jotta uudet kokoonpanot tulevat näkyviin.

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

5. Vahvista se osoittamalla selaimesi Arch-järjestelmän IP-osoitteeseen ja sinun pitäisi nähdä, että verkkosisältö on eri kuin http://localhost. Olen lisännyt tähän pienen php-skriptin, joka tarkistaa myös FastCGI PHP -kokoonpanot, kuten alla olevassa kuvakaappauksessa.

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

<?php
phpinfo();
?>

6. Toinen menetelmä, jonka olen kehittänyt Virtual Hosts -palvelun käyttöön ottamiseksi tai poistamiseksi käytöstä Nginxissä, on tyylikkäämpi, ja se on saanut inspiraationsa Apachen a2eniste-skriptistä.

Käytä tätä menetelmää avaamalla tiedostoeditori ja luomalla $HOME-polullesi uusi tiedosto, nimeltä n2ensite, jossa on alla oleva sisältö, tee siitä suoritettava ja suorita se pääkäyttäjän oikeuksin. ja siirry vaihtoehtona uudelle virtuaalipalvelimellesi ilman .conf-päätettä (täytä vapaasti muokataksesi sitä tarpeidesi mukaan).

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

Tee siitä suoritettava ja suorita se esityksenä.

sudo chmod +x n2ensite
sudo ./n2ensite your_virtual_host

7. Jos haluat poistaa Virtual Hostit käytöstä, luo uusi n2dissite-tiedosto, jossa on seuraava sisältö, ja käytä samoja asetuksia kuin yllä.

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. Nyt voit käyttää näitä kahta komentosarjaa minkä tahansa virtuaalipalvelimen käyttöön tai poistamiseen käytöstä, mutta jos haluat käyttää niitä järjestelmän laajuisina komentoina, kopioi molemmat komentosarjat hakemistoon /usr/local/bin/ ja sitten voit käyttää sitä polkua määrittämättä.

sudo cp n2ensite n2dissite /usr/local/bin/

Vaihe 2: Ota SSL käyttöön virtuaalipalvelinten kanssa Nginxissä

SSL (Secure Sockets Layer) on protokolla, joka on suunniteltu salaamaan HTTP-yhteyksiä verkkojen tai Internetin kautta, mikä mahdollistaa tiedonsiirron suojatun kanavan kautta käyttämällä symmetrisiä/esymmetrisiä salausavaimia. ja sen tarjoaa Arch Linuxissa OpenSSL-paketti.

sudo pacman -S openssl

9. Jotta voit ottaa HTTPS-yhteydet käyttöön Nginxin kanssa, sinun on ensin luotava Virtual Hosts -avaimia. Asioiden yksinkertaistamiseksi olen myös kehittänyt pienen skriptin, joka luo automaattisesti salausavaimet /etc/nginx/ssl-hakemistopolulle käyttäen Virtual Host -nimeämistä avainten niminä.

Luo tiedosto nimeltä nginx_gen_ssl ja lisää seuraava sisältö.

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. Kun komentosarja on luotu, liitä suoritusoikeudet, suorita se ja anna varmennevaihtoehdot, joista tärkein on Yleinen nimi -kenttä (lisää virallinen verkkotunnuksen nimi tähän) ja jätä Salasana- ja Valinnainen yritys -kentät tyhjiksi.

sudo chmod +x nginx_gen_ssl
sudo ./nginx_gen_ssl

Avainten luontitehtävän lopussa näytetään luettelo kaikista Nginx ssl -hakemistossa olevista avaimista.

Myös jos haluat, että tätä komentosarjaa käytetään järjestelmäkomentona, kopioi tai siirrä se osoitteeseen /usr/local/bin/.

sudo mv nginx_gen_ssl  /usr/local/bin

11. Kun olemme luoneet Nginx SSL Virtual Hostia varten tarvittavat avaimet, on aika luoda SSL Virtual Host -määritystiedosto. Käytä Virtual Hostille samaa järjestelmän IP-osoitetta kuin yllä komennolla server_name, mutta muuta hieman Virtual Host -tiedoston nimeä lisäämällä ssl ennen .conf-osoitetta muistuttamaan, että tämä tiedosto tarkoittaa name-ip SSL Virtual Host.

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

Muuta tässä tiedostossa kuuntele porttilauseke muotoon 443 ssl ja anna SSL- ja varmenneavaintiedostojen polut aiemmin luotujen polkujen kanssa näyttämään alla olevan otteen kaltaisista.

## 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. Kun tiedosto on luotu, käytä n2ensite-komentosarjaa tai ln-komentoriviä sen aktivoimiseksi (luo tiedoston symbolisen linkin sivustoissa -enabled hakemistosta), käynnistä sitten Nginx-daemon uudelleen ottaaksesi asetukset käyttöön.

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. Osoita selaimessasi jälleen Arch IP URL, mutta tällä kertaa käyttämällä HTTPS-protokollaa – https://192.168.1.33 järjestelmässäni ja Ei-luotettava yhteys -suojausvirheen pitäisi ilmestyä ( Lisää ja vahvista suojauspoikkeus, jos haluat mennä pidemmälle sivulla).

Kuten nyt näet, Nginx Virtual Host palvelee samaa sisältöä kuin edellinen name-ip isäntä, mutta tällä kertaa käyttämällä suojattua HTTP-yhteyttä.

Vaihe 3: Käytä PhpMyAdminia Virtual Hostin kautta

Jos Virtual Host on käytössä Nginxissä, meillä ei ole enää pääsyä http://localhost-polun sisältöön (localhost palvelee yleensä sisältöä käyttämällä takaisinkytkentä-IP-osoitetta tai järjestelmän IP-osoitetta, jos sitä ei ole määritetty muuten), koska meillä on käytti Arch-järjestelmän IP-osoitetta palvelimen_nimenä, joten sisältöpolkumme on muuttunut.

14. Yksinkertaisin tapa päästä PhpMyAdminiin verkon kautta on luoda symbolinen linkki polun /usr/share/webapps/phpMyAdmin/ välille. ja uusi määritetty Virtual Host -polkumme (/srv/http).

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

15. Kun olet suorittanut yllä olevan komennon, päivitä sivusi ja näet uuden kansion phpMyAdmin, jos autoindex-lauseke on käytössä Nginx Virtual Hostissa tai osoita URL-osoite suoraan PhpMyAdmin-kansio https://arch_IP/phpMyAdmin.

16. Jos haluat puhdistaa phpMyAdmin-merkkijonon selaimessa, muokkaa Virtual Hosts -tiedostojasi ja lisää seuraava sisältö palvelinlohkoon.

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

Vaihe 4: Ota salasanasuojattu hakemisto käyttöön Nginxissä

Toisin kuin Apache, Nginx käyttää HttpAuthBasic-moduulia ottaakseen käyttöön salasanalla suojatut hakemistot, mutta se ei tarjoa työkaluja salatun .htpasswd-tiedoston luomiseen.

17. Jos haluat saavuttaa hakemistosalasanan suojauksen Nginxillä Arch Linuxissa, asenna Apache-verkkopalvelin ja käytä sen työkaluja salatun .htaccess-tiedoston luomiseen.

sudo pacman -S apache

18. Kun olet asentanut Apachen, luo hakemistoon /etc/nginx/ uusi hakemisto nimeltään intuitively passwd, johon .htpasswd-tiedosto tallennetaan ja jota käytetään htpasswd-komento –c-kytkimellä on ensimmäinen lisätty käyttäjä luomaan tiedosto. Jos haluat lisätä käyttäjiä, käytä htpasswd-komentoa ilman – c -kytkin.

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. Suojatakseen name-ip-ssl Virtual Host -juuren /srv/http/ polkua kaikkine alikansioineen ja tiedostoineen se lisää seuraavat ohjeet Virtual Host -palvelinlohkoon juuridirektiivin alaisena ja osoittaa sen absoluuttiseen .htpasswd-tiedostopolkuun.

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

20. Kun olet käynnistänyt Nginx-palvelun uudelleen, päivitä sivu ja Todennus vaaditaan -ponnahdusikkunan pitäisi näkyä vaativan valtuustietojasi.

Nyt olet onnistuneesti ottanut käyttöön Nginxin salasanalla suojatut hakemistot, mutta muista, että samaan aikaan kun Apache-verkkopalvelin asennetaan järjestelmääsi, joten varmista, että se pysyy poissa käytöstä, äläkä missään tapauksessa käynnistä sitä, koska se voi johtaa portit, jotka ovat ristiriidassa Nginxin kanssa.

Vaihe 5: Ohjaa HTTP HTTPS:ään Nginxissä

21. Jos haluat, että selaimet uudelleenohjaavat automaattisesti kaikki suojaamattomat HTTP-pyynnöt HTTPS-protokollalle avautuvat ja muokkaavat, olet ei-ssl Virtual Host ja lisää seuraavat ohjeet kohtaan palvelimen_nimi.

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

Kaikki tässä artikkelissa esitetyt asetukset tehtiin Arch Linux -järjestelmässä, joka toimii palvelimena, mutta useimmat niistä, erityisesti Nginx-määritystiedostoja koskevat, ovat käytettävissä useimmissa Linux-järjestelmissä pienin eroin.