Apache tip & tricks

Da Webmobili Wiki.

Certificati SSL

[modifica]

Abilitare modulo SSL

[modifica]

Di default il modulo non è abilitato
sudo a2enmod ssl

Richiesta CSR

[modifica]

Genera un file .csr e un file .key che sono la richiesta di certificato per il server in questione e la chiave privata.

openssl req -new -newkey rsa:2048 -nodes -keyout designbestmagazine.com_private_key.key -out designbestmagazine.com.csr

Importante, alla domanda sul Common Name specificare il NOME DEL DOMINIO (es designbestmagazine.com)

Gestione dei certificati (key, bundle)

[modifica]

Per creare un VirtualHost con certificato autentico aggiungere un file dentro alla cartella /etc/apache2/sites-available con la configurazione personalizzata che utilizzi i certificati giusti.

Esempio pratico:

  • Copiare i file del certificato (crt e key) + il certificato intermedio nella cartella /etc/apache2/ssl/. N.B. Se si dispone del file .cer basta rinominare l'estensione in .crt
  • Unire certificato e certificato intermedio in un unico file con il comando
cat nomesito.com_ssl_certificate.crt nomesito.com_ssl_certificate_intermediate.crt >> nomesito.com_ssl_certificate_bundle.crt

Ricordarsi di mettere in /etc/apache2/ssl/ i tre file

  • nomesito.com_ssl_certificate.crt
  • nomesito.com_private_key.key
  • nomesito.com_ssl_certificate_bundle.crt


Configurazione del Virtualhost

[modifica]

Il virtualhost cambia la porta e aggiunge le direttive SSLEngine, SSLCertificateFile e SSLCertificateKeyFile.
È possibile configurare un redirect http => https direttamente dal virtualhost.

Esempio pratico:

#
# blog.designbest.com
#

<VirtualHost *:80>
        ServerName blog.designbest.com
        Redirect / https://blog.designbest.com/
</VirtualHost>

<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin s.vincenzi@webmobili.it
                ServerName blog.designbest.com

                DirectoryIndex index.html index.htm index.php
                DocumentRoot /var/www/blog.designbest.com/
                Alias /phpmyadmin /usr/share/phpmyadmin

                <Directory />
                        Options FollowSymLinks
                        AllowOverride All
                </Directory>

                <Directory /var/www/blog.designbest.com/>
                        Options -Indexes +FollowSymLinks +MultiViews
                        AllowOverride All
                        Order allow,deny
                        Allow from all
                </Directory>

                SSLEngine on
                SSLCertificateFile /etc/apache2/ssl/designbest.com_ssl_certificate_bundle.crt
                SSLCertificateKeyFile /etc/apache2/ssl/designbest.com_private_key.key

                ErrorLog ${APACHE_LOG_DIR}/blog.designbest.com.error.log
                CustomLog ${APACHE_LOG_DIR}/blog.designbest.com.access.log combined
        </VirtualHost>
</IfModule>

Let’s Encrypt

[modifica]

Vedere la pagina dedicata
Certificati Lets'Encrypt

Basic Authentication

[modifica]

Per fare una basic authentication bisogna utilizzare il comando htpasswd che crea un file con i dati di utente e password.
Può essere updatato per aggiungere altri utenti.

# Prima volta con opzione -c
sudo htpasswd -c /var/www/auth/.htpasswd nomeutente1

#Per aggiungere altri utenti senza -c
sudo htpasswd /var/www/auth/.htpasswd nomeutente2


Il file viene richiamato all'interno di un virtualhost con i seguenti comandi:

AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /var/www/auth/.htpasswd
Require valid-user

Che possono essere inseriti nel file .htaccess oppure direttamente nel virtualhost nella sezione Location

<Location />
  AuthName "Dialog prompt"
  AuthType Basic
  AuthUserFile /var/www/auth/.htpasswd
  Require valid-user
</Location>


Se si vuole cambiare la password di un utente basta lanciare di nuovo il comando senza l'opzione -c specificando l'utente già esistente.
Non è possibile settare più password per un singolo utente, in quel caso creare un file diverso come è stato fatto per magazine e outlet su merida.

Configurare multiple versioni di PHP

[modifica]

Con PHP-FPM è possibile avere siti che utilizzano differenti versioni di PHP, specificandolo nel virtualhost.
Ecco la guida PHP FPM - Configurare multiple versioni di PHP

Modificare la versione default di PHP-FPM

[modifica]

Per quanto riguarda php-fpm , dopo aver installato l'ultima versione (es. 8.4 )

# Settare l'alternativa di default
sudo update-alternatives --config php
#sudo update-alternatives --set php /usr/bin/php8.4

Comunicarlo ad Apache

sudo a2enconf php8.4-fpm
sudo systemctl reload apache2.service

Reverse Proxy

[modifica]

Apache può essere configurato come Reverse Proxy per soddisfare le richieste degli applicativi che runnano sotto un proprio server (es. node.js o .net core).

Ecco una configurazione d'esempio:

<VirtualHost *:80>
        ServerName sqlchat.dbdemo47.com
        Redirect / https://%{SERVER_NAME}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin info@designbest.com
        ServerName sqlchat.dbdemo47.com

        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
</VirtualHost>

Per poter utilizzare Apache come reverse proxy è necessario abilitare i moduli:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo systemctl restart apache2