Opret virtuelle værter, adgangskodebeskyttelsesmapper og SSL-certifikater ved hjælp af "Nginx Web Server" i Arch Linux


Den forrige Arch Linux 'LEMP' artikel dækkede bare grundlæggende ting lige fra installation af netværkstjenester (Nginx, MySQL-database og PhpMyAdmin) og konfiguration af minimal sikkerhed, der kræves til MySQL-server og PhpMyadmin.

Dette emne er strengt relateret til tidligere installation af LEMP på Arch Linux og vil guide dig gennem indstilling af mere komplekse konfigurationer til LEMP-stak, især Nginx webserverkonfigurationer, som f.eks. Oprettelse af Virtuelle værter , brug adgangskodebeskyttede mapper , opret og konfigurer HTTP Secure Sockets Layer , HTTP usikker omdirigeringer til HTTPS og vil også præsentere dig nogle nyttige Bash-scripts, der vil gøre jobbet lettere ved aktivering af virtuelle værter og generere SSL-certifikat og nøgler .

Installer LEMP med MariaDB Database i Arch Linux

Trin 1: Aktivér virtuelle værter på Nginx

En af de enkleste metoder til at aktivere Virtuelle værter er at bruge inkludere udsagn om Nginx hovedkonfigurationsfil, hvilket gør jobbet med yderligere konfigurationer mere enkel og effektiv, fordi du kan oprette enkle filer for hver ny vært og hold hovedkonfigurationsfil renere.

Denne tilgang fungerer på samme måde som på Apache Web Server , den første ting du skal gøre er at specificere den nye URI sti, hvor Nginx skal læse fildirektiver.

1. Åbn nginx.conf hovedfilen placeret på /etc/nginx/ systemstien og i bunden, inden den sidste krøllede parentes “} ”Tilføj stien, hvor fremtidige Virtual Host-konfigurationsfiler vil opholde sig.

$ sudo nano /etc/nginx/nginx.conf

Nederst tilføj følgende udsagn.

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

Dette direktiv fortæller Nginx, at det skal læse alle filer, der findes i /etc/nginx/sites-enabled/, der slutter med en .conf udvidelse.

2. Det næste trin er at oprette websteds-aktiveret bibliotek og et andet, kaldet websteds-tilgængeligt , hvor du gemmer alle dine Virtual Hosts-konfigurationsfiler.

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

3. Nu er det tid til at oprette en ny virtuel vært. Dette eksempel bruger systemets IP-adresse som virtuelt værtsnavn, så opret en ny fil med navnet name-ip.conf .

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

Tilføj følgende indhold.

## 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, der aktiverer Virtual Host, er servernavn -erklæring under lytteport. Et andet vigtigt direktiv her er også en root -erklæring, der peger på Nginx Virtual Host til at tjene filindhold fra /srv/http/ systemstien.

4. Det sidste trin er at oprette /srv/http/ bibliotek og gøre name-ip.conf filkonfiguration tilgængelig til Nginx-læsning (ved hjælp af symbolsk link), og genstart daemon for at gøre nye konfigurationer 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 at bekræfte det skal du pege din browser på Arch-systemets IP-adresse, og du skal se, at webindholdet er forskelligt fra http:/localhost . Her har jeg tilføjet et lille php-script, der også kontrollerer FastCGI PHP -konfigurationer som i skærmbilledet nedenfor.

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

<?php
phpinfo();
?>

6. En anden metode, som jeg selv har udviklet til at aktivere eller deaktivere virtuelle værter på Nginx, er en mere elegant metode, og den er inspireret af Apache a2eniste script.

