Edito
Voila voila, je refais mon infra…
Et j'ai donc envie de participer a une oeuvre commune :
Antoine.
Pub
Désolé de vous incommoder avec cela, c'est un mal aujourd'hui nécessaire. Je le souhaite juste utile, on verra.
Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
docs:linuxeries:apache [2012/07/24 13:57] adlp PAGE VALIDE |
— (version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Authentification sur base PAM ====== | ||
- | * apt-get install libapache2-mod-auth-pam | ||
- | * Dans le .htaccess recherché | ||
- | <xtermrtf> | ||
- | AuthPAM_Enabled on | ||
- | AuthPAM_FallThrough off | ||
- | AuthType Basic | ||
- | AuthName "Intranet" | ||
- | AuthUserFile /dev/null | ||
- | AuthBasicAuthoritative Off | ||
- | require valid-user | ||
- | </xtermrtf> | ||
- | ====== Reverse Proxy via Apache ====== | ||
- | |||
- | De ce que j'ai vu pas forcement conseillé, et puis bon quand on vois la progression d'//NginX// | ||
- | |||
- | * [[https://httpd.apache.org/docs/2.2/mod/mod_proxy.html|The official conf]] | ||
- | |||
- | |||
- | ====== Gestion des session PHP en DB ====== | ||
- | *Base de travail [[http://thwartedefforts.org/2006/11/11/race-conditions-with-ajax-and-php-sessions/|Race Conditions with Ajax and PHP Sessions @ thwartedefforts]] | ||
- | * FIXME: leur remonter l'info | ||
- | * Objectifs: | ||
- | * Clusteriser les sessions | ||
- | * Ne rien recompiler | ||
- | * Methode | ||
- | * Réecrire les methodes de gestion des sessions | ||
- | * Ecrire dans un "cluster" MySql | ||
- | * Mon opinion | ||
- | * Ok, c'est pas tres classe comme spof, il y a mieux : mais pas de recompil on a dit | ||
- | |||
- | ===== Php.ini ===== | ||
- | <code> | ||
- | [PHP] | ||
- | auto_prepend_file = /usr/local/www/mysql-session.php | ||
- | ... | ||
- | |||
- | [Session] | ||
- | ; Handler used to store/retrieve data. | ||
- | ;session.save_handler = files | ||
- | session.save_path = "mysql://login:password@vrrpmysqlip/apachedb" | ||
- | </code> | ||
- | |||
- | ===== Modifications du script ===== | ||
- | * Script d'origine [[http://race.phux.net/code/session_mysql.phps]] | ||
- | * Script depose là: /usr/local/www/mysql-session.php | ||
- | <code> | ||
- | $chaine = str_replace(array('/','\\',"@"),":",get_cfg_var("session.save_path")); | ||
- | list($null,$null,$null,$SESS_DBUSER,$SESS_DBPASS,$SESS_DBHOST,$SESS_DBNAME) = explode(":",$chaine); | ||
- | </code> | ||
- | FIXME: evidement, les autres init ont etes commmentes. | ||
- | |||
- | ===== Nettoyage ===== | ||
- | FIXME: A faire!!!! | ||
- | * Les sessions sont crées en base, mais pas forcement supprimées il faut donc nettoyer. | ||
- | * Pour cela une (simple) requete SQL en s'inspirant de /etc/cron.d/php5 et /usr/lib/php5/maxlifetime doit faire l'affaire | ||
- | |||
- | Pour lister les connexions actives | ||
- | ---- | ||
- | <xtermrtf> | ||
- | mysql> select * from sessions WHERE expiry < UNIX_TIMESTAMP(NOW()); | ||
- | </xtermrtf> | ||
- | |||
- | ====== Accelerateur APC ====== | ||
- | * S'installe simplement, puis un restart | ||
- | * La configuration est simple, mais ne pas exprimer les unites | ||
- | * [[http://www.php.net/manual/fr/apc.configuration.php|Variables et Significations]] | ||
- | <xtermrtf> | ||
- | root@smax:/etc/php5# cat /etc/php5/conf.d/apc.ini | ||
- | extension=apc.so | ||
- | apc.shm_size=64 | ||
- | apc.gc_ttl=0 | ||
- | </xtermrtf> | ||
- | * Est fournit avec apc un php ( /usr/share/doc/php-apc/apc.php.gz ) qui permet de voire l'etat des caches apc serveur | ||
- | |||
- | ====== Gestions des Vhost ====== | ||
- | ===== Full-Automatique : ===== | ||
- | |||
- | FIXME: look about VirtualScriptAlias | ||
- | |||
- | ===== Pas Automatique mais + administrable ===== | ||
- | ==== Objectif ==== | ||
- | * Pouvoir discerner les utilisateurs apache en cas de surcharge plantage, etc, dans un cadre php (et autre) | ||
- | * suEXEC | ||
- | * une vrai usine a gaz pour du php (necessite un wrapper par user pex -regle18-, etc...) | ||
- | * je suppute cela moins performant que du php en module (on ne peut pas precharger des FastCGI) | ||
- | * necessite un patch (euh je crois) pour travailler dans le /home ... :/ | ||
- | * suPHP | ||
- | * limité au php | ||
- | * Les droits sont ceux du pocesseurs du fichier (dommage je preferais par arbo sur le coup) | ||
- | ==== Usage ==== | ||
- | * Installer **[[http://mpm-itk.sesse.net|apache2-mpm-itk]]** | ||
- | Ce module une fois installé ne fait que //rajouter// des fonctionnalités dans les **vhosts** //(lire : on peux installer puis rajouter les vhost un a un)// | ||
- | * J'ai trouvé la doc là [[http://devzone.zend.com/article/4779|Using Apache2 ITK Multi-Processing Module on Linux]] | ||
- | * Fonction supplementaires | ||
- | - //AssignUserID <user> <group>// : si pas specifié alors ceux d'apache, pour une bascule plus sereine user, mais le groupe d'apache ! | ||
- | - //MaxClientsVHost// si un des vhost a une tendance a saccager la machine | ||
- | - //NiceValue// la meme chose mais en plus subtile :) | ||
- | * ATTENTION de part le fait que le thread apache prend l'identitée spéfiée par //AssignUserID//, si le thread reste ouvert, mais gere d'autres vhost... vous aurez de la bouillie de droit... Pensez a baisser drastiquement le <del>KeepAlived</del>**MaxRequestsPerChild** genre 1, y a **NginX** c'est bien... | ||
- | |||
- | ====== Gestion des droits/Umask ====== | ||
- | |||
- | * Trouve sur [[http://articles.slicehost.com/2007/9/18/apache-virtual-hosts-permissions|Slicehost]] | ||
- | * on px facilement rajouter dans /etc/apache2/envvars (/etc/sysconfig/httpd sur RH'n Co) le umask adequate | ||
- | |||
- | |||
- | ====== Traitement des logs ======= | ||
- | |||
- | Pourquoi faire ? Bin betement pour avoir des stats de fréquentation... | ||
- | |||
- | Mais un hint rapide, mis en place ici : [[http://bbclone.de/|BBClone]] | ||
- | * Il //suffit// de mettre en place en en-tete de chaques pages et de regarder le resultat, c'est plus simple que parametre [[http://awstats.sourceforge.net/|AwStats]] (outils merveilleux quand meme) | ||
- | * Et comme c'est dure de modifier toutes les pages un simple **auto-prepend** ds le php.ini | ||
- | * Attention, c'est fonctionnel sur les sites www en php, cela ne comptabilisera ni les images ni les css ni le html je pense ;) | ||
- | |||
- | |||
- | ===== En donner l'acces aux dev ===== | ||
- | |||
- | |||
- | ===== Statistiques ===== | ||
- | |||
- | FIXME:Il existe awstat, un fort bel outils | ||
- | |||
- | ===== sur une ferme ===== | ||
- | |||
- | FIXME: Il existe un outil **apache** qui permet de faire de la //concatenations// de fichiers de logs | ||
- | |||
- | ====== Apache et le reverse-proxy ====== | ||
- | ===== En reverse Proxy ===== | ||
- | |||
- | A mettre dans le joli htacess | ||
- | <xtermrtf> | ||
- | RewriteEngine on | ||
- | RewriteCond %{HTTP_HOST} ^www\.domaine\.tld$ | ||
- | RewriteRule ^(.*) http://172.31.32.33/$1 [P,L] | ||
- | RewriteCond %{HTTP_HOST} ^bubu\.domaine\.tld$ | ||
- | RewriteRule ^(.*) http://192.168.1.2/$1 [P,L] | ||
- | </xtermrtf> | ||
- | |||
- | NB: je prefere _vraiment_ NginX | ||
- | |||
- | ===== Avec un reverse Proxy ===== | ||
- | |||
- | * Le pb derriere un reverse proxy, c'est qu'Apache ne voit plus vraiment le client. | ||
- | * Il existe bien des variables predefinis dans les headers mais bon, pas toujors pratique | ||
- | |||
- | => Ils ont donc inventés le **rpaf**, et maintenant dans les logs on a l'IP du client ! | ||
- | - Nom du paquet : libapache2-mod-rpaf | ||
- | - Un exemple, ou l'IP du reverse proxy est la 192.168.1.1 | ||
- | <xtermrtf> | ||
- | root@smax:/etc/apache2# cat /etc/apache2/mods-enabled/rpaf.conf | ||
- | <IfModule mod_rpaf.c> | ||
- | RPAFenable On | ||
- | RPAFsethostname On | ||
- | RPAFproxy_ips 192.168.1.1 | ||
- | </IfModule> | ||
- | </xtermrtf> | ||
- | |||
- | ====== Diverseries ====== | ||
- | ===== Stat en RT ===== | ||
- | |||
- | - Je recommande chaudement de ne pas donner le lien resultant de ca a tout le monde, ca peut chauffer... | ||
- | - Je suis en train de reecrire un script plus basique pour obtenir | ||
- | - Le nom du site facheux | ||
- | - L'IP facheuse | ||
- | Bon, bin y a pu ka donner le lien [[http://petrenco.com/php.php?txt=106|Server Status PHP Parser]] | ||
- | |||
- | ===== Comment savoir (a la hache) quel vhost consomme le plus ? ===== | ||
- | |||
- | <xtermrtf> | ||
- | root@Atchoum:~# lsof -n | grep /home | tr -s "\t " " " | cut -d' ' -f9 | sort | uniq -c | ||
- | 1 /home/kikou/log/application.log | ||
- | 1 /home/kikou/webapp/www | ||
- | 3 /home/claire/ftp-import | ||
- | 1 /home/pas/webapp/www | ||
- | 1 /home/dago/webapp/www | ||
- | 5 /home/cerise/webapp/www | ||
- | root@Atchoum:~# lsof -n | grep /home | tr -s "\t " " " | cut -d' ' -f9 | sort | uniq -c | ||
- | 2 /home/inter/webapp/www | ||
- | 3 /home/claire/ftp-import | ||
- | 1 /home/pas/webapp/www | ||
- | 3 /home/cerise/webapp/www | ||
- | root@Atchoum:~# lsof -n | grep /home | tr -s "\t " " " | cut -d' ' -f9 | sort | uniq -c | ||
- | 3 /home/claire/ftp-import | ||
- | 3 /home/cerise/webapp/www | ||
- | root@Atchoum:~# lsof -n | grep /home | tr -s "\t " " " | cut -d' ' -f9 | sort | uniq -c | ||
- | 3 /home/claire/ftp-import | ||
- | root@Atchoum:~# logout | ||
- | </xtermrtf> | ||
- | |||
- | ===== Comment savoir (a la hache) quel IP nous requete le plus ? ===== | ||
- | <xtermrtf> | ||
- | root@Atchoum:~# tail -1000 /var/log/apache2/access.log | cut -f1 -d" " | sort | uniq -c |sort -n | ||
- | 1 127.1.2.3 | ||
- | 1 127.1.2.4 | ||
- | 2 127.1.2.7 | ||
- | 3 127.1.2.5 | ||
- | 15 127.1.2.6 | ||
- | 18 127.1.2.8 | ||
- | 82 127.1.2.9 | ||
- | </xtermrtf> |