Introduzione
Il server HTTP Apache è il server web più utilizzato al mondo. Fornisce molte potenti funzionalità, tra cui moduli caricabili dinamicamente, supporto multimediale robusto e ampia integrazione con altri software popolari.
In questa guida, verrà installato un server web Apache con host virtuali sul server CentOS 7.
Prerequisiti
È necessario quanto segue per completare questa guida:
- Un utente non root con privilegi sudo configurati sul server, impostare seguendo la guida di installazione del server iniziale per CentOS 7.
- Un firewall di base configurato seguendo i passaggi aggiuntivi consigliati per la nuova guida ai server CentOS 7.
Passo 1 — Installazione di Apache
Apache è disponibile nei repository software predefiniti di CentOS, il che significa che è possibile installarlo con il gestore di pacchettiyum
.
Come il non-root sudo utente configurato nella prerequisiti, aggiornare il Apache httpd
pacchetto indice per riflettere le ultime modifiche upstream:
- sudo yum update httpd
una Volta che i pacchetti sono aggiornati, installare il pacchetto Apache:
- sudo yum install httpd
Dopo la conferma dell’installazione, yum
installare Apache e tutte le dipendenze richieste.
Se hai completato i passaggi aggiuntivi consigliati per la guida ai nuovi server CentOS 7 menzionati nella sezione prerequisiti, avrai installatofirewalld
sul tuo server e dovrai aprire la porta80
per consentire ad Apache di servire le richieste su HTTP. Se non lo hai già fatto, puoi farlo abilitando il servizio firewalld
http
con il seguente comando:
- sudo firewall-cmd --permanent --add-service=http
Se si intende configurare Apache per servire contenuti su HTTPS, è anche la voglia di aprire la porta 443
abilitando il https
servizio:
- sudo firewall-cmd --permanent --add-service=https
Avanti, ricaricare il firewall di mettere queste nuove regole in vigore:
- sudo firewall-cmd --reload
Dopo che il firewall ricarica, si è pronti per avviare il servizio e controllare il web server.
Passo 2 — Controllo del server Web
Apache non si avvia automaticamente su CentOS una volta completata l’installazione. È necessario avviare il processo di Apache manualmente:
- sudo systemctl start httpd
Verificare che il servizio è in esecuzione con il seguente comando:
- sudo systemctl status httpd
Potete vedere un active
stato quando il servizio è in esecuzione:
OutputRedirecting to /bin/systemctl status httpd.service● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1290 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1290 /usr/sbin/httpd -DFOREGROUND ├─1291 /usr/sbin/httpd -DFOREGROUND ├─1292 /usr/sbin/httpd -DFOREGROUND ├─1293 /usr/sbin/httpd -DFOREGROUND ├─1294 /usr/sbin/httpd -DFOREGROUND └─1295 /usr/sbin/httpd -DFOREGROUND...
Come si può vedere da questa uscita, il servizio sembra essere stato avviato correttamente. Tuttavia, il modo migliore per testare questo è richiedere una pagina da Apache.
È possibile accedere alla pagina di destinazione predefinita di Apache per confermare che il software è in esecuzione correttamente tramite il proprio indirizzo IP. Se non si conosce l’indirizzo IP del server, è possibile ottenere un paio di modi diversi dalla riga di comando.
Digitare questo al prompt dei comandi del server:
- hostname -I
Questo comando mostrerà tutti gli indirizzi di rete dell’host, in modo da ottenere indietro alcuni indirizzi IP separati da spazi. Puoi provare ciascuno nel tuo browser web per vedere se funzionano.
In alternativa, puoi usarecurl
per richiedere il tuo IP da icanhazip.com
, che ti darà il tuo indirizzo IPv4 pubblico come visto da un’altra posizione su Internet:
- curl -4 icanhazip.com
Quando si ha l’indirizzo IP del server, inserire nella barra degli indirizzi del browser:
http://your_server_ip
potrete visualizzare per impostazione predefinita CentOS 7 Apache pagina web:
Questa pagina indica che Apache funziona correttamente. Include anche alcune informazioni di base su importanti file Apache e posizioni delle directory. Ora che il servizio è installato e in esecuzione, è ora possibile utilizzare diversi comandisystemctl
per gestire il servizio.
Passo 3 — Gestione del processo Apache
Ora che avete il vostro server web installato e funzionante, andiamo oltre alcuni comandi di gestione di base.
Per interrompere il vostro web server, tipo:
- sudo systemctl stop httpd
Per avviare il server web quando si è fermato, tipo:
- sudo systemctl start httpd
Per interrompere e avviare il servizio di nuovo, tipo:
- sudo systemctl restart httpd
Se si sta semplicemente facendo le modifiche di configurazione di Apache spesso può ricaricare senza interruzioni delle connessioni. Per fare ciò, usa questo comando:
- sudo systemctl reload httpd
Per impostazione predefinita, Apache è configurato per l’avvio automatico all’avvio del server. Se questo non è quello che vuoi, disabilita questo comportamento digitando:
- sudo systemctl disable httpd
Per riattivare il servizio all’avvio, digita:
- sudo systemctl enable httpd
Apache si avvierà automaticamente all’avvio del server.
La configurazione predefinita per Apache consentirà al server di ospitare un singolo sito web. Se hai intenzione di ospitare più domini sul tuo server, dovrai configurare gli host virtuali sul tuo server Web Apache.
Passo 4 — Impostazione di host virtuali (consigliato)
Quando si utilizza il server web Apache, è possibile utilizzare host virtuali (simili a blocchi di server in Nginx) per incapsulare i dettagli di configurazione e ospitare più di un dominio da un singolo server. In questo passaggio, verrà impostato un dominio chiamato example.com
, ma è necessario sostituirlo con il proprio nome di dominio. Per ulteriori informazioni sull’impostazione di un nome di dominio con DigitalOcean, consulta la nostra Introduzione a DigitalOcean DNS.
Apache su CentOS 7 ha un blocco server abilitato di default che è configurato per servire documenti dalla directory/var/www/html
. Mentre questo funziona bene per un singolo sito, può diventare ingombrante se si ospitano più siti. Invece di modificare /var/www/html
, si creerà una struttura di directory all’interno di /var/www
per il sito example.com
, lasciando /var/www/html
come directory predefinita da servire se una richiesta client non corrisponde ad altri siti.
Creare html
directory example.com
come segue, utilizzando il -p
flag per creare le directory principali necessarie:
- sudo mkdir -p /var/www/example.com/html
Creare una nuova directory per memorizzare i file di log per il sito:
- sudo mkdir -p /var/www/example.com/log
quindi, assegnare la proprietà di html
directory $USER
la variabile d’ambiente:
- sudo chown -R $USER:$USER /var/www/example.com/html
assicuratevi che il vostro web root ha i permessi di default impostato:
- sudo chmod -R 755 /var/www
Next, create a sample index.html
page using vi
or your favorite editor:
- sudo vi /var/www/example.com/html/index.html
Press i
to switch to INSERT
mode and add the following sample HTML to the file:
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body></html>
Save and close the file by pressing ESC
, typing :wq
, and pressing ENTER
.
Con la directory del sito e il file indice di esempio sul posto, si è quasi pronti per creare i file host virtuali. I file host virtuali specificano la configurazione dei siti separati e indicano al server Web Apache come rispondere alle varie richieste di dominio.
Prima di creare gli host virtuali, è necessario creare una directory sites-available
in cui memorizzarli. Si creerà anche la directorysites-enabled
che indica ad Apache che un host virtuale è pronto per servire ai visitatori. La directorysites-enabled
contiene collegamenti simbolici agli host virtuali che vogliamo pubblicare. Crea entrambe le directory con il seguente comando:
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Successivamente, dirai ad Apache di cercare host virtuali nella directory sites-enabled
. Per fare ciò, modifica il file di configurazione principale di Apache e aggiungi una riga che dichiara una directory opzionale per ulteriori file di configurazione:
- sudo vi /etc/httpd/conf/httpd.conf
Aggiungi questa riga alla fine del file:
IncludeOptional sites-enabled/*.conf
Salva e chiudi il file quando hai finito di aggiungere quella riga. Ora che hai le tue directory host virtuali in atto, creerai il tuo file host virtuale.
Inizia creando un nuovo file nella directorysites-available
:
- sudo vi /etc/httpd/sites-available/example.com.conf
Aggiungi il seguente blocco di configurazione e modifica il dominioexample.com
al tuo nome di dominio:
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/html ErrorLog /var/www/example.com/log/error.log CustomLog /var/www/example.com/log/requests.log combined</VirtualHost>
Questo dirà ad Apache dove trovare direttamente la radice che contiene i documenti web accessibili al pubblico. Indica anche ad Apache dove archiviare i log degli errori e delle richieste per questo particolare sito.
Salva e chiudi il file quando hai finito.
Ora che hai creato i file host virtuali, li abiliterai in modo che Apache sappia servirli ai visitatori. Per fare ciò, creare un collegamento simbolico per ogni host virtuale nella directorysites-enabled
:
- sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
L’host virtuale è ora configurato e pronto per la pubblicazione di contenuti. Prima di riavviare il servizio Apache, assicuriamoci che SELinux abbia le politiche corrette per i tuoi host virtuali.
Passo 5 — Regolazione autorizzazioni SELinux per gli host virtuali (consigliato)
SELinux è configurato per funzionare con la configurazione predefinita di Apache. Poiché si imposta una directory di log personalizzata nel file di configurazione degli host virtuali, verrà visualizzato un errore se si tenta di avviare il servizio Apache. Per risolvere questo problema, è necessario aggiornare le politiche di SELinux per consentire ad Apache di scrivere nei file necessari. SELinux porta maggiore sicurezza al tuo ambiente CentOS 7, quindi non è consigliabile disabilitare completamente il modulo del kernel.
Esistono diversi modi per impostare le politiche in base alle esigenze dell’ambiente, poiché SELinux consente di personalizzare il livello di sicurezza. Questo passaggio riguarderà due metodi per regolare le politiche di Apache: universalmente e su una directory specifica. La regolazione delle politiche sulle directory è più sicura ed è quindi l’approccio raccomandato.
Regolare universalmente le politiche di Apache
L’impostazione universalmente della politica di Apache dirà a SELinux di trattare tutti i processi Apache in modo identico usando ilhttpd_unified
booleano. Anche se questo approccio è più conveniente, non ti darà lo stesso livello di controllo di un approccio che si concentra su un criterio di file o directory.
Eseguire il seguente comando per impostare una politica Apache universale:
- sudo setsebool -P httpd_unified 1
Il comandosetsebool
modifica i valori booleani di SELinux. Il flag-P
aggiornerà il valore del tempo di avvio, rendendo questa modifica persistente durante i riavvii. httpd_unified
è il booleano che dirà a SELinux di trattare tutti i processi Apache come lo stesso tipo, quindi l’hai abilitato con un valore di 1
.
Regolare i criteri di Apache su una Directory
Impostare individualmente i permessi SELinux per la directory/var/www/example.com/log
ti darà un maggiore controllo sui tuoi criteri di Apache, ma potrebbe anche richiedere più manutenzione. Poiché questa opzione non è universalmente l’impostazione dei criteri, sarà necessario impostare manualmente il tipo di contesto per tutte le nuove directory di registro specificate nelle configurazioni dell’host virtuale.
Per prima cosa, controlla il tipo di contesto che SELinux ha dato alla directory/var/www/example.com/log
:
- sudo ls -dZ /var/www/example.com/log/
Questo comando elenca e stampa il contesto SELinux della directory. Vedrete uscita simile al seguente:
Outputdrwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/
Il contesto corrente èhttpd_sys_content_t
, che indica a SELinux che il processo Apache può leggere solo i file creati in questa directory. In questo tutorial, cambierai il tipo di contesto della directory/var/www/example.com/log
inhttpd_log_t
. Questo tipo consentirà ad Apache di generare e aggiungere ai file di log delle applicazioni Web:
- sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
Successivamente, utilizzare il comandorestorecon
per applicare queste modifiche e farle persistere durante i riavvii:
- sudo restorecon -R -v /var/www/example.com/log
Il flag -R
esegue questo comando in modo ricorsivo, il che significa che aggiornerà qualsiasi file esistente per utilizzare il nuovo contesto. Il flag-v
stamperà le modifiche di contesto apportate al comando. Verrà visualizzato il seguente output che conferma le modifiche:
Outputrestorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
È possibile elencare i contesti ancora una volta per vedere le modifiche:
- sudo ls -dZ /var/www/example.com/log/
L’output riflette il tipo di contesto aggiornato:
Outputdrwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log
Ora che la directory /var/www/example.com/log
utilizza il tipo httpd_log_t
, si è pronti per testare la configurazione dell’host virtuale.
Passo 6 — Test dell’host virtuale (consigliato)
Una volta che il contesto SELinux è stato aggiornato con entrambi i metodi, Apache sarà in grado di scrivere nella directory/var/www/example.com/log
. Ora è possibile riavviare correttamente il servizio Apache:
- sudo systemctl restart httpd
Elencare il contenuto della directory /var/www/example.com/log
per vedere se Apache ha creato i file di log:
- ls -lZ /var/www/example.com/log
vedrai che Apache è stato in grado di creare il error.log
e requests.log
file specificato nella configurazione del virtual host:
Output-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log-rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log
Ora che avete il vostro host virtuale impostare e SELinux autorizzazioni aggiornato, Apache servirà ora il tuo nome di dominio. Puoi testarlo navigando su http://example.com
, dove dovresti vedere qualcosa del genere:
Ciò conferma che l’host virtuale è stato configurato correttamente e che il contenuto è stato distribuito. Ripetere i passaggi 4 e 5 per creare nuovi host virtuali con autorizzazioni SELinux per domini aggiuntivi.
Conclusione
In questo tutorial, è stato installato e gestito il server web Apache. Ora che hai installato il tuo server web, hai molte opzioni per il tipo di contenuto che puoi servire e le tecnologie che puoi utilizzare per creare un’esperienza più ricca.
Se desideri creare uno stack di applicazioni più completo, puoi consultare questo articolo su come configurare uno stack LAMP su CentOS 7.