For at bruge denne metode skal du åbne en fileditor og oprette en ny fil, kaldet n2ensite , på din $ HOME sti med nedenstående indhold, gør den eksekverbar, kør den med root-rettigheder og videregive som en mulighed til dit nye virtuelle værtsnavn uden .conf slutning (udfyld gratis for at ændre det efter 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

Gør det eksekverbart og kør det som show.

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

7. For at deaktivere virtuelle værter skal du oprette en ny n2dissite -fil med følgende indhold og anvende de samme indstillinger 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. Nu kan du bruge disse to scripts til at aktivere eller deaktivere enhver virtuel vært, men hvis du vil anvende den som systemomfattende kommandoer, skal du bare kopiere begge scripts til /usr/local/bin/ og så kan du Brug det uden at angive sti.

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

Trin 2: Aktivér SSL med virtuelle værter på Nginx

SSL ( Secure Sockets Layer ) er en protokol designet til at kryptere HTTP-forbindelser over netværk eller internet, som får datastrøm til at blive transmitteret over en sikker kanal ved hjælp af symmetriske/asymmetriske kryptografitaster og leveres i Arch Linux af OpenSSL-pakke.

$ sudo pacman -S openssl

9. For at aktivere HTTPS-forbindelser med Nginx er den første, du skal gøre, at generere virtuelle værtsnøgler. For at forenkle tingene har jeg også udviklet et lille scripts, der automatisk genererer kryptografiske nøgler på /etc/nginx/ssl bibliotekstien ved hjælp af Virtual Host-navngivning som nøglenavne.

Opret en fil med navnet nginx_gen_ssl , og tilføj følgende indhold.

$ 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. Når scriptet er oprettet, tilføj eksekveringstilladelser, kør det og angiv dine certifikatindstillinger, hvor det vigtigste er Common Name -feltet (tilføj officielt domænenavn her) og lad felterne Password og Optional Company være tomme .

$ sudo chmod +x nginx_gen_ssl
$ sudo ./nginx_gen_ssl

I slutningen af nøgler, der genererer en opgave, vises en liste med alle tilgængelige nøgler under Nginx ssl-biblioteket.

Også hvis du vil have dette script til at blive brugt som en systemkommando, skal du kopiere eller flytte det til /usr/local/bin/.

$ sudo mv nginx_gen_ssl  /usr/local/bin

11. Når vi har genereret nøgler, der er nødvendige for Nginx SSL Virtual Host, er det tid til faktisk at oprette SSL Virtual Host-konfigurationsfil. Brug den samme system-IP-adresse til Virtual Host som ovenfor i servernavn -direktivet, men skift det virtuelle værts filnavn ved at tilføje ssl før .conf for at minde dig om, at denne fil står for name-ip SSL Virtual Host.

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

På denne fil skift lyt porterklæring til 443 ssl og angiv stier til SSL og certifikatnøglefiler med dem, der blev oprettet tidligere, for at se ud i nedenstående uddrag.

## 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. Når filen er oprettet, skal du bruge n2ensite script eller ln kommandolinje til at aktivere den (opretter et filsymbolisk link i webstedsaktiveret bibliotek ), og genstart Nginx-dæmonen for at anvende indstillinger.

$ 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. Ret igen din browser til Arch IP URL , men denne gang ved hjælp af HTTPS-protokol - https://192.168.1.33 på mit system - og en Connection Untrusted sikkerhedsfejl skal vises ( Tilføj og bekræft sikkerhedsundtagelse for at gå længere på siden).

Som du nu kan se, serverer din Nginx Virtual Host det samme indhold som den tidligere name-ip vært, men denne gang ved hjælp af en HTTP-sikker forbindelse.

Trin 3: Få adgang til PhpMyAdmin via Virtual Host

Hvis Virtual Host er aktiveret på Nginx, har vi ikke længere adgang til http:/localhost stiens indhold (localhost serverer normalt indhold ved hjælp af loopback IP-adresse eller systemets IP-adresse, hvis ikke andet er konfigureret), fordi vi har brugte Arch system IP som servernavn , så vores indholdssti er ændret.

14. Den enkleste metode til at få adgang til PhpMyAdmin via internettet er at oprette et symbolsk link mellem /usr/share/webapps/phpMyAdmin/ sti og vores nye definerede Virtual Host-sti (/srv/http ).

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

15. Når du har udført ovenstående kommando, skal du opdatere din side, og du vil se en ny mappe phpMyAdmin vises, hvis autoindex -erklæring er aktiveret på Nginx Virtual Host eller peger din URL direkte til PhpMyAdmin-mappen https:/arch_IP/phpMyAdmin .

16. Hvis du vil rense phpMyAdmin-strengen i browseren, skal du redigere dine virtuelle værtsfiler og tilføje følgende indhold under serverblok.

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

Trin 4: Aktivér adgangskodebeskyttet mappe på Nginx

I modsætning til Apache bruger Nginx HttpAuthBasic -modulet til at aktivere adgangskodebeskyttede mapper , men indeholder ikke nogen værktøjer til at oprette en krypteret .htpasswd -fil.

17. For at opnå katalogadgangskodebeskyttelse med Nginx på Arch Linux skal du installere Apache-webserveren og bruge dens værktøjer til at generere en krypteret .htaccess-fil.

$ sudo pacman -S apache

18. Når du har installeret Apache, skal du oprette en ny mappe under /etc/nginx/ med navnet intuitivt passwd, hvor .htpasswd -fil gemmes, og brug htpasswd kommando med –c tænd for den første tilføjede bruger for at generere fil, så hvis du vil tilføje flere brugere, skal du bruge htpasswd uden –c switch.

$ 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 at beskytte name-ip-ssl Virtual Host-rod /srv/http/ serveret sti med alle dens undermapper og filer under den skal du tilføje følgende instruktioner i din Virtual Host-serverblok under roddirektivet og peg den til absolut .htpasswd filsti.

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

20. Når du har genstartet Nginx-tjenesten, skal opdateringssiden og en godkendelse krævet pop op vises krævende for dine legitimationsoplysninger.

Nu har du aktiveret Nginx adgangskodebeskyttede mapper , men vær opmærksom på, at Apache-webserveren på samme tid er installeret i dit system, så sørg for at den forbliver deaktiveret og på ingen måde ikke starte den, fordi det kan føre til havne, der er i konflikt med Nginx.

Trin 5: Omdiriger HTTP til HTTPS på Nginx

21. Hvis du gerne vil have, at browsere automatisk omdirigerer alle usikre HTTP-anmodninger til HTTPS-protokollen, åbnes og redigeres, er du ikke-ssl Virtuel vært og tilføjer følgende instruktion under servernavn -direktivet .

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

Alle indstillinger, der præsenteres i denne artikel, blev foretaget under et Arch Linux -system, der fungerer som en server, men de fleste af dem, især dem, der vedrører Nginx-konfigurationsfiler, er tilgængelige på de fleste Linux-systemer med lidt forskelle.