Apache MySQL · 5 min read · Feb 03, 2026

Apache2: Registrazione in un Database MySQL Con mod_log_sql (Debian Etch)

Apache2: Registrazione in un Database MySQL Con mod_log_sql (Debian Etch)

Versione 1.0
Autore: Falko Timme

Questa guida mostra come puoi scrivere il log di accesso di Apache2 in un database MySQL invece che in un file. Per ottenere questo, utilizzo il modulo Apache2 mod_log_sql. Sto usando un server Debian Etch in questo tutorial.

Non fornisco alcuna garanzia che questo funzionerà per te!

1 Installazione di Apache2, MySQL, mod_log_sql

Sfortunatamente libapache2-mod-log-sql-mysql è disponibile come pacchetto Debian solo per Debian Lenny (testing) e Sid (instabile), ma non per Etch. Pertanto installeremo il pacchetto libapache2-mod-log-sql-mysql da Lenny. Per fare ciò, apri /etc/apt/sources.list e aggiungi la riga deb http://ftp2.de.debian.org/debian/ lenny main; il tuo /etc/apt/sources.list potrebbe quindi apparire così:

vi /etc/apt/sources.list

| deb http://ftp2.de.debian.org/debian/ etch main deb-src http://ftp2.de.debian.org/debian/ etch main deb http://ftp2.de.debian.org/debian/ lenny main deb http://security.debian.org/ etch/updates main contrib deb-src http://security.debian.org/ etch/updates main contrib |

Naturalmente (per non rovinare il nostro sistema), vogliamo installare pacchetti da Lenny solo se non c’è un pacchetto appropriato da Etch - se ci sono pacchetti da Etch e Lenny, vogliamo installare quello da Etch. Per fare ciò, diamo ai pacchetti da Etch una priorità più alta in /etc/apt/preferences:

vi /etc/apt/preferences

| Package: * Pin: release a=etch Pin-Priority: 700 Package: * Pin: release a=lenny Pin-Priority: 650 |

(I termini etch e lenny si riferiscono ai termini appropriati in /etc/apt/sources.list; se stai usando stable e testing lì, devi usare stable e testing invece di etch e lenny in /etc/apt/preferences).

Dopo, aggiorniamo il nostro database di pacchetti:

apt-get update

Se ricevi un errore come questo:

Segmentation faultsts... 96%

o questo:

E: Dynamic MMap ran out of room

apri /etc/apt/apt.conf e aggiungi una riga per APT::Cache-Limit con un valore molto alto, ad esempio così:

vi /etc/apt/apt.conf 

| APT::Cache-Limit "100000000"; |

Poi esegui

apt-get update

ancora e aggiorna i pacchetti installati:

apt-get upgrade 

(Se vedi delle domande, puoi accettare i valori predefiniti.)

Per installare Apache2, MySQL e mod_log_sql, eseguiamo:

apt-get install apache2 mysql-server mysql-client libapache2-mod-log-sql-mysql

Crea una password per l’utente MySQL root (sostituisci yourrootsqlpassword con la password che desideri utilizzare):

mysqladmin -u root password yourrootsqlpassword

Poi controlla con

netstat -tap | grep mysql

su quali indirizzi MySQL sta ascoltando. Se l’output appare così:

tcp        0      0 localhost.localdo:mysql *:*                     LISTEN     2713/mysqld

il che significa che MySQL sta ascoltando solo su localhost.localdomain, allora sei al sicuro con la password che hai impostato prima. Ma se l’output appare così:

tcp        0      0 *:mysql *:*                     LISTEN     2713/mysqld

dovresti impostare una password MySQL anche per il tuo hostname, perché altrimenti chiunque può accedere al tuo database e modificare i dati:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword

mod_log_sql è stato abilitato automaticamente quando lo abbiamo installato, ma c’è un altro modulo che dovremmo abilitare: mod_uique_id (non è necessario, ma senza di esso, mod_log_sql lascerà la colonna id nella tabella MySQL per il log di accesso vuota). La colonna id conterrà l’ID di richiesta unico fornito dal modulo Apache standard mod_unique_id.

a2enmod unique_id

Ricarica Apache:

/etc/init.d/apache2 force-reload

2 Creazione di un Virtual Host

