Ricerca nel sito web

Come configurare un server Apache autonomo con hosting virtuale basato sul nome con certificato SSL - Parte 4


Un LFCE (abbreviazione di Linux Foundation Certified Engineer) è un professionista qualificato che ha l'esperienza per installare, gestire e risolvere i problemi dei servizi di rete nei sistemi Linux ed è responsabile di la progettazione, implementazione e manutenzione continua dell'architettura del sistema.

In questo articolo ti mostreremo come configurare Apache per servire contenuti web e come impostare host virtuali e SSL basati sul nome, incluso un certificato autofirmato.

Presentazione del programma di certificazione Linux Foundation (LFCE).

Nota: questo articolo non vuole essere una guida completa su Apache, ma piuttosto un punto di partenza per lo studio autonomo su questo argomento per LFCE esame. Per questo motivo non tratteremo nemmeno il bilanciamento del carico con Apache in questo tutorial.

Potresti già conoscere altri modi per eseguire le stesse attività, il che OK considerando che la certificazione Linux Foundation è strettamente basata sulle prestazioni. Pertanto, finché "porti a termine il lavoro", hai buone possibilità di superare l'esame.

Requisiti

Fare riferimento alla Parte 1 della serie attuale (“Installazione dei servizi di rete e configurazione dell'avvio automatico all'avvio”) per istruzioni sull'installazione e l'avvio di Apache.

A questo punto dovresti avere il server web Apache installato e funzionante. Puoi verificarlo con il seguente comando.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Nota: il comando precedente verifica la presenza di apache o httpd (i nomi più comuni per il demone web) nell'elenco dei processi in esecuzione. Se Apache è in esecuzione, otterrai un output simile al seguente.

Il metodo definitivo per testare l'installazione di Apache e verificare se è in esecuzione è avviare un browser Web e puntare all'IP del server. Dovremmo visualizzarci la seguente schermata o almeno un messaggio che conferma che Apache funziona.

Configurazione di Apache

Il file di configurazione principale per Apache può trovarsi in directory diverse a seconda della distribuzione.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

Fortunatamente per noi, le direttive di configurazione sono estremamente ben documentate nel sito web del progetto Apache. Faremo riferimento ad alcuni di essi in questo articolo.

Servire pagine in un server autonomo con Apache

L'utilizzo più basilare di Apache è quello di servire pagine web in un server autonomo dove non sono ancora stati configurati host virtuali. La direttiva DocumentRoot specifica la directory dalla quale Apache servirà i documenti delle pagine web.

Tieni presente che per impostazione predefinita, tutte le richieste vengono prese da questa directory, ma puoi anche utilizzare collegamenti simbolici e/o alias per puntare anche ad altre posizioni.

A meno che non corrisponda alla direttiva Alias (che consente di archiviare i documenti nel file system locale invece che nella directory specificata da DocumentRoot), il server aggiunge il percorso dall'URL richiesto alla radice del documento per creare il percorso del documento.

Ad esempio, dato il seguente DocumentRoot:

Quando il browser web punta a [IP server o nome host]/lfce/tecmint.html, il server aprirà /var/ www/html/lfce/tecmint.html (assumendo che tale file esista) e salva l'evento nel suo log di accesso con una risposta 200 (OK).

Il registro di accesso si trova generalmente all'interno di /var/log sotto un nome rappresentativo, come access.log o access_log. Potresti anche trovare questo registro (e anche il registro degli errori) all'interno di una sottodirectory (ad esempio, /var/log/httpd in CentOS). In caso contrario, l'evento non riuscito verrà comunque registrato nel registro degli accessi ma con una risposta 404 (Non trovato).

Inoltre, gli eventi non riusciti verranno registrati nel registro degli errori:

Il formato del log di accesso può essere personalizzato in base alle proprie esigenze utilizzando la direttiva LogFormat nel file di configurazione principale, mentre non è possibile fare lo stesso con il log degli errori .

