Compiler nginx avec un tas d’options super cool


Ce qui est cool avec nginx, c’est qu’il peut très facilement se compiler avec pleinnnn de modules additionnels.

Par exemple, pour le compiler avec le support du scripting en Lua et des URLs sécurisées jetables :

set -ex
 
cd /tmp
 
# on installe quelques dépendances, exemple sous Ubuntu
sudo apt-get install libgpgme11 libgpgme11-dev git-core
 
# on récupère le codes modules additionnels
# très souvent dispo sur github, c'est la fête !
git clone https://github.com/chaoslawful/lua-nginx-module
git clone https://github.com/WebServer-Tools/nginx-accesskey-module.git
 
# on dl les sources de nginx lui même
wget http://nginx.org/download/nginx-1.2.6.tar.gz
 
tar -xvf nginx-1.2.6.tar.gz
 
cd nginx-1.2.6/
 
# on compile nginx avec les modules, on inclut aussi le support de gzip
# vu que c'est une config web, et on lui dit de mettre l'exe
# dans /usr/local/nginx
./configure --prefix=/usr/local/nginx --with-http_gzip_static_module --add-module=/tmp/lua-nginx-module --add-module=/tmp/nginx-accesskey-module 
 
# et on lance la compilation
make
sudo make install

Et voilà, un nginx tout neuf. Bon derrière, il faut modifier le fichier /etc/init.d/nginx pour qu’il démarre votre nginx custo, et pas celui des packages.

Juste pour dire que c’est facile à faire. Y a pas 40 000 dépendances, on a des features très étonnantes disponibles dans les modules, et on peut faire des configs différentes pour chaque type de serveur.

Joie.

11 thoughts on “Compiler nginx avec un tas d’options super cool

  • oliviergg

    Je reste un peu sur ma faim :-) .Quels sont les sites de référence sur ces modules ? quels modules recommandez-vous ?

  • truxs

    C’est pour restreindre l’accès à une url en utilisant une clé (ip ou autre).

    Je suppose que c’est pour 0bin.

  • Sam Post author

    Les urls sécurisées jetables sont des adresses qui ne sont accessibles que si on passe une clé en paramètre. C’est pratique si on veut faire des URLs qui expires (pour éviter le hotlinking par exemple), ou des URLS qui sont sur des servers sans authentification mais qu’on veut rendre accessible qu’à certains utilisateurs.

    L’url ressemble à ça:

    http://tonside.com/path/?key=JLK!F78?FD98Q%£JI

    Et la clé est différente à chaque fois, et expire sous conditions. Si la clé n’est pas valide, impossible de d’accéder à la ressource. La clé est générée côté serveur à la demande du client à chaque fois.

    On l’utilise pour deux choses:

    – éviter le hotlinking des videos (le gars copie nos liens de streaming pour les mettre sur son site, mais le lien est plus valide le lendemain)
    – sécuriser des uploads (qui sont sur un serveur sans accès à la base de données utilisateur)

    Au passage, la dernière version de accesskey file une erreur à l’usage. Je viens de m’en rendre compte après l’écriture de l’article:

    unknown directive “accesskey”

    La solution est ici : http://www.ruby-forum.com/topic/168323

  • Sam Post author

    @oliviergg

    On utilise essentiellement :

    Development Kit : dépendance d’autres modules
    Access Key : voir ci-dessus
    Echo : pour debug. J’ai jamais réussi à le faire marcher mais Max y arrive.
    Lua : Pour scripter en Lua nginx. Trop top.
    MP4 : Pour streamer les videos
    Redis2 : Pour taper dans Redis sans soliciter le backend (ça évite de charger le framework web)
    Upload : pour uploader des fichiers sans soliciter le backer (idem)
    Upload Progress : pour afficher la progression des uploads en ajax

  • kontre

    C’est pas un peu lourd de devoir recompiler à chaque fois ? Enfin c’est pas comme si y’avait le choix, mais un chargement un peu plus dynamique des modules serait plus pratique à utiliser, non ?

  • Max

    @kontre

    bof, ça se compile rapidos et tu fais pas ça tous les matins, en gros t’en as pour 10 sec avec le script ci-dessus et un peu plus si il faut chercher les modules.

    Sinon des mecs ont fait un projet appelé openresty qui comprend déjà pas mal de modules, je l’ai pas testé car j’aime pas avoir trop de superflue mais il est pas mal cité dans les docs que j’ai pu voir.

  • Pocket Tiger

    @Max
    Je vais sans doute passer pour une quiche mais. La compilation tout les matins, c’est pour générer des clef différentes chaque jours ?

    Si oui es ce qu’on ne peut pas mettre en place un cron pour faire ça automatiquement ? :/

  • Sam Post author

    Tas as fumé Pocket Tiger, on compile pas tous les matin. Une fois pour chaque server c’est tout ^^

    La clé est est générée pour chaque requête, et algorithmiquement, heureusement.

  • Pocket Tiger

    @Sam

    Fectivement, j’ai raté la négation dans la phrase de Max -_-

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.