Crea host virtuali, directory protette da password e certificati SSL utilizzando "Nginx Web Server" in Arch Linux

Il precedente articolo "LEMP" di Arch Linux trattava solo le cose di base, dall'installazione dei servizi di rete (Nginx, database MySQL e PhpMyAdmin) e configurare la sicurezza minima richiesta per il server MySQL e PhpMyadmin.

Utili configurazioni Nginx su Arch Linux
Utili configurazioni Nginx su Arch Linux

Questo argomento è strettamente correlato alla precedente installazione di LEMP su Arch Linux e ti guiderà attraverso l'impostazione di configurazioni più complesse per lo stack LEMP, in particolare Nginx configurazioni del server web, come creare Host virtuali, utilizzo Directory protette da password, crea e configura HTTP Secure Sockets Layer, HTTP non sicuro reindirizza a HTTPS e ti presenterà anche alcuni utili script Bash che faciliteranno il lavoro sull'attivazione degli host virtuali e genereranno Certificato e chiavi SSL.

Requisiti

Installa LEMP con il database MariaDB in Arch Linux

Passaggio 1: abilita gli host virtuali su Nginx

Uno dei metodi più semplici per abilitare Host virtuali sta usando includere istruzioni sul file di configurazione principale di Nginx, che semplifica il lavoro di ulteriori configurazioni ed efficiente perché puoi creare file semplici per ogni nuovo host e mantenere il file di configurazione principale pulitore.

Questo approccio funziona allo stesso modo di su Server Web Apache, la prima cosa che devi fare è specificare il nuovo URI percorso in cui Nginx dovrebbe leggere le direttive dei file.

1. Quindi, apri nginx.conf file principale che si trova su /etc/nginx/ percorso di sistema e in basso, prima dell'ultima parentesi graffa "}"aggiungere il percorso in cui risiederanno i futuri file di configurazione dell'host virtuale.

$ sudo nano /etc/nginx/nginx.conf

In fondo aggiungi la seguente dichiarazione.

