lindev.fr

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - apache2

Fil des billets - Fil des commentaires

22 fév. 2015

Apache2 php5-fpm VirtualHost

Cela fait maintenant quelques mois que je n'ai pas édité de nouveau billet sur ce site, je vais donc couper cette période creuse en vous proposant un petit tutoriel sur la mise en place de php5-fpm avec apache2 et tout ça configurable au besoin dans des virtualhost .

Nous avons déjà vu comment faire avec Nginx ( qui est franchement plus clair qu'apache ) mais parfois on a pas le choix du serveur web sur lequel on travail .. alors voyons comment faire ça proprement avec apache2.

Etat des lieux

Le tutoriel se base sur la version stable de Débian du moment, Debian 7 "Wheezy" .
Nous allons également activer les dépôts contrib et non-free pour installer ce qui va suivre .

Pour cela commencez par éditer le fichier /etc/apt/sources.list

sudo vim /etc/apt/sources.list

Et ajoutez à la fin de chaque ligne contrib non-free
Ce qui donne quelque chose comme çà

deb http://cloudfront.debian.net/debian wheezy main contrib non-free
deb-src http://cloudfront.debian.net/debian wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
deb http://cloudfront.debian.net/debian wheezy-updates main contrib non-free
deb-src http://cloudfront.debian.net/debian wheezy-updates main contrib non-free

PS: ne faite pas attention à l'url de mes dépôts ci-dessus "cloudfront.debian.net" , j'utilise une instance (VM) Amazon pour réaliser mes tests .

Installation des paquets nécessaires

Nous allons installer les paquets suivants :

sudo apt-get install php5-fpm libapache2-mod-fastcgi php5-cgi

Puis il nous faut activer le module fastcgi et actions via la commande a2enmod

sudo a2enmod actions fastcgi

Configuration du module fastcgi

Il nous faut lier le module fastcgi aux processus php5-fpm, pour celà nous allons éditer le fichier de configuration du module fastcgi

vim /etc/apache2/mods-available/fastcgi.conf

Pour arriver à ce résultat

<IfModule mod_fastcgi.c>
 AddType application/x-httpd-fastphp5 .php
 Action application/x-httpd-fastphp5 /php5-fcgi
 Alias /php5-fcgi /usr/bin/php5-fcgi
 FastCgiExternalServer /usr/bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
</IfModule>

NB : il vous faut vérifier le chemin du socket php5-fpm dans votre cas, normalement, /var/run/php5-fpm.sock et la valeur par défaut pour l’environnement Débian 7, pour vérifier exécuter cette commande

cat /etc/php5/fpm/pool.d/www.conf | grep "listen = "

Le test

Il ne vous reste plus qu'à tester cette nouvelle configuration, commençons par tester l'ensemble des paramètres d'apache via la commande très pratique

sudo apache2ctl configtest

Puis il ne reste plus qu'à relancer Apache si tout est ok

sudo service apache2 restart

Enfin, nous allons mettre un simple fichier php dans le DocumentRoot par défaut d'apache2

sudo echo "<?php echo phpinfo();" > /var/www/lindev.php && chown www-data:www-data /var/www/lindev.php

Il ne vous reste plus qu'à entrer l'url http://localhost/lindev.php pour voir le résultat .

Conf spécifique par virtualhost

Jusque là, les scripts php sont exécutés par l'utilisateur système www-data dans la plupart des cas, cela va être adéquat, mais si pour une raison quelconque vous devez utiliser un autre utilisateur pour exécuter un script/site en particulier, dans le virtualhost correspondant, il vous faudra surcharger la configuration du module fastcgi, ce qui donnera par exemple

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName lindev.fr
    ServerAlias www.lindev.fr
    DocumentRoot /var/www/lindev/
    ErrorLog /var/www/lindev/error.log
    CustomLog /var/www/lindev/access.log combined

    <IfModule mod_fastcgi.c>
        AddType application/x-httpd-fastphp5 .php
        Action application/x-httpd-fastphp5 /php5-fcgi
        Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi_lindev
        FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi_lindev -socket /var/run/php5-fpm_lindev.sock -pass-header Authorization
    </IfModule>

</VirtualHost>

Ici , j'ai donc donné un autre socket à utiliser, que j'ai nommé php5-fpm_lindev.sock. Ce socket devra bien évidement être configuré coté php-fpm, en créant un nouveau pool ( dans un prochain article certainement ), en attendant, pour tester copiez juste la conf du pool par défaut, et changer le paramètre listen pour spécifier le socket à créer pour ce pool.
C'est également dans ce fichier de pool que vous pourrez spécifier l'utilisateur système à utiliser pour interpréter les fichiers php.

cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/lindev.conf

Changer les paramètres listen, user et group , puis relancer php-fpm

sudo service php5-fpm reload

L'article touche maintenant à sa fin, vous savez maintenant installer apache, php5-fpm et configurer un pool spécifique de php pour un virtualhost.

Ch.

02 avr. 2010

Nginx Premiers pas

nginx-logo.png''Alors voilà , je vais essayer de présenter au mieux nginx , ou tout du moins , expliquer sont installation et utilisation .
On trouve de plus en plus de documentations sur le net , et je vais donc ici essayer de regrouper les choses , pour au final avoir un serveur HTTP digne de se nom , qui pourra sans problème remplacer son homologue Apache .
Je conseillerai même Nginx sur des machine de faible capacités en mémoire et/ou processeur .''

Présentation

Bon là je ne vais pas m'éterniser , le site NginxFr vous l'expliquera certainement mieux que moi .
En gros , c'est un serveur web ( entre autre ! ) open sources , d'origine Russe , développez pour répondre à une forte charge , grâce à une gestion des requêtes asynchrone , via des process innovants .
Ses points forts sont donc , une stabilité accrue , une faible consommation de mémoire , une simplicité de configuration , qui le rend ( je trouve ) agréable à administrer .

Notez qu'il vous est possible de tester ce serveur sans casser l'existant .. il vous suffira de le faire tourner sur un autre port , exemple , le 82 !
Aller , n'hésitez plus lancez vous dans l'aventure ...

L'installation

Comme à mon habitude , je n'utiliserai pas la version des paquet de ma distribution .
Il est pour moi important de savoir ce que j'ai sous le capot , et d'en maitriser ( ou au moins essayer ) toutes les facettes .

Récupération des sources et décompactage

cd /usr/local/src
wget http://sysoev.ru/nginx/nginx-0.7.65.tar.gz
tar xzf nginx-0.7.65.tar.gz
cd nginx-0.7.65

Nous voilà prêt à lancer la compilation de la bête ...
Commençons par éditer un fichier de configuration à la compilation , ( façon débian like comme le précise le site ) , j'ai juste ajouté l'option --with-http_stub_status_module qui permet d'avoir l'équivalent du server-status d'apache .
Pour les autres options , je vous laisse voir la description de chacun d'eux qui sont tres bien documenté à cette adresse

Fichier my_configure

vim my_configure

Et voici le contenu :

#!/bin/sh

./configure \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --pid-path=/var/run/nginx.pid \
  --lock-path=/var/lock/nginx.lock \
  --http-log-path=/var/log/nginx/access.log \
  --http-client-body-temp-path=/var/lib/nginx/body \
  --with-http_ssl_module \
  --http-proxy-temp-path=/var/lib/nginx/proxy \
  --with-http_stub_status_module \
  --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
  --with-debug \
  --with-http_flv_module \
  --with-http_stub_status_module

Rendons le exécutable et go ! :

chmod 777 my_configure
./my_configure
make
make install
mkdir -p /var/lib/nginx/body

warning.png Il vous faudra certainement installer des librairies manquantes ... les messages d'erreurs vous indiquerons lesquels .

Configuration

Nous allons maintenant nous attaquer à la configuration de la bête ... pour commencer .. ou ce trouve quoi !

Emplacements des éléments

Petit tour d'horizon , comme spécifié à la configuration , les principaux fichiers de conf se trouvent dans :

/etc/nginx/

Les fichiers de logs :

/var/log/nginx/

L'exécutable :

/usr/local/nginx/sbin/

Rotation des logs

Si vous ne voulez pas que vos fichiers de logs remplissent le disque en quelques mois , alors , il est préférable de faire une rotation journalière .
Nous allons dédier cette tâche à logrotate .

cd /etc/logrotate.d/
vim nginx

Et voici le contenu :

/var/log/nginx/*.log {
        daily
	missingok
	rotate 5
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
    	if [ -f /var/run/nginx.pid ]; then
    		/usr/local/nginx/sbin/nginx -s reload > /dev/null
    	fi
   	endscript

}

download.pngOu si vous préférez en format à dl : nginx_logrotatenginx

Configuration principale

Le fichier de configuration principale se trouve donc là : /etc/nginx/nginx.conf
Nous allons sauvegarder la version originale , et démarrer de 0 , enfin presque ..

cd /etc/nginx/
mv nginx.conf nginx.conf.old
vim nginx.conf

warning.png Si vous souhaitez faire tourner votre serveur nginx sur un autre port , n'oubliez pas de le modifier ( directive listen ) . De même que l'utilisateur que j'utilise www-data n'est pas forcément le même pour vous .. adaptez à votre conf.

download.pngJe vous met le fichier de conf à dispo , ici : nginx.confnginx.conf

Pour ce qui est des explications sur chaque option , les utilisateurs d'apache trouverons tres vite leurs marques , de plus la documentation est compléte ici.

les Vhosts

Vous l'avez certainement remarqué , dans nginx.conf , il y a la ligne

include /etc/nginx/site-enabled/*;

Qui permet de gérer les vhosts de façons structuré , tous les fichiers de conf présents dans ce répertoire seront analysé par nginx à sont lancement .

Préparons le terrain avant de creer notre premier vhost .

mkdir site-available
mkdir site-enabled

Voici maintenant la création d'un vhost type , le plus simple du monde .

cd /etc/nginx/site-available
vim monsite.com

Et voilà le contenu type :

server {
        listen       80;
        
        server_name  monsite.com  www.onsite.com;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

Vous pouvez donc spécifier un ou plusieurs ports par vhost , ensuite définir des options propre à chaque location .
Nous verrons par la suite comment par exemple ajouter des régles de cache pour les données statics , ou rediriger en fonction de l'ip ect ... mais ne brulons pas les étapes .
Activons notre vhost !

ln -s /etc/nginx/site-available/monsite.com /etc/nginx/site-enabled/

Start Nginx

Pour la première fois nous allons donc lancer nginx afin de tester la conf de base , pour celà il faut vous rendre dans le répertoire contenant l'exécutable .

info.pngl'executable nginx s'utilise de cette façon :

nginx -s [ stop | quit | reopen | reload ] 

Pour démarrer :

cd /usr/local/nginx/sbin/

Et go

./nginx

Il ne doit y avoir aucun message au lancement , vous pouvez vérifier au niveau des logs si tout se passe bien ,

tail -f /var/log/nginx/error.log

Si tout est ok , alors vous voilà prêt à servir des page statiques .. testez avec votre navigateur !

http://localhost:80

Démarrage automatique

Vous avec votre serveur dans sa configuration de base prêt à l'emploi , mais au prochain redémarrage , celui-ci ne sera pas automatiquement lancé , nous allons donc créer de quoi automatiser tout ça ( debian like ).

Rendez-vous dans /etc/init.d/ et éditer le fichier nginx

cd /etc/nginx
vim nginx

Je vous met donc à disposition le script de démarrage ici : nginxnginx

warning.pngLe fichier que je vous donne est adapté à la configuration donné dans ce tuto , si vous avez modifié des choses à la compilation , n'oubliez pas d'adapter ce script au besoin .

Nous allons maintenant le rendre exécutable , puis le déclarer dans les RC

chmod 777 nginx
update-rc.d nginx defaults

Fin de la première partie ..

Et oui , bilan , vous avez un serveur web http , qui peut dés à présent servir du contenu statique , vous savez créer des hôtes virtuels , et votre serveur démarre automatiquement à démarrage de votre machine .
Ouf ... et bien il nous reste plus qu'à prendre en charge les scripts php , et - ou perl , qui sera le sujet de la deuxième partie .. ( rédaction en cours )

23 mar. 2010

PHP et Clamav

PHP + Clamav = PHP ClamAV Lib

php-clamav_logo.png Passer les fichiers uploadés par un anti-virus , n'est plus marginal de nos jours . Même sur des systèmes linux , il faut se protéger ...

Etat des lieux

Nous allons donc utiliser un serveur web , avec apache et php5.x d'installé , évidemment clamav sera lui aussi installé et fonctionnel , si ce n'est pas le cas, vous pouvez vous reporter à ce tuto pour son installation .

Dans mon cas , je souhaitai vérifier les fichiers uploadés via un serveur FTP , comme j'ai mis en place un script PHP qui épluche les logs et averti les utilisateurs finaux de l'arrivée d'un nouveau fichier à traiter .

N'ayant finalement pas envi de mettre en place un serveur mandataire FTP transparent pour intégrer l'antivirus , j'ai décider d'utiliser le script de surveillance pour en plus d'avertir les personnes concernés , vérifier les fichiers et les supprimer en cas de détection positive .

PHP ClamAV Lib

Nous allons donc récupérer et décompresser l'archive , sur le site de ClamAV

wget http://sourceforge.net/projects/php-clamav/files/0.15/php-clamav_0.15.2.tar.gz/download
tar xzf php-clamav_0.15.2.tar.gz
rm php-clamav_0.15.2.tar.gz
cd php-clamav_0.15.2/

Compilation

phpize
./configure --with-clamav
make 
make install

PHP.ini

Nous allons donc changer un ou deux petits paramètres dans le php.ini
A commencer par le paramètre extension_dir si ce n'est pas encore fait .
A la fin de la compilation , le chemin à définir vous est indiqué , pour moi , ce sera :

extension_dir = "/usr/lib/php5/20060613/"

Ensuite , il nous faut lier l'extension clamav à php , pour celà nous allons ajouter à la fin du fichier php.ini ces quelques lignes :

extension=clamav.so
[clamav]
clamav.dbpath=/var/lib/clamav
clamav.maxreclevel=0
clamav.maxfiles=0
clamav.archivememlim=0
clamav.maxfilesize=0
clamav.maxratio=0

Enregistrez les fichier et redémarrez apache pour prendre en compte les derniers changements .
Pour vérifier que le module soit bien activé , vous pouvez entrer cette ligne de commande :

php -m | grep clamav

Qui doit normalement vous retourner clamav



Ou alors faire le grand standard echo phpinfo();

Utilisation

Ca y est vous avez fait le plus dur ... avouez que c'était simple !
Bon , ne nous reste plus qu'à utiliser ce module fraichement installé .

Dans les sources , vous avez peut être remarqué la présence d'un fichier php nommé phpclamav_test.php
N'hésitez pas à le tester , et l'ouvrir pour voir les fonctionnalités du module .

Voici son résultat :

test-clamav.jpeg

La fonction la plus utile est bien évidemment cl_scanfile qui prend deux arguments ,

  1. Le chemin vers le fichier à analyser
  2. La variable qui se verra attribué le nom du virus en cas de détection d'infection

La valeur de retour a deux valeur possibles :

  • 1 : détection de virus
  • 0 : pas de détection de virus

Ce qui vous donne donc un script du style , ( à adapter à votre utilisation )

$file = "/var/www/monfichier.zip";

$retcode = cl_scanfile($file, $virusname);
    if ($retcode == CL_VIRUS) {
        echo "<b>File path : </b>".$file."<b>Return code : </b> Virus found name : ".$virusname; 
    } else {
        echo "<b>File path : </b>".$file."<b>Return code : </b> Le fichier est sain"; 
    }

Faites vos test

Il ne vous reste plus qu'à tester vos scripts avec eicar , disponible sur son site.

Ch.

09 mar. 2010

Maj sécurité Apache

Multiples vulnérabilités du serveur HTTP Apache

faille-majeure-securite-systeme-dns-L-1.png

Les failles

Plusieurs vulnérabilités dans les modules mod_isapi, mod_headers et mod_proxy_ajp permettent à un utilisateur malveillant de provoquer un déni de service ou d'exécuter du code à distance.

Versions concernées :

2.2.0 à 2.2.14.

Solution

Mettre à jour apache , pour installer la version 2.2.15

Sources

http://www.certa.ssi.gouv.fr/site/CERTA-2010-AVI-112/CERTA-2010-AVI-112.html

Ne tardez donc pas à faire vos maj .

Bonne journée , Ch.

12 janv. 2010

CouchDB

Installer couchDB debian Lenny

couchDB.png

Pour installer couchDB sur debian lenny ( stable ), une toute petite manip est nécessaire afin d'avoir la version 0.10.0. Sinon , vous aurez la version 0.8.0 qui est une version trop ancienne pour une bonne utilisation .

La manip

Le principe est simple , utiliser les paquets de squeeze.

Editez votre sources.list:

vim /etc/apt/sources.list

Ajouter le dépot squeeze :

deb http://ftp2.fr.debian.org/debian/ squeeze main contrib non-free

Un petit update

apt-get update

Et enfin , l'installation :

apt-get install couchdb

Attention : Une fois l'installation terminée , n'oubliez surtout pas de retirer le dépot de votre source.list .

Configuration

Fichier : /etc/couchdb/default.ini

Si vous désirez vous connecter de l'extérieur , ou pour utiliser une réplication entre deux machines , il vous faudra enlever ( commenter ) le paramétre bind_address = 127.0.0.1

Dans ce fichier , vous pouvez aussi paramétrer le port auquel le serveur écoute . ainsi que d'autres choses ... mais je ne suis pas encore aller plus loin pour le moment .

Fichier : /etc/couchdb/local.ini

Pour un accès administrateur un peu plus privé , dé-commentez le paramètre admin = ...
Et mettez votre mot de passe , il sera crypté au prochain redémarrage de couchDB .

Redémarrage

Redémarrez votre serveur couchDB :

/etc/init.d/couchdb restart

Note: J'ai fais deux installations et deux fois j'ai rencontré le problème suivant , pas moyen de me connecter au serveur ... dans les logs , un problème de bind ( le port déjà occupé ? ).
Solution , couper tous les process à coup de kill -9 et redémarrer couchdb .

Utilisation

Administration

Par défaut , une interface web d'administration est disponible à l'adresse suivante :

http://<ip du serveur>:5984/_utils

Avec php

Pour l'utilisation de couchDB avec php , j'ai développé une petite librairie simplifiant grandement les actions de bases Ajout / suppression / modification / clonage / lecture / réplication / ect ...
Cette librairie est disponible à plusieurs endroits :
fw-oswar.fr
phpclasses.org
freashmeat



Je trouve cet outil vraiment complémentaire à une base , il y a encore beaucoup à découvrir dessus ( les vues , les fonctions ect ... ) .. mais une chose à la fois .

Ch.

- page 1 de 2