Improvment on Black-Frames.net

We just made some new modifications on Black-Frames.net in order to improve your visits.

In fact, after the DDoS indirectly made by a Twitter user, we had to react quickly to avoid our website to be down like that.

So we made some Apache modifications to handle more users (using mod_cband and mod_evasive). We continue to work with these modules to set the perfect values for our server.

We also setted up the GZip component to compress data for the newest browser and added a performant cache system, using memcached.

On the website, we corrected some bugs and added the number of votes for each images. We also moved our feeds to FeedBurner, so you should update your Rss Readers to be up to date.

Enjoy visiting Black-Frames.net and feel free to contact us if something is wrong :)

Filed under  //  Apache   Development   General   Projects   amélioration   black-frames   bug   correction   improvment   website  
Posted by Cyril Nicodème 

Se protéger du Hot Linking

Le problème de publier des images intéressantes, c'est que vous risquez d'avoir d'autres personnes qui les affichent sur leur site, mais en laissant l'image sur votre serveur.

Le problème est qu'ayant l'image hébergée sur votre machine, c'est votre débit qui sera utilisé. Si l'autre site possède un important trafic, il peux tuer votre disponibilité ou en tout cas la ralentir.

Afin d'éviter que les images ne soient affichées depuis un autre site, voici un petit bout de code à mettre dans un fichier .htacess :

RewriteEngine On
#Replace ?yoursite.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+.)?yoursite.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/stealing-is-bad.jpg with your "don't hotlink" image url
RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/stealing-is-bad.jpg [L]

Remplacez bien les valeurs indiquées par celle correspondant à votre configuration, et vous serez tranquilles :)

Source: http://www.pcland.info/archives/156/more-htaccess-tricks-for-you-wordpress-blog.html

Filed under  //  Apache   Security   hot-linking   htaccess   image   steal  
Posted by Cyril Nicodème 

Django en serveur - Sommaire : Site en Python (Django) sous Apache avec mod_wsgi.

(Voici la suite de ma petite série "faire mumuse avec python sur son serveur".)

Nous venons de voir la mise en ligne de notre projet développé en python en utilisant mod_python.

Mais aujourd'hui, nous pouvons utiliser un nouveau module, plus performant que ce dernier, alors pourquoi s'en priver ?

Tout d'abord, installons le. Sous Debian, voici la commande :

apt-get install libapache2-mod-wsgi

Puis activons le :

a2enmod wsgi

ou à la mano :

ln -s /etc/apache2/mods-available/wsgi.load /etc/apache2/mods-enabled/
ln -s /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-enabled/

Remarquez qu'il y a aussi un fichier de configuration !
(par défaut, ce fichier de configuration est entièrement commenté. Vous pouvez donc l'ignorer.)

Maintenant, passons aux choses sérieuses, voici à quoi ressemblera votre VirtualHost :

<VirtualHost *:80>
        ServerAdmin postmaster@[domain].tld
        ServerName www.[domain].tld
        ServerAlias [domain].tld
        DocumentRoot /var/www/[domain]/www/[domain]
 
        ErrorLog /var/log/apache2/[domain]_error.log
        LogLevel warn
        CustomLog /var/log/apache2/[domain]_access.log combined
        ServerSignature Off
 
        WSGIScriptAlias / /var/www/[domain]/www/[project_name]/django.wsgi
 
        Alias /media "/var/www/[domain]/www/media"
        <Location "/media/">
                SetHandler None
        </Location>
 
        Alias /static "/var/www/[domain]/www/static"
        <Location "/static/">
                SetHandler None
        </Location>
 
        <LocationMatch "\.(jpg|gif|png)$">
                SetHandler None
        </LocationMatch>
</VirtualHost>

Je passerai sur l'explication des directives pour media et static, que vous trouverez sur le précédent article.

La ligne qui nous intéressent vraiment ici, c'est :
WSGIScriptAlias / /var/www/[domain]/www/[domain]/django.wsgi.

Comme nous l'avions vu dans le précédent article, ma structure de dossier est faite de telle manière que j'ai un dossier correspondant au sous domaine (ici, www), et dedans, trois dossiers :
domain (le même nom que le domaine (aka le nom du projet), qui contiens le code python,
static et
templates).

Maintenant, voici le contenu du fichier django.wsgi :

import os
import sys

sys.path.append('/var/www/[domain]/www/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'domain.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Remarquez que j'ajoute le projet au python path (avec la ligne "sys.path.append"). Je ne précise pas le répertoire qui contiens le code, car la ligne d'après s'en charge (de "/var/www/[domain]/www/" à "domain.settings", j'obtiens /var/www/[domain]/www/[domain]/settings.py !

Redémarrez Apache et voilà !

Tout fonctionne !

Bon, la première fois, ça peut-être un peu long à charger, mais ensuite, le site sera fluide et agréable à naviguer !

Si vous avez des problèmes avec le thème de la partie Admin, vous avez oublié de faire un lien symbolique vers le répertoire "media" du module admin de Django. Pour avoir la démarche, c'est ici.

De plus, si vous désirez plus de détails concernant le module Wsgi, cette page vous aidera probablement.

Filed under  //  Apache   Development   Projects   Python   django   mod   mod_wsgi   wsgi  
Posted by Cyril Nicodème 

Django en serveur - Sommaire : Site en Python (Django) sous Apache avec mod_python.

(Voici la suite de ma petite série "faire mumuse avec python sur son serveur".)

Lorsque j'ai parlé du framework python Django, beaucoup d'entre vous m'ont fait la réfléxion du :

Ça à l'air cool (ça l'est ! :p), mais la dernière fois que j'ai tenté de faire marcher python avec apache, ça a été l'enfer !

Ce jour est révolu :) Bon, sur le site de Django, ils conseillent d'utiliser mod_wsgi, mais pour ce tutoriel, nous utiliserons mod_python.