Il formato predefinito del log di accesso è il seguente:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Dove ciascuna delle lettere precedute da un segno di percentuale indica che il server registra una determinata informazione:

String

Descrizione

 %h

 Nome host o indirizzo IP remoto

 %l

 Nome del registro remoto

 %u

 Utente remoto se la richiesta è autenticata

 %t

 Data e ora in cui è stata ricevuta la richiesta

 %r

 Prima riga di richiesta al server

 %>s

 Stato finale della richiesta

 %b

 Dimensione della risposta [byte]

e nickname è un alias opzionale che può essere utilizzato per personalizzare altri log senza dover inserire nuovamente l'intera stringa di configurazione.

Puoi fare riferimento alla direttiva LogFormat [sezione Formati di log personalizzati] nella documentazione di Apache per ulteriori opzioni.

Entrambi i file di registro (accesso e errore) rappresentano un'ottima risorsa per analizzare rapidamente a colpo d'occhio cosa sta succedendo sul server Apache. Inutile dire che sono il primo strumento utilizzato da un amministratore di sistema per risolvere i problemi.

Infine, un'altra direttiva importante è Listen, che dice al server di accettare le richieste in arrivo sulla porta specificata o sulla combinazione indirizzo/porta:

Se viene definito solo un numero di porta, Apache ascolterà la porta specificata su tutte le interfacce di rete (il carattere jolly * viene utilizzato per indicare "tutte le interfacce di rete").

Se vengono specificati sia l'indirizzo IP che la porta, Apache resterà in ascolto sulla combinazione di porta e interfaccia di rete specificate.

Tieni presente (come vedrai negli esempi seguenti) che è possibile utilizzare più direttive Listen contemporaneamente per specificare più indirizzi e porte da ascoltare. Questa opzione indica al server di rispondere alle richieste da uno qualsiasi degli indirizzi e delle porte elencati.

Configurazione di host virtuali basati sul nome

Il concetto di host virtuale definisce un singolo sito (o dominio) servito dalla stessa macchina fisica. In realtà, più siti/domini possono essere serviti da un singolo server “reale” come host virtuale. Questo processo è trasparente per l'utente finale, al quale sembra che i diversi siti siano serviti da server web distinti.

L'hosting virtuale basato sul nome consente al server di fare affidamento sul client per segnalare il nome host come parte delle intestazioni HTTP. Pertanto, utilizzando questa tecnica, molti host diversi possono condividere lo stesso indirizzo IP.

Ogni host virtuale è configurato in una directory all'interno di DocumentRoot. Nel nostro caso, utilizzeremo i seguenti domini fittizi per l'impostazione del test, ciascuno situato nella directory corrispondente:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Affinché le pagine vengano visualizzate correttamente, chmod la directory di ciascun VirtualHost su 755:

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

Successivamente, crea un file index.html di esempio all'interno di ciascuna directory public_html:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Infine, in CentOS e openSUSE aggiungi la seguente sezione in fondo a /etc/httpd/conf/httpd.conf o / etc/apache2/httpd.conf, rispettivamente, o semplicemente modificarlo se è già lì.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Tieni presente che puoi anche aggiungere ciascuna definizione di host virtuale in file separati all'interno della directory /etc/httpd/conf.d. Se si sceglie di farlo, ciascun file di configurazione deve essere nominato come segue:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

In altre parole, devi aggiungere .conf al sito o al nome di dominio.

In Ubuntu, ogni singolo file di configurazione è denominato /etc/apache2/sites-available/[nome sito].conf. Ciascun sito viene quindi abilitato o disabilitato rispettivamente con i comandi a2ensite o a2dissite, come segue.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

I comandi a2ensite e a2dissite creano collegamenti al file di configurazione dell'host virtuale e li posizionano (o rimuovono) in /etc/apache2/sites-enabled rubrica.

Per poter navigare su entrambi i siti da un'altra macchina Linux, dovrai aggiungere le seguenti righe nel file /etc/hosts in quella macchina per reindirizzare le richieste a quei domini a un IP specifico indirizzo.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