Ora creerò un vhost Apache predefinito nella directory /var/www/web1/web. A questo scopo, modificherò la configurazione del vhost Apache predefinita in /etc/apache2/sites-available/default. Se hai già un vhost per il quale desideri abilitare la registrazione MySQL, devi adattare questo tutorial alla tua situazione.

Per prima cosa, creiamo la directory /var/www/web1/web e rendiamo l’utente Apache (www-data) il proprietario di quella directory:

mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web

Poi facciamo un backup della configurazione del vhost Apache predefinita (/etc/apache2/sites-available/default) e creiamo la nostra:

mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/default

| NameVirtualHost * ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ Options Indexes MultiViews AllowOverride None Order allow,deny allow from all |

Poi ricarica Apache:

/etc/init.d/apache2 reload

3 Configurare il Virtual Host per la Registrazione MySQL

Puoi trovare la documentazione per mod_log_sql nel file HTML /usr/share/doc/libapache2-mod-log-sql/manual.html. Dovresti copiarlo sul tuo workstation (ad esempio con WinSCP) e studiarlo.

Dopo aver letto questo file, creiamo un database MySQL chiamato apachelogs che conterrà le tabelle per i nostri log di accesso (può contenere più tabelle di log di accesso, ad esempio una per ogni vhost che hai). Inoltre, creiamo l’utente MySQL loguser - questo utente sarà utilizzato da mod_log_sql per connettersi a MySQL in seguito. loguser avrà privilegi CREATE e INSERT in modo da poter creare automaticamente tabelle per i log di accesso (se le tabelle non esistono già) e inserire record in queste tabelle:

mysql -u root -p
create database apachelogs;

grant insert,create on apachelogs. to loguser@localhost identified by ‘loguser_password’;
grant insert,create on apachelogs.
to [email protected] identified by ‘loguser_password’;
FLUSH PRIVILEGES;

(Sostituisci loguser_password con una password a tua scelta.)

Poi usciamo dalla shell MySQL:

quit;

Ora modifichiamo il nostro vhost in /etc/apache2/sites-available/default in modo che appaia come segue:

vi /etc/apache2/sites-available/default

| LogSQLLoginInfo mysql://loguser:loguser_password@localhost/apachelogs LogSQLCreateTables on LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock LogSQLTransferLogFormat AbHhmRSsTUuvI NameVirtualHost * ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ Options Indexes MultiViews AllowOverride None Order allow,deny allow from all LogSQLTransferLogTable web1_access_log |

Le direttive LogSQLLoginInfo (che contiene le credenziali di accesso al database), LogSQLCreateTables (che dice a mod_log_sql di creare tabelle se non esistono), LogSQLDBParam socketfile (che specifica il socket MySQL), e LogSQLTransferLogFormat (che specifica cosa viene registrato nel database) vanno nella configurazione globale di Apache. La direttiva LogSQLTransferLogTable va nella configurazione del vhost - in questo modo puoi specificare tabelle di log di accesso diverse per ogni vhost (ad esempio web1_access_log, web2_access_log, web3_access_log, ecc.).

La direttiva LogSQLTransferLogFormat è spiegata in modo più dettagliato nel file /usr/share/doc/libapache2-mod-log-sql/manual.html.

Ricarica Apache dopo:

/etc/init.d/apache2 reload

4 Testare mod_log_sql

Ora accedi ad alcune pagine dal tuo vhost in un browser e controlla il database apachelogs dopo:

mysql -u root -p

use apachelogs;
show tables;

Dovresti ora vedere che la tabella web1_access_log è stata creata da mod_log_sql:

mysql> show tables;
+———————-+
| Tables_in_apachelogs |
+———————-+
| web1_access_log      |
+———————-+
1 row in set (0.00 sec)

mysql>

Ora controlliamo cosa c’è in quella tabella:

select * from web1_access_log;

Se tutto è andato bene, dovresti trovare i log di accesso in quella tabella:

mysql> select * from web1_access_log;
+———————+———————————————————————————————…
| id                  | agent                                                                                       …
+———————+———————————————————————————————…
| JpEF8MCoAGQAAFyuEBU | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpPHIMCoAGQAAFyuEBY | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpTj0MCoAGQAAFyuEBc | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
+———————+———————————————————————————————…
3 rows in set (0.00 sec)

mysql>

Digita

quit;

per uscire dalla shell MySQL.

5 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.