Donc tout d'abord, nous allons l'installer (méthode pour Debian) :

apt-get install libapache2-mod-python

Ensuite, il va falloir l'activer :

a2enmod python

ou équivalent :

ln -s /etc/apache2/mods-available/python.load /etc/apache2/mods-enabled/

Ensuite, il va falloir créer un VirtualHost qui indiquera à Apache que pour ce domaine, il faut utiliser python. Voici un exemple de VirtualHost spécifique à Django :

<VirtualHost *:80>
        ServerAdmin postmaster@[domain].tld
        ServerName www.[domain].tld
        ServerAlias [domain].tld
        DocumentRoot /var/www/[domain]/www/[domain]

        ErrorLog /var/log/apache2/[domain]_error.log
        LogLevel warn
        CustomLog /var/log/apache2/[domain]_access.log combined
        ServerSignature Off

        <Location "/">
                SetHandler mod_python
                PythonHandler django.core.handlers.modpython
                SetEnv DJANGO_SETTINGS_MODULE [nom_du_projet_django].settings
                PythonPath "['/var/www/[domain]/www/'] + sys.path"
                PythonAutoReload Off
                PythonDebug Off
        </Location>
 
        Alias /media "/var/www/[domain]/www/media"
        <Location "/media/">
                SetHandler None
        </Location>
 
        Alias /static "/var/www/[domain]/www/static"
        <Location "/static/">
                SetHandler None
        </Location>
 
        <LocationMatch "\.(jpg|gif|png)$">
                SetHandler None
        </LocationMatch>
</VirtualHost>

Quelques explications s'imposent. Pour mes projets Django, j'ai choisis de faire un structure simple. Dans le dossier de mon projet (appelons le "domain"), j'ai le nom du sous-domaine (ici, www), et dedans, je crée trois dossiers :

  • [domain] (le même nom que son dossier parent aka le nom du projet) : il contiendra le code Django
  • static : il contiendra tous les fichiers nécéssaire au site : css, js, images, etc
  • template : il contient les templates utilisés par Django

Du coup, le fichier de configuration semble un peu plus clair : on définis un Handler de type python pour le répertoire qui contient le code python (/var/www/[domain]/www/[domain]), puis on définis un Handler null (donc aucune interprétation d'un quelconque code) pour les autres dossiers (media et static).

Maintenant, vous vous demandez à quoi sert "media".

En fait, ce répertoire est un liens symbolique que nous allons créer, et qui pointe sur le module admin de Django. En effet, dans la configuration actuelle, si vous tentez d'accéder à l'admin (en ajoutant un /admin/ sur l'url), vous verrez que les images, le style et le javascript ne sont pas présents.

Logique ! Comment apache peux deviner d'où ils viennent ?

Donc pour que notre admin soit fonctionnel, il faut faire un lien symbolique du module admin à notre projet (en supposant que vous avez installez Django comme indiquez dans notre précédent article) :

ln -s /opt/django/django/contrib/admin/media/ /var/www/[domain]/www/media

Du coup, la configuration dans votre VirtualHost prendra aussi effet pour ce répertoire.

Voilà !

Vous n'avez plus qu'à redémarrer, et si votre fichier settings.py de votre projet est correct (notamment au niveau des répertoires ;)), votre site devrait-être accessible !

Filed under  //  Apache   Development   Projects   Python   django   media   mod-python   server   static   template  
Posted by Cyril Nicodème