Apache tip & tricks

Da Webmobili Wiki.
Versione del 8 apr 2025 alle 16:30 di SimoneVincenzi (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Certificati SSL

Abilitare modulo SSL

Di default il modulo non è abilitato
sudo a2enmod ssl

Richiesta CSR

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)

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

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

Vedere la pagina dedicata
Certificati Lets'Encrypt

Basic Authentication

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

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

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

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