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 updateSe ricevi un errore come questo:
Segmentation faultsts... 96%o questo:
E: Dynamic MMap ran out of roomapri /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 updateancora 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-mysqlCrea una password per l’utente MySQL root (sostituisci yourrootsqlpassword con la password che desideri utilizzare):
mysqladmin -u root password yourrootsqlpasswordPoi controlla con
netstat -tap | grep mysqlsu quali indirizzi MySQL sta ascoltando. Se l’output appare così:
tcp 0 0 localhost.localdo:mysql *:* LISTEN 2713/mysqldil 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/mysqlddovresti 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 yourrootsqlpasswordmod_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_idRicarica Apache:
/etc/init.d/apache2 force-reload2 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 * |
Poi ricarica Apache:
/etc/init.d/apache2 reload3 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 -pcreate 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 * |
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 reload4 Testare mod_log_sql
Ora accedi ad alcune pagine dal tuo vhost in un browser e controlla il database apachelogs dopo:
mysql -u root -puse 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
- Apache: http://httpd.apache.org
- Debian: http://www.debian.org
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.