Quelques infos pratiques pour customiser un peu Apache.
====== Réécriture d'URL ======
RewriteEngine on
RewriteCond %{HTTP_HOST} ^bazar.ndlp.info$ [NC]
RewriteRule ^(.*)$ http://unix.ndlp.info/$1 [R=301,L]
====== Virtual Host ======
La configuration des VirtualHosts se trouve, généralement, à la fin du fichier de conf apache (//httpd.conf// ou //apache2.conf//). Ci-dessous un extrait du fichier avec un Virtual Host configuré :
ServerAdmin www.ndlp.info
DocumentRoot /var/www/www.ndlp.info
ServerName www.ndlp.info
ErrorDocument 404 http://www.ndlp.info
ErrorLog /var/log/apache2/www.ndlp.info/error_log
CustomLog /var/log/apache2/www.ndlp.info/access_log combined
php_admin_value engine off
Ne pas oublier de décommenter la ligne suivante avant la définition des Virtual Hosts :
NameVirtualHost *
====== .htaccess et cie ======
===== Protéger un répertoire =====
On peut créer un fichier de mots de passe avec :
htpasswd -c /etc/apache2/.htpasswd vegeta
Ensuite on rajoute une entrée dans le fichier de conf apache :
AuthName "Authentification requise"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
require user vegeta
===== Empêcher l'exécution d'un CGI/PHP =====
==== CGI ====
On peut mettre un fichier //.htaccess// dans le répertoire où ne veut pas autoriser de CGI/Perl. Ce fichier doit donc contenir :
Options -ExecCGI
Sinon on peut utiliser les //AddHandler// (dans un Virtual Host ou non) dans le fichier de conf d'Apache :
AddType text/html .cgi .pl
==== PHP ====
Pour un Virtual Host donné on peut rajouter cette directive :
php_admin_value engine off
Ou bien encore utiliser les //AddHandler// toujours dans le fichier de conf d'Apache :
AddType text/html .php .php5 .phtml .php3
====== PHP ======
===== Permettre de gros uploads =====
Dans le fichier ///etc/php[4,5]/apache2/php.ini// modifier :
upload_max_filesize = 512M
post_max_size = 512M
max_execution_time = 1200
Ne pas oublier de lancer un reload/restart d'Apache.
===== Paramètre(s) PHP dans un Virtual Host spécifique =====
Dans un Virtual Host donné on peut définir des paramètres spécifiques. Exemples :
php_admin_flag safe_mode on
php_admin_value open_basedir "/var/www/:var/www/tmp"
php_admin_flag register_globals on
====== Limiter la bande passante ======
Avec Apache 2 on peut utiliser //mod-cband// pour limiter la bande passante et le nombre de connexions. On peut aussi mettre en place des quotas. Sous Debian on installe le module simplement :
apt-get install libapache2-mod-cband
/etc/init.d/apache2 force-reload
Ensuite on applique la conf de manière globale ou pour un Virtual Host spécifique :
ServerAdmin csbeta.ndlp.info
DocumentRoot /var/www/csbeta.ndlp.info
ServerName csbeta.ndlp.info
ErrorDocument 404 http://csbeta.ndlp.info
ErrorLog /var/log/apache2/csbeta.ndlp.info/error_log
CustomLog /var/log/apache2/csbeta.ndlp.info/access_log combined
php_admin_flag safe_mode on
php_admin_value open_basedir "/var/www/csbeta.ndlp.info:/var/www/tmp"
ErrorDocument 503 /limits.html
CBandSpeed 51200 10 15
CBandRemoteSpeed 1024kb/s 3 1
CBandScoreboard /var/www/scoreboard
SetHandler cband-status
* **ErrorDocument 503 /limits.html** : par défaut le module sort une erreur 503 en cas de dépassement, on peut customiser la page d'erreur. On peut aussi utiliser les directives //CBandDefaultExceededURL//, //CBandDefaultExceededCode//, //CBandExceededURL//, etc.
* **CBandSpeed 16000 10 15** : on limite la bande passante maximale à 16 Mbits, 10 connexions max par seconde et 15 connexions simultanées.
* **CBandRemoteSpeed 1024kb/s 3 1** : chaque client est limité à 1024ko/s, 3 connexions max par seconde et 2 connexions simultanées.
* **CBandScoreboard /var/www/scoreboard** : permet de stocker les infos (quotas, etc).
On peut aussi rajouter ces directives au fichier de conf apache //httpd.conf// ou //apache2.conf// :
CBandScoreFlushPeriod 1
CBandRandomPulse On
* **CBandScoreFlushPeriod** : inscrit à X nombre de requêtes le total de la consommation dans le tableau.
* **CBandRandomPulse** : améliore la compréhension de la limitation de téléchargement ce qui entraîne une économie du CPU.
Un petit restart d'Apache et c'est parti ;-)