Come misura di sicurezza, SELinux non consentirà ad Apache di scrivere log in una directory diversa da quella predefinita /var/log/httpd.

Puoi disabilitare SELinux o impostare il giusto contesto di sicurezza:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

dove xxxxxx è la directory all'interno di /var/www/html in cui hai definito i tuoi host virtuali.

Dopo aver riavviato Apache, dovresti vedere la seguente pagina agli indirizzi sopra indicati:

Installazione e configurazione SSL con Apache

Infine, creeremo e installeremo un certificato autofirmato da utilizzare con Apache. Questo tipo di configurazione è accettabile in ambienti piccoli, come una LAN privata.

Tuttavia, se il tuo server esporrà i contenuti al mondo esterno tramite Internet, ti consigliamo di installare un certificato firmato da una terza parte per confermarne l'autenticità. In ogni caso, un certificato ti consentirà di crittografare le informazioni trasmesse al, dal o all'interno del tuo sito.

In CentOS e openSUSE, devi installare il pacchetto mod_ssl.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

Mentre in Ubuntu dovrai abilitare il modulo ssl per Apache.

a2enmod ssl

I passaggi seguenti vengono spiegati utilizzando un server di prova CentOS, ma la tua configurazione dovrebbe essere quasi identica nelle altre distribuzioni (se riscontri qualsiasi tipo di problema, non esitare a lasciare le tue domande utilizzando i commenti modulo).

Passaggio 1 [facoltativo]: crea una directory in cui archiviare i tuoi certificati.

mkdir /etc/httpd/ssl-certs

Passaggio 2: genera il tuo certificato autofirmato e la chiave che lo proteggerà.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Una breve spiegazione delle opzioni sopra elencate:

  1. req -X509 indica che stiamo creando un certificato x509.
  2. -nodes (NO DES) significa "non crittografare la chiave".
  3. -days 365 è il numero di giorni per cui sarà valido il certificato.
  4. -newkey rsa:2048 crea una chiave RSA a 2048 bit.
  5. -keyout /etc/httpd/ssl-certs/apache.key è il percorso assoluto della chiave RSA.
  6. -out /etc/httpd/ssl-certs/apache.crt è il percorso assoluto del certificato.

Passaggio 3: apri il file di configurazione dell'host virtuale scelto (o la sezione corrispondente in /etc/httpd/conf/httpd.conf come spiegato in precedenza) e aggiungi le seguenti righe a una dichiarazione di host virtuale in ascolto sulla porta 443.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Tieni presente che è necessario aggiungere.

NameVirtualHost *:443

in alto, proprio sotto

NameVirtualHost *:80

Entrambe le direttive indicano ad Apache di restare in ascolto sulle porte 443 e 80 di tutte le interfacce di rete.

L'esempio seguente è tratto da /etc/httpd/conf/httpd.conf:

Quindi riavvia Apache,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

E punta il browser su https://www.ilovelinux.com. Ti verrà presentata la seguente schermata.

Vai avanti e fai clic su "Comprendo i rischi" e "Aggiungi eccezione".

Infine, seleziona "Memorizza permanentemente questa eccezione" e fai clic su "Conferma eccezione di sicurezza".

E verrai reindirizzato alla tua home page utilizzando https.

Riepilogo

In questo post abbiamo mostrato come configurare l'hosting virtuale Apache e basato sul nome con SSL per proteggere la trasmissione dei dati. Se per qualche motivo hai riscontrato problemi, non esitare a farcelo sapere utilizzando il modulo di commento qui sotto. Saremo più che lieti di aiutarti a eseguire una configurazione di successo.

Leggi anche

  1. Hosting virtuale basato su IP e nome Apache
  2. Creazione di host virtuali Apache con opzioni di abilitazione/disabilitazione Vhost
  3. Monitorare il “Server Web Apache” utilizzando lo strumento “GUI Apache”.