includi /etc/nginx/sites-enabled/*.conf;
Abilita host virtuali su Nginx
Abilita host virtuali su Nginx

Questa direttiva dice a Nginx che dovrebbe leggere tutti i file che si trovano in /etc/nginx/sites-enabled/ che finisce con a .conf estensione.

2. Il prossimo passo è creare siti abilitati directory e un'altra, chiamata siti-disponibili, dove archivi tutti i tuoi file di configurazione degli host virtuali.

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

3. Ora è il momento di creare un nuovo host virtuale. Questo esempio utilizzerà l'indirizzo IP del sistema come nome host virtuale, quindi crea un nuovo file denominato nome-ip.conf.

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

Aggiungi il seguente contenuto.

## Contenuto del file ##server { ascolta 80; nome_server 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; radice /srv/http; posizione / { indice index.html index.htm index.php; indice automatico attivo; autoindex_exact_size disattivato; autoindex_localtime attivo; } posizione /phpmyadmin { riscrivi ^/* /phpMyAdmin last; } posizione ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; (a seconda della configurazione del socket php-fpm) fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; includi fastcgi.conf; } }
Crea nuovo host virtuale
Crea nuovo host virtuale

La direttiva che attiva Virtual Host è nome del server dichiarazione sotto la porta di ascolto. Inoltre, un'altra importante direttiva qui è radice dichiarazione che indica Nginx Virtual Host per servire il contenuto del file da /srv/http/ percorso di sistema.

4. L'ultimo passo è creare /srv/http/ directory e make nome-ip.conf configurazione del file disponibile per la lettura di Nginx (usando il collegamento simbolico), quindi riavviare il demone per rendere visibili le nuove configurazioni.

$ sudo mkdir /srv/http/ $ sudo ln -s /etc/nginx/sites-available/name-ip.conf /etc/nginx/sites-enabled/ $ sudo systemctl riavvia nginx
Avvia il server Web Nginx
Avvia il server Web Nginx

5. Per verificarlo, punta il tuo browser all'indirizzo IP del sistema Arch e dovresti vedere che il contenuto web è diverso da http://localhost. Qui ho aggiunto un piccolo script php che controlla anche FastCGI PHP configurazioni come nello screenshot qui sotto.

$ sudo nano /srv/http/info.php
## Contenuto del file ##php. phpinfo(); 
Verifica le configurazioni PHP FastCGI
Verifica le configurazioni PHP FastCGI

6. Un altro metodo che ho sviluppato io stesso per abilitare o disabilitare gli host virtuali su Nginx è più elegante ed è ispirato ad Apache a2eniste sceneggiatura.

Per utilizzare questo metodo, apri un editor di file e crea un nuovo file, chiamato n2ensite, sul tuo $HOME percorso con il contenuto sottostante, renderlo eseguibile, eseguirlo con i privilegi di root e passare come opzione al nuovo nome dell'host virtuale senza .conf finale (compilalo liberamente per modificarlo secondo le tue esigenze).

$ sudo nano n2ensite
## Contenuto del file ###!/bin/bash. if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled; poi. eco "" altro. mkdir /etc/nginx/sites-available. mkdir /etc/nginx/sites-enabled. fi avail=/etc/nginx/sites-available/$1.conf. abilitato=/etc/nginx/sites-enabled/ site=`ls /etc/nginx/sites-available/` if [ "$#" != "1" ]; then echo "Usa script: n2ensite virtual_site" echo -e "\nHost virtuali disponibili:\n$site" exit 0. else if test -e $avail; poi. sudo ln -s $avail $abilitato. altro. echo -e "L'host virtuale $avail non esiste! Creane uno!\n$sito" uscita 0. fi. if test -e $abilitato/$1.conf; poi. echo "Successo!! Ora riavvia il server nginx: sudo systemctl restart nginx" altro. echo -e "L'host virtuale $avail non esiste!\nVedi gli host virtuali disponibili:\n$sito" uscita 0. fi. fi
Usa a2eniste Script
Usa a2eniste Script

Rendilo eseguibile ed eseguilo come spettacolo.

$ sudo chmod +x n2ensite. $ sudo ./n2ensite your_virtual_host
Abilita host virtuale
Abilita host virtuale

7. Per disabilitare gli host virtuali, crea un nuovo n2dissite file con il seguente contenuto e applicare le stesse impostazioni di cui sopra.

$ sudo nano n2dissite
## Contenuto del file ###!/bin/bash. avail=/etc/nginx/sites-enabled/$1.conf. abilitato=/etc/nginx/sites-enabled. site=`ls /etc/nginx/sites-enabled/` if [ "$#" != "1" ]; then echo "Usa script: n2dissite virtual_site" echo -e "\nHost virtuali disponibili: \n$site" exit 0. altro. if test -e $avail; poi. sudo rm $avail. altro. echo -e "L'host virtuale $avail non esiste! In uscita!" uscita 0. fi. if test -e $abilitato/$1.conf; poi. echo "Errore!! Impossibile rimuovere l'host virtuale $avail!" altro. echo -e "Successo! $avail è stato rimosso!\nRiavvia Nginx: sudo systemctl restart nginx" uscita 0. fi. fi
Disabilita gli host virtuali
Disabilita gli host virtuali

8. Ora puoi usare questi due script per abilitare o disabilitare qualsiasi host virtuale ma se vuoi applicarlo come comandi a livello di sistema basta copiare entrambi gli script su /usr/local/bin/ e quindi puoi usarlo senza specificare il percorso.

$ sudo cp n2ensite n2dissite /usr/local/bin/
Usa lo script n2ensite per abilitare o disabilitare gli host
Usa lo script n2ensite per abilitare o disabilitare gli host

Passaggio 2: abilitare SSL con host virtuali su Nginx

SSL (Secure Sockets Layer) è un protocollo progettato per crittografare le connessioni HTTP su reti o Internet, che fanno sì che il flusso di dati sia trasmesso su un canale sicuro utilizzando chiavi di crittografia simmetriche/asimmetriche ed è fornito in Arch Linux da Pacchetto OpenSSL.

$ sudo pacman -S openssl
Installa Openssl su Arch Linux
Installa il pacchetto Openssl

9. Per abilitare le connessioni HTTPS con Nginx la prima cosa che devi fare è generare le chiavi degli host virtuali. Inoltre, per semplificare le cose, ho sviluppato un piccolo script che genera automaticamente chiavi crittografiche su /etc/nginx/ssl percorso della directory, utilizzando la denominazione dell'host virtuale come nomi delle chiavi.

Crea un file chiamato nginx_gen_ssl e aggiungi il seguente contenuto.

$ sudo nano nginx_gen_ssl
## Contenuto del file ###!/bin/bash. mkdir /etc/nginx/ssl. cd /etc/nginx/ssl echo -e "Inserisci il tuo FQDN dell'host virtuale: \nQuesto genererà il nome predefinito per il certificato SSL Nginx!" 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 " Il certificato $cert è stato generato!\nCollegalo al sito web disponibile di nginx ssl!" ls -all /etc/nginx/ssl. esci 0
Genera chiavi host virtuali
Genera chiavi host virtuali

10. Dopo che lo script è stato creato, aggiungi le autorizzazioni di esecuzione, eseguilo e fornisci le opzioni del certificato, la più importante delle quali Nome comune campo (aggiungere il nome di dominio ufficiale qui) e lasciare vuoti i campi Password e Società facoltativi.

$ sudo chmod +x nginx_gen_ssl. $ sudo ./nginx_gen_ssl
Imposta i permessi di esecuzione
Imposta i permessi di esecuzione
Genera chiavi SSL
Genera chiavi SSL

Al termine dell'attività di generazione delle chiavi, verrà visualizzato un elenco con tutte le chiavi disponibili nella directory Nginx ssl.

Elenca tutte le chiavi disponibili
Elenca tutte le chiavi disponibili

Inoltre, se vuoi che questo script venga utilizzato come comando di sistema, copialo o spostalo in /usr/local/bin/.

$ sudo mv nginx_gen_ssl /usr/local/bin

11. Dopo aver generato le chiavi necessarie per Nginx SSL Virtual Host, è il momento di creare effettivamente il file di configurazione SSL Virtual Host. Usa lo stesso indirizzo IP di sistema per l'host virtuale come sopra su nome del server direttiva ma, modifica leggermente il nome del file dell'host virtuale aggiungendo prima ssl .conf, per ricordarti che questo file sta per nome-ip Host virtuale SSL.

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

Su questo file cambia ascoltare dichiarazione di porta a 443 ssl e fornire i percorsi dei file chiave SSL e certificato con quelli creati in precedenza per apparire come nell'estratto seguente.

## Contenuto del file ##server { ascolta 443 ssl; nome_server 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 condiviso: SSL: 1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers attivo; access_log /var/log/nginx/192.168.1.33-ssl.access.log; error_log /var/log/nginx/192.168.1.33-ssl.error.log; radice /srv/http; posizione / { indice index.html index.htm index.php; indice automatico attivo; autoindex_exact_size disattivato; autoindex_localtime attivo; } posizione /phpmyadmin { riscrivi ^/* /phpMyAdmin last; } posizione ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; (a seconda della configurazione del socket php-fpm) fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; includi fastcgi.conf; } }
Crea host virtuali SSL
Crea host virtuali SSL

12. Dopo che il file è stato creato usa n2ensite script o ln riga di comando per attivarlo (crea un collegamento simbolico al file in siti abilitati directory), quindi riavvia il demone Nginx per applicare le impostazioni.

$ sudo ./n2ensite name-ip-ssl. O. $ sudo ln -s /etc/nginx/sites-available/name-ip-ssl.conf /etc/nginx/sites-enabled/ $ sudo systemctl riavvia nginx
Host virtuali SSL attivi
Host virtuali SSL attivi

13. Punta nuovamente il tuo browser su URL IP di Arch ma questa volta usando il protocollo HTTPS – https://192.168.1.33 sul mio sistema- e a Connessione non attendibile dovrebbe apparire un errore di sicurezza ( Aggiungi e conferma l'eccezione di sicurezza per andare più avanti nella pagina).

Verifica la connessione HTTPS
Verifica la connessione HTTPS
Verifica il contenuto dell'host virtuale
Verifica il contenuto dell'host virtuale
Verifica la configurazione PHP
Verifica la configurazione PHP

Come puoi ora vedere, il tuo Nginx Virtual Host offre lo stesso contenuto del precedente nome-ip host ma questa volta utilizzando una connessione protetta HTTP.

Passaggio 3: accedi a PhpMyAdmin tramite host virtuale

Se Virtual Host è abilitato su Nginx, non abbiamo più accesso a http://localhost contenuto del percorso ( localhost di solito serve il contenuto utilizzando l'indirizzo IP di loopback o l'indirizzo IP del sistema se non è configurato diversamente) perché abbiamo usato l'IP del sistema Arch come nome del server quindi il nostro percorso dei contenuti è cambiato.

14. Il metodo più semplice per accedere a PhpMyAdmin attraverso il web è creare un collegamento simbolico tra /usr/share/webapps/phpMyAdmin/ percorso e il nostro nuovo percorso definito dell'host virtuale (/srv/http).

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

15. Dopo aver eseguito il comando sopra, aggiorna la tua pagina e vedrai apparire una nuova cartella phpMyAdmin, se indice automatico dichiarazione abilitata su Nginx Virtual Host o punta il tuo URL direttamente alla cartella PhpMyAdmin https://arch_IP/phpMyAdmin.

16. Se desideri disinfettare la stringa phpMyAdmin sul browser, modifica i file degli host virtuali e aggiungi il seguente contenuto sotto il blocco del server.

location /phpmyadmin { riscrivi ^/* /phpMyAdmin last; }
Accedi a PhpMyAdmin tramite host virtuale
Accedi a PhpMyAdmin tramite host virtuale

Passaggio 4: abilitare la directory protetta da password su Nginx

A differenza di Apache, Nginx usa HttpAuthBasic modulo per abilitare Directory protette da password ma non fornisce strumenti per creare un file crittografato .htpasswd file.

17. Per ottenere la protezione tramite password della directory con Nginx su Arch Linux, installare il server Web Apache e utilizzare i suoi strumenti per generare un file crittografato .htaccess file.

$ sudo pacman -S apache

18. Dopo aver installato Apache, crea una nuova directory sotto /etc/nginx/ chiamato intuitivamente passwd dove .htpasswd il file verrà archiviato e utilizzato htpasswd comando con -C attiva il primo utente aggiunto per generare il file, quindi se vuoi aggiungere più utenti usa htpasswd senza -C interruttore.

$ 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
Abilita directory protetta da password
Abilita directory protetta da password

19. Al fine di proteggere nome-ip-ssl Radice dell'host virtuale /srv/http/ percorso servito con tutte le sue sottocartelle e i file sottostanti aggiungere le seguenti istruzioni all'interno del blocco del server dell'host virtuale sotto la direttiva root e puntarlo su assoluto .htpasswd percorso del file.

auth_basic "Sito Web con restrizioni"; auth_basic_user_file /etc/nginx/passwd/.htpasswd;
Configurazione del sito Web limitata
Configurazione del sito Web limitata

20. Dopo aver riavviato il servizio Nginx, aggiorna la pagina e Autenticazione richiesta il popup dovrebbe apparire esigente per le tue credenziali.

Autenticazione richiesta
Autenticazione richiesta

Ora hai abilitato con successo Nginx Directory protette da password ma tieni presente che allo stesso tempo il server Web Apache è installato nel tuo sistema, quindi assicurati che rimanga disabilitato e in ogni caso non avviarlo perché può portare a porte in conflitto con Nginx.

Passaggio 5: reindirizzare HTTP a HTTPS su Nginx

21. Se ti piace che i browser reindirizzino automaticamente tutte le richieste HTTP non sicure al protocollo HTTPS, apri e modifica sei non-ssl Host virtuale e aggiungi le seguenti istruzioni sotto nome del server direttiva.

riscrivi ^ https://$server_name$request_uri? permanente;
Reindirizza HTTP a HTTPS su Nginx
Reindirizza HTTP a HTTPS

Tutte le impostazioni presentate in questo articolo sono state effettuate sotto un Arch Linux sistema che funge da server, ma la maggior parte di essi, in particolare quelli relativi ai file di configurazione di Nginx, sono disponibili sulla maggior parte dei sistemi Linux con lievi differenze.

Teachs.ru