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 ;-)