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é :
<VirtualHost *> 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 </VirtualHost>
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 :
<Directory /var/www/www.ndlp.info/fm> AuthName "Authentification requise" AuthType Basic AuthUserFile /etc/apache2/.htpasswd require user vegeta </Directory>
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 :
<VirtualHost *> 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 <Location /cband-status> SetHandler cband-status </Location> </VirtualHost>
- 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