jul is a nolife

To content | To menu | To search

Keyword - Apache

Entries feed - Comments feed

Monday, January 28 2008

Un hosts.deny pour apache 2

Pour bloquer l'accès à un site web pour une adresse spécifique, j'ai d'abord tout simplement pensé à /etc/hosts.deny, mais pour aller plus loin j'avais besoins d'une solution plus fine. Après quelques recherches j'ai donc trouvé un moyen de le faire efficacement grâce au mod_rewrite d'apache.

On rajoute déjà les règles dans le fichier de son vhost :


RewriteEngine On

RewriteMap hosts-deny txt:/etc/apache2/hosts.deny
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^/.* - [F]

Cette règle lit dans le fichier /etc/apache2/hosts.deny afin de lister les adresses ip ou domaines à bloquer :


uneip -
unnomdedomaine -
 

Il ne manque plus qu'a redémarrer apache :


/etc/init.d/apache2 restart

Les visiteurs étant listés dans /etc/apache2/hosts.deny se verront ainsi renvoyer vers une page "Forbiden". On peut bien sur imaginer une redirection vers une page personnalisée genre (banni.html) :


<html>
<head>
<title>Vous avez été banni</title>
</head>
<h1>Vous n'êtes plus le bienvenu ici</h1>
</html>

On change simplement la ligne :


RewriteRule ^/.* - [F]

Par :


RewriteRule ^/.* /banni.html [L]

Source: http://httpd.apache.org/docs/2.0/mi...

Wednesday, October 4 2006

Déploiement de ruby on rails avec apache 2.0 et mongrel

Le principal problème de Ruby on Rails, actuellement, est son déploiement dans un environnement de production. Il existe pourtant un certain nombre de possibilités plus ou moins simples.

La solution que j’ai retenu est d’utiliser la capacité de clustering de mongrel avec la version 2.0 de apache . Les développeurs de mongrel conseillent l’utilisation d'apache 2.2 et de son mod_load_balancer. Néammoins, apache 2.0 reste la version la plus simple à utiliser, car maintenue par les principales distributions (Debian en tête).

En imaginant que nous avons déjà un environnement rails en place, nous allons commencer par installer mongrel:


$ sudo gem install mongrel

Une fois mongrel installé, configurons le pour une application donnée :


$ sudo mongrel_rails cluster::configure -e production \
-p 8000 -N 3 -c /repertoire/de/notre/application \
-a 127.0.0.1 --user www-data --group www-data
Petite explication, nous configurons mongrel en cluster de trois processus (-N 3) commençant au port 8000 (-p 8000), ce qui nous lancera trois processus (8000,8001 et 8002). A noter également que notre répertoire devra posséder les permissions www-data. Nous pouvons à présent lancer le cluster:

$ sudo mongrel_rails cluster::start

Il faut maintenant configurer apache pour qu’il gère de manière transparente ce cluster. Pour cela, nous allons utiliser le module mod_proxy de la version 2.0. Voici le code pour un hôte virtuel (/etc/apache2/site-availables/monsite.fr dans Debian):


<VirtualHost *>
ServerName www.monsite.fr
ServerAdmin admin@monsite.fr
DocumentRoot /repertoire/de/notre/application/public

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyRequests Off
ProxyPassReverse / http://localhost:8000/
ProxyPassReverse / http://localhost:8001/
ProxyPassReverse / http://localhost:8002/
ProxyPreserveHost On
RewriteEngine On
RewriteMap servers rnd:/etc/apache2/map.txt
RewriteRule ^/(images|stylesheets|javascripts)/?(.*) $0 [L]
RewriteRule ^/(.*)$ http://localhost:${servers:ports}/$1 [P,L]

<Directory /repertoire/de/notre/application/public/>
Options +FollowSymLinks
Order allow,deny
allow from all
</Directory>

ErrorLog /var/log/apache2/monsite_error.log
LogLevel warn
CustomLog /var/log/apache2/monsite_access.log combined
ServerSignature On
</VirtualHost>

N’oubliez pas d’activer le module apache et le nouveau site.


$ sudo a2enmod proxy
$ sudo a2ensite monsite.fr

Il ne reste plus qu’à relancer apache! Les connexions vers www.monsite.fr seront ainsi redirigées automatiquement vers le cluster le plus approprié.

Cette technique nous permet d’avoir une application rails supportant une charge plus importante en multipliant les clusters.

Voir également (en anglais): la doc de mongrel et ce blog.