Lag virtuelle verter, passordbeskyttelseskataloger og SSL-sertifikater ved å bruke Nginx Web Server i Arch Linux


Den forrige Arch Linux 'LEMP'-artikkelen dekket bare grunnleggende ting, fra installasjon av nettverkstjenester (Nginx, MySQL-database og PhpMyAdmin) og konfigurering av minimal sikkerhet som kreves for MySQL-server og PhpMyadmin.

Dette emnet er strengt relatert til tidligere installasjon av LEMP på Arch Linux og vil veilede deg gjennom å sette mer komplekse konfigurasjoner for LEMP-stack, spesielt Nginx nettserverkonfigurasjoner, som å lage Virtuelle verter , bruk Passordbeskyttede kataloger, opprett og konfigurer HTTP Secure Sockets Layer, HTTP-usikre omdirigeringer til HTTPS og vil også presentere deg noen nyttige Bash-skript som vil lette jobben med å aktivere virtuelle verter og generere SSL-sertifikat og nøkler.

Installer LEMP med MariaDB Database i Arch Linux

Trinn 1: Aktiver virtuelle verter på Nginx

En av de enkleste metodene for å aktivere Virtual Hosts er å bruke include-setninger på hovedkonfigurasjonsfilen til Nginx, noe som gjør jobben med ytterligere konfigurasjoner enklere og mer effektiv fordi du kan lage enkle filer for hver ny vert og hold hovedkonfigurasjonsfilen renere.

Denne tilnærmingen fungerer på samme måte som på Apache Web Server, det første du må gjøre er å spesifisere den nye URI-banen der Nginx skal lese fildirektiver.

1. Så åpne nginx.conf hovedfil som ligger på /etc/nginx/ systembane og nederst, før siste krøllete parentes }» legg til banen der fremtidige konfigurasjonsfiler for Virtual Host vil ligge.

$ sudo nano /etc/nginx/nginx.conf

Legg til følgende uttalelse nederst.

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

Dette direktivet forteller Nginx at det skal lese alle filer som finnes i /etc/nginx/sites-enabled/ som slutter med en .conf-utvidelse.

2. Neste trinn er å opprette nettsteder-aktivert-katalog og en annen, kalt nettsteder-tilgjengelig, hvor du lagrer alle konfigurasjonsfilene dine for virtuelle verter.

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

3. Nå er det på tide å opprette en ny virtuell vert. Dette eksemplet vil bruke systemets IP-adresse som virtuelt vertsnavn, så opprett en ny fil med navnet name-ip.conf.

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

Legg til følgende innhold.

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

Direktivet som aktiverer Virtual Host er server_name-setningen under lytteporten. Et annet viktig direktiv her er også en root-setning som peker på Nginx Virtual Host for å tjene filinnhold fra /srv/http/ systembane.

4. Det siste trinnet er å opprette /srv/http/ katalog og gjøre name-ip.conf filkonfigurasjon tilgjengelig for Nginx-lesing (ved hjelp av symbolsk lenke), og start deretter daemon på nytt for å gjøre nye konfigurasjoner synlige.

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

5. For å bekrefte det, pek nettleseren til Arch-systemets IP-adresse, og du bør se at nettinnholdet er forskjellig fra http://localhost. Her har jeg lagt til et lite php-skript som også sjekker FastCGI PHP-konfigurasjoner som i skjermbildet nedenfor.

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

<?php
phpinfo();
?>

6. En annen metode som jeg selv har utviklet for å aktivere eller deaktivere virtuelle verter på Nginx er en mer elegant metode, og den er inspirert fra Apache a2eniste-skript.

For å bruke denne metoden, åpne et filredigeringsprogram og lag en ny fil, kalt n2ensite, på $HOME-banen din med innholdet nedenfor, gjør den kjørbar, kjør den med root-rettigheter og pass som et alternativ til ditt nye virtuelle vertsnavn uten .conf-endelse (fyll gratis for å endre det i henhold til dine behov).

$ 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

Gjør det kjørbart og kjør det som show.

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

7. For å deaktivere virtuelle verter, opprette en ny n2dissite-fil med følgende innhold og bruk de samme innstillingene som ovenfor.

$ 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. Nå kan du bruke disse to skriptene til å aktivere eller deaktivere hvilken som helst virtuell vert, men hvis du vil bruke den som systemomfattende kommandoer, er det bare å kopiere begge skriptene til /usr/local/bin/ og så kan du bruk den uten å spesifisere bane.

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

Trinn 2: Aktiver SSL med virtuelle verter på Nginx

SSL (Secure Sockets Layer) er en protokoll utviklet for å kryptere HTTP-tilkoblinger over nettverk eller Internett, som gjør at dataflyten skal overføres over en sikker kanal ved hjelp av symmetriske/asymmetriske kryptografinøkler og leveres i Arch Linux by OpenSSL-pakken.

$ sudo pacman -S openssl

9. For å aktivere HTTPS-tilkoblinger med Nginx er det første du må tenke på å generere Virtual Hosts-nøkler. For å forenkle ting har jeg også utviklet et lite skript som automatisk genererer kryptografiske nøkler på /etc/nginx/ssl katalogbane, ved å bruke Virtual Host-navn som nøkkelnavn.

