Configurazione Multi-sito del Server Web Apache¶
Cosa ti serve¶
- Un server con Rocky Linux
-
Conoscenza degli editor di testo a riga di comando (Questo esempio usa vi, ma può essere adattato al tuo editor preferito.)
Suggerimento
Se vuoi saperne di più sull'editor di testo vi, ecco un pratico tutorial.
-
Conoscenze di base sull'installazione e l'esecuzione di servizi web
Introduzione¶
Rocky Linux ha molti modi per impostare un sito web. Questo è solo un metodo, usando Apache, ed è progettato per essere usato come una configurazione multi-sito su un singolo server. Mentre questo metodo è progettato per server multi-sito, può anche funzionare come configurazione di base per un server a sito singolo.
Fatto storico: questa configurazione del server sembra essere iniziata con sistemi basati su Debian, ma è perfettamente adattabile a qualsiasi sistema operativo Linux con Apache.
Per coloro che cercano una configurazione simile per Nginx, date un'occhiata a questa guida
Installare Apache¶
Probabilmente avrete bisogno di altri pacchetti per il vostro sito web. Per esempio, una versione di PHP sarà quasi certamente richiesta, e forse anche un database o altri pacchetti saranno necessari. Installando PHP insieme a httpd otterrai l'ultima versione di entrambi dai repository di Rocky Linux.
Ricorda solo che potresti aver bisogno anche di moduli, come forse php-bcmath o php-mysqlind. Le specifiche della vostra applicazione web dovrebbero dettagliare ciò che è necessario. Questi possono essere installati in qualsiasi momento. Per ora, installeremo httpd e PHP, dato che sono quasi una conclusione scontata:
- Dalla riga di comando esegui
dnf install httpd php
Aggiungi Directories Extra¶
Questo metodo usa un paio di directory aggiuntive, ma attualmente queste non esistono sul sistema. Dobbiamo aggiungere due directory in /etc/httpd/ chiamate "sites-available" e "sites-enabled."
-
Dalla riga di comando digita
mkdir /etc/httpd/sites-available
e poimkdir /etc/httpd/sites-enabled
-
Abbiamo anche bisogno di una directory dove risiederanno i nostri siti. Questo può essere ovunque, ma un buon modo per mantenere le cose organizzate è quello di creare una directory chiamata sub-domains. Per semplificare le cose, mettila in /var/www:
mkdir /var/www/sub-domains/
Configurazione¶
Dobbiamo anche aggiungere una riga in fondo al file httpd.conf. Per fare questo, digita vi /etc/httpd/conf/httpd.conf
e vai in fondo al file e aggiungi Include /etc/httpd/sites-enabled
.
I nostri attuali file di configurazione risiederanno in /etc/httpd/sites-available e noi faremo semplicemente un link simbolico ad essi in /etc/httpd/sites-enabled.
Perché facciamo questo?
La ragione qui è abbastanza semplice. Diciamo che avete 10 siti web che girano tutti sullo stesso server su diversi indirizzi IP. Diremo anche, che il sito B ha alcuni importanti aggiornamenti, e si devono apportare modifiche alla configurazione per quel sito. Diciamo anche che c'è qualcosa di sbagliato con le modifiche fatte, quindi quando riavvii httpd per leggere le nuove modifiche, httpd non si avvia.
Non solo il sito su cui stavi lavorando non partirà, ma nemmeno gli altri. Con questo metodo, puoi semplicemente rimuovere il link simbolico per il sito che ha causato il guasto e riavviare httpd. Comincerà a funzionare di nuovo, e si può andare a lavorare, cercando di sistemare la configurazione del sito malfunzionante.
Sicuramente toglie la pressione, sapendo che il telefono non suonerà con qualche cliente arrabbiato, o un capo arrabbiato, perché un servizio è off-line.
La Configurazione Del Sito¶
L'altro vantaggio di questo metodo è che ci permette di specificare completamente tutto al di fuori del file predefinito httpd.conf. Lascia che il file httpd.conf di default carichi le impostazioni predefinite, e lascia che le configurazioni del tuo sito facciano tutto il resto. Bello, vero? Inoltre, di nuovo, rende molto facile risolvere i problemi di configurazione di un sito mal funzionante.
Ora, diciamo che avete un sito web che carica un wiki. Avrete bisogno di un file di configurazione, che rende il sito disponibile tramite la porta 80.
Se volete servire il sito web con SSL (e ammettiamolo, tutti dovremmo farlo ormai) allora dovete aggiungere un'altra sezione (quasi identica) allo stesso file, per abilitare la porta 443.
Puoi dare un'occhiata qui sotto nella sezione Configurazione https - Utilizzo di un certificato SSL.
Quindi dobbiamo prima creare questo file di configurazione in sites-available: vi /etc/httpd/sites-available/com.wiki.www
Il contenuto del file di configurazione dovrebbe somigliare a qualcosa del genere:
<VirtualHost *:80>
ServerName www.ourownwiki.com
ServerAdmin username@rockylinux.org
DocumentRoot /var/www/sub-domains/com.ourownwiki.www/html
DirectoryIndex index.php index.htm index.html
Alias /icons/ /var/www/icons/
# ScriptAlias /cgi-bin/ /var/www/sub-domains/com.ourownwiki.www/cgi-bin/
CustomLog "/var/log/httpd/com.ourownwiki.www-access_log" combined
ErrorLog "/var/log/httpd/com.ourownwiki.www-error_log"
<Directory /var/www/sub-domains/com.ourownwiki.www/html>
Options -ExecCGI -Indexes
AllowOverride None
Order deny,allow
Deny from all
Allow from all
Satisfy all
</Directory>
</VirtualHost>
shift : wq
Nel nostro esempio sopra, il sito wiki è caricato dalla sotto-directory "html" di com.ourownwiki.www, il che significa che il percorso che abbiamo creato in /var/www (sopra) avrà bisogno di alcune directory aggiuntive per soddisfare questo:
mkdir -p /var/www/sub-domains/com.ourownwiki.www/html
... che creerà l'intero percorso con un singolo comando. Poi vogliamo installare i nostri file in questa directory che servirà a far funzionare il sito web. Questo potrebbe essere qualcosa che hai fatto tu stesso, o un'applicazione web installabile (in questo caso il wiki che hai scaricato).
Copia i tuoi file nel percorso sopra:
cp -Rf wiki_source/* /var/www/sub-domains/com.ourownwiki.www/html/
Configurazione https - Utilizzo di un certificato SSL¶
Come detto prima, ogni server web creato in questi giorni dovrebbe funzionare con SSL (AKA secure socket layer).
Questo processo inizia generando una chiave privata e un CSR (che sta per certificate signing request) e poi sottoponendo il CSR all'autorità di certificazione per acquistare il certificato SSL. Il processo di generazione di queste chiavi è piuttosto esteso, quindi ha il suo proprio documento.
Se sei nuovo nella generazione di chiavi per SSL, si prega di dare un'occhiata a: Generazione di chiavi SSL
Puoi anche usare questo processo alternativo per utilizzare un certificato SSL da Let's Encrypt
Posizionamento delle chiavi SSL e del certificato¶
Ora che avete i vostri file di chiavi e certificati, abbiamo bisogno di posizionarli logicamente nel vostro file system sul server web. Come abbiamo visto con il file di configurazione di esempio (sopra), stiamo mettendo i nostri file web in /var/www/sub-domains/com.ourownwiki.www/html.
Vogliamo mettere il nostro certificato e i file chiave con il dominio, ma NON nella radice del documento, che in questo caso è la cartella html.
Non vogliamo mai che i nostri certificati e chiavi siano potenzialmente esposti al web. Sarebbe un male!
Invece, creeremo una nuova struttura di directory per i nostri file SSL, al di fuori della radice del documento:
mkdir -p /var/www/sub-domains/com.ourownwiki.www/ssl/{ssl.key,ssl.crt,ssl.csr}
Se siete nuovi alla sintassi "ad albero" per fare le directory, quello detto sopra è:
"Fate una directory chiamata ssl e poi fate tre directory all'interno chiamate ssl.key, ssl.crt e ssl.csr."
Solo una nota in anticipo: Non è necessario per il funzionamento del server web che il file CSR sia memorizzato nell'albero.
Se avete bisogno di riemettere il certificato da un altro fornitore, ecc., è una buona idea avere una copia memorizzata del file CSR. La domanda diventa dove si può memorizzare in modo che ci si ricordi, e memorizzarlo all'interno dell'albero del tuo sito web è logico.
Supponendo che abbiate nominato i vostri file key, csr e crt (certificato) con il nome del vostro sito, e che li abbiate memorizzati in /root, li copiamo nelle rispettive posizioni che abbiamo appena creato:
cp /root/com.wiki.www.key /var/www/sub-domains/com.ourownwiki.www/ssl/ssl.key/
cp /root/com.wiki.www.csr /var/www/sub-domains/com.ourownwiki.www/ssl/ssl.csr/
cp /root/com.wiki.www.crt /var/www/sub-domains/com.ourownwiki.www/ssl/ssl.crt/
La Configurazione del Sito - https¶
Una volta che hai generato le tue chiavi e acquistato il certificato SSL, puoi ora andare avanti con la configurazione del sito web utilizzando le tue nuove chiavi.
Per cominciare, scomponiamo l'inizio del file di configurazione. Per esempio, anche se vogliamo ancora ascoltare sulla porta 80 (http standard) per le richieste in arrivo, non vogliamo che nessuna di queste richieste vada effettivamente sulla porta 80.
Vogliamo che vadano sulla porta 443 (o http secure, meglio conosciuta come SSL). La nostra sezione di configurazione della porta 80 sarà minima:
<VirtualHost *:80>
ServerName www.ourownwiki.com
ServerAdmin username@rockylinux.org
Redirect / https://www.ourownwiki.com/
</VirtualHost>
Ciò che dice è di inviare qualsiasi richiesta web regolare alla configurazione https. L'opzione apache "Redirect" mostrata sopra, può essere cambiata in "Redirect permanent" una volta che tutti i test sono completi, e si può vedere che il sito funziona come desiderato. Il "Redirect" che abbiamo scelto è un reindirizzamento temporaneo.
Un reindirizzamento permanente sarà appreso dai motori di ricerca, e presto, qualsiasi traffico verso il tuo sito che viene dai motori di ricerca andrà solo alla porta 443 (https) senza raggiungere prima la porta 80 (http).
Successivamente, dobbiamo definire la parte https del file di configurazione. La sezione http è duplicata qui per chiarezza per mostrare che tutto questo avviene nello stesso file di configurazione:
<VirtualHost *:80>
ServerName www.ourownwiki.com
ServerAdmin username@rockylinux.org
Redirect / https://www.ourownwiki.com/
</VirtualHost>
<Virtual Host *:443>
ServerName www.ourownwiki.com
ServerAdmin username@rockylinux.org
DocumentRoot /var/www/sub-domains/com.ourownwiki.www/html
DirectoryIndex index.php index.htm index.html
Alias /icons/ /var/www/icons/
# ScriptAlias /cgi-bin/ /var/www/sub-domains/com.ourownwiki.www/cgi-bin/
CustomLog "/var/log/httpd/com.ourownwiki.www-access_log" combined
ErrorLog "/var/log/httpd/com.ourownwiki.www-error_log"
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLHonorCipherOrder on
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384
:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS
SSLCertificateFile /var/www/sub-domains/com.ourownwiki.www/ssl/ssl.crt/com.wiki.www.crt
SSLCertificateKeyFile /var/www/sub-domains/com.ourownwiki.www/ssl/ssl.key/com.wiki.www.key
SSLCertificateChainFile /var/www/sub-domains/com.ourownwiki.www/ssl/ssl.crt/your_providers_intermediate_certificate.crt
<Directory /var/www/sub-domains/com.ourownwiki.www/html>
Options -ExecCGI -Indexes
AllowOverride None
Order deny,allow
Deny from all
Allow from all
Satisfy all
</Directory>
</VirtualHost>
Quindi, scomponendo ulteriormente questa configurazione, dopo le porzioni normali della configurazione e fino alla porzione SSL:
- SSLEngine on - dice semplicemente di usare SSL
- SSLProtocol all -SSLv2 -SSLv3 -TLSv1 - dice di utilizzare tutti i protocolli disponibili, tranne quelli in cui sono stati trovate vulnerabilità. Dovresti ricercare periodicamente quali protocolli sono attualmente accettabili per l'uso.
- SSLHonorCipherOrder on - si tratta della prossima linea che riguarda le suite di cifratura, e dice di occuparsi di loro nell'ordine dato. Questa è un'altra area dove si dovrebbe rivedere periodicamente le suite di cifratura che si desidera includere
- SSLCertificateFile - è esattamente ciò che sembra, il file del certificato appena acquistato e applicato e la sua posizione
- SSLCertificateKeyFile - la chiave che hai generato quando hai creato la tua richiesta di firma del certificato
- SSLCertificateChainFile - il certificato del tuo fornitore di certificati, spesso chiamato certificato intermedio.
Poi, mettete tutto live e se non ci sono errori all'avvio del servizio web e se andando al vostro sito web si rivela con HTTPS senza errori, allora siete pronti a partire.
Portare Tutto Live¶
Ricorda che il nostro file httpd.conf include /etc/httpd/sites-enabled alla fine del file, quindi quando httpd
si riavvia, caricherà qualsiasi file di configurazione da quella directory sites-enabled. Il fatto è che tutti i nostri file di configurazione sono in sites-available.
Questo è per design, in modo che possiamo facilmente rimuovere le cose nel caso in cui httpd
non riesca a riavviarsi. Quindi, per abilitare il nostro file di configurazione, dobbiamo creare un link simbolico a quel file in sites-enabled e poi avviare o riavviare il servizio web. Per fare questo, usiamo questo comando:
ln -s /etc/httpd/sites-available/com.ourownwiki.www /etc/httpd/sites-enabled/
Questo creerà il collegamento al file di configurazione in sites-enabled, proprio come vogliamo.
Ora basta avviare httpd con systemctl start httpd
. O riavviarlo se è già in esecuzione: systemctl restart httpd
, e supponendo che il servizio web si riavvii, ora si può andare e fare alcuni test sul tuo nuovo sito.
Author: Steven Spencer
Contributors: Ezequiel Bruni, Franco Colussi