Opprett en fil med navnet nginx_gen_ssl og legg til følgende innhold.

$ 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. Etter at skriptet er opprettet, legg til kjøringstillatelser, kjør det og oppgi sertifikatalternativene, det viktigste er Fellesnavn-feltet (legg til offisielt domenenavn her) og la passord og valgfritt firma stå tomme .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

På slutten av nøkkelgenereringsoppgaven vil en liste med alle tilgjengelige nøkler under Nginx ssl-katalogen vises.

Også hvis du vil at dette skriptet skal brukes som en systemkommando, kopier eller flytt det til /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Etter at vi har generert nødvendige nøkler for Nginx SSL Virtual Host, er det på tide å faktisk lage SSL Virtual Host-konfigurasjonsfil. Bruk samme system-IP-adresse for Virtual Host som ovenfor i server_name-direktivet, men endre filnavnet for Virtual Host litt ved å legge til ssl før .conf, for å minne deg på at denne filen står for name-ip SSL Virtual Host.

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

På denne filen endrer du lytt portsetningen til 443 ssl og gir SSL- og sertifikatnøkkelfilbanene med de som ble opprettet tidligere, slik at de ser ut som i utdraget nedenfor.

## 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. Etter at filen er opprettet, bruk n2ensite-skriptet eller ln-kommandolinjen for å aktivere den (oppretter en symbolsk filkobling i sites-enabled-katalogen ), start deretter Nginx daemon på nytt for å bruke innstillinger.

$ 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. Pek igjen nettleseren til Arch IP URL, men denne gangen bruker HTTPS-protokollen – https://192.168.1.33 på systemet mitt – og en Connection Untrusted sikkerhetsfeil skal vises ( Legg til og bekreft sikkerhetsunntak for å gå videre på siden).

Som du nå kan se, serverer Nginx Virtual Host det samme innholdet som forrige name-ip-vert, men denne gangen bruker du en sikker HTTP-tilkobling.

Trinn 3: Få tilgang til PhpMyAdmin gjennom Virtual Host

Hvis Virtual Host er aktivert på Nginx, har vi ikke lenger tilgang til http://localhost baneinnhold (localhost serverer vanligvis innhold ved hjelp av loopback IP-adresse eller system-IP-adresse hvis ikke er konfigurert på annen måte) fordi vi har brukte Arch-systemets IP som server_name, så innholdsbanen vår er endret.

14. Den enkleste metoden for å få tilgang til PhpMyAdmin via nettet er å lage en symbolsk kobling mellom /usr/share/webapps/phpMyAdmin/-banen og vår nye definerte virtuelle vertsbane (/srv/http).

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

15. Etter at du har utført kommandoen ovenfor, oppdater siden din og du vil se en ny mappe phpMyAdmin vises, hvis autoindex-setningen er aktivert på Nginx Virtual Host eller pek URL-adressen din direkte til PhpMyAdmin-mappen https: //arch_IP/phpMyAdmin.

16. Hvis du ønsker å rense phpMyAdmin-strengen i nettleseren, rediger Virtual Hosts-filene dine og legg til følgende innhold under serverblokk.

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

Trinn 4: Aktiver passordbeskyttet katalog på Nginx

I motsetning til Apache, bruker Nginx HttpAuthBasic-modulen for å aktivere Passordbeskyttede kataloger, men gir ingen verktøy for å lage en kryptert .htpasswd-fil.

17. For å oppnå katalogpassordbeskyttelse med Nginx på Arch Linux, installer Apache-nettserveren og bruk dens verktøy til å generere en kryptert .htaccess-fil.

$ sudo pacman -S apache

18. Etter at du har installert Apache, oppretter du en ny katalog under /etc/nginx/ kalt intuitivt passwd hvor .htpasswd filen vil bli lagret og bruk htpasswd kommando med –c slå på først lagt til bruker for å generere fil, og hvis du vil legge til flere brukere, bruk htpasswd uten –c bryter.

$ 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. For å beskytte name-ip-ssl Virtual Host root /srv/http/ servert bane med alle undermapper og filer under den, legg til følgende instruksjoner i Virtual Host-serverblokk under rotdirektivet og pek den til den absolutte .htpasswd-filbanen.

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

20. Etter at du har startet Nginx-tjenesten på nytt, oppdater siden og en popup for Autentisering kreves skal vises krevende for legitimasjonen din.

Nå har du aktivert Nginx Password Protected Directory, men vær oppmerksom på at samtidig som Apache-nettserveren er installert i systemet ditt, så sørg for at den forblir deaktivert og ikke start den på noen måte fordi det kan føre til porter som er i konflikt med Nginx.

Trinn 5: Omdiriger HTTP til HTTPS på Nginx

21. Hvis du vil at nettlesere automatisk omdirigerer alle usikre HTTP-forespørsler til HTTPS-protokollen åpne og redigere, er du ikke-ssl Virtual Host og legg til følgende instruksjon under server_name-direktivet .

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

Alle innstillingene som presenteres i denne artikkelen ble gjort under et Arch Linux-system som fungerer som en server, men de fleste av dem, spesielt de som gjelder Nginx-konfigurasjonsfiler, er tilgjengelige på de fleste Linux-systemer med litt forskjeller.