Filed under: Linux

noApache

Bon. C’est la rentrée demain, et je n’ai absolument pas envie de dormir. Alors plutôt que de faire quelque-chose d’utile, je vais venir raconter mes douces pensées sur le monde des serveurs web.

L’autre jour, je discutais avec des copains de la mise en prod d’un site Django avec Gunicorn+Nginx. La question qui a été posée, c’est « pourquoi Nginx et pas Lighttpd ? », et la seule réponse que j’ai pu trouver c’est « Bah, le seul intérêt de Lighttpd c’est de ne pas être Apache, et Nginx lui a volé la vedette ».

Ce qui souligne un élément que vous avez sans doute déjà remarqué : on s’acharne à faire la peau à Apache. Pourquoi diable ? Il paraît qu’Apache est lourd et possède plein de fonctionnalités inutiles qui le rende ultra-lent. Ah. Bon voyons voir ce que donne un “ab -n 1000 -c 100 http://monurl/jquery.js” entre 2 serveurs hébergés chez OVH (100Mbps, donc) :

  • Apache: 131 requêtes/s, 0.8s/requête
  • Nginx: 132 requêtes/s, 0.8s/requête

OH MON DIEU, Nginx traite 1 requête de plus par seconde ! Mais dites donc, c’est fulgurant ! Vous n’allez quand même pas me dire que les gains de performances se jouent sur des microsecondes complètement masquées par la latence du réseau ? Non, impossible !

Les lecteurs assidu se rendront compte à ce point que je suis en train de les arnaquer. En effet, je parlais de mise en prod de Django, et je leur ai servi du benchmark sur du fichier statique. Je dois avouer avoir largement la flemme de faire le benchmark sur du Django. Et pour cause : pour une page à la con, sur mon serveur j’ai besoin d’environ 150ms pour générer la page. Ajoutez à cela que, sauf grosse erreur de ma part, Django est mono-thread, vous imaginez bien que le demi poil de cul d’avance de Nginx ne va pas réussir à faire grand chose.

J’entends quelqu’un au fond me crier « Et la RAM ? », mais lui il va retourner dans son coin parce que certes en gros Nginx prends 2x moins de RAM qu’Apache sur mon installation, mais on parle de ~5Mo VS ~10Mo de RAM, contre les 256Mo que demande WordPress pour fonctionner, je pense qu’on est large.

Donc, si comme moi vous n’êtes pas Facebook, à priori que ce soit Apache ou Nginx, au niveau des performances vous n’allez pas voir la différence. Alors comment choisir l’un ou l’autre ? D’après moi, il y a plusieurs éléments à prendre en compte, le premier étant la constatation suivante : on pourrait prendre le code d’Apache, l’encadrer, et le vénérer jusqu’à la fin des temps tellement c’est bien écrit. Je ne déconne pas, Apache est super bien écrit. Et je vais même aller plus loin : c’est du code C, certes, mais c’est du code C lisible. Ils font très, très fort. Sans oublier la librairie APR dont je vous ai déjà parlé, qui est en grande partie à l’origine de ce miracle.

Une autre raison c’est qu’Apache, c’est du béton armé. En dehors de certaines failles amusantes comme celle qui tourne en ce moment, ce serveur est testé et éprouvé comme peu de logiciels sur cette planète. Inutile de rappeler qu’il y a peu c’était 90% des sites web servi par Apache, et qu’encore aujourd’hui on doit être dans les 60%. Quelqu’un arrive à imaginer ? 60% du web servi par Apache ! En plus de la preuve de viabilité technique (ndlr: les parts de marché de IIS ne prouvent que la viabilité technique des commerciaux de Microsoft), c’est aussi l’assurance que le projet ne sera jamais abandonné, et qu’on peut compter dessus sur le long terme.

J’aimerais aussi pointer du doigt un reproche qu’on fait à Apache : il est trop complet. Attendez une seconde. Trop complet ? Si on met de côté les soit-disant problèmes de performance, ça veut dire que quoi que je veuille faire, Apache pourra le faire. Une fois qu’ils sont performant, les autres serveurs web n’ont qu’un but dans la vie : être aussi puissant qu’Apache. D’ailleurs, les outsiders se prenant trop au jeux pourraient bien finir dans un était « pire » que leur concurrent…

Et pour finir ma petite liste d’arguments, je tiens à faire remarque que tous les administrateurs système Unix connaissent Apache. C’est obligé, sinon c’est qu’ils viennent d’une autre planète. Ce qui veut dire que quand je monte un projet sous Apache, je sais que si j’ai besoin que quelqu’un d’autre travaille dessus, que ce soit à cause de l’agrandissement de l’équipe, la reprise du projet, ou même pour une urgence, il n’y aura pas le moindre souci.

Bon, et en plus je tiens à préciser que je trouve la configuration de Nginx complètement dégueulasse, pour en avoir mis un en prod sur ce serveur même. Sans oublier la doc à moitié en russe… Qui a été traduite depuis, mais avouez que l’anglais comme « langue par défaut » c’est plus pratique quand même.

Finalement, de nos jours pour un projet petit ou moyen, le serveur le plus bas de gamme que vous trouverez pourra probablement accueillir 100 fois plus de visiteurs que ce dont vous avez besoin, alors la question qui se pose est : est-ce que les pouillèmes de performances gagnés par Nginx valent le sacrifice d’un serveur stable, éprouvé et maintenable ?

Leave a Comment August 29, 2011

Mise à jour d’Apache dans Sid…

Certains scripts PHP (par exemple Symfony) dépendent lourdement du fait que si on demande la page http://truc/machin.php/bidule/chose, et que http://truc/machin.php est un fichier PHP, alors c’est ce fichier qui est appellé. Le souci, c’est que dans lors de la dernière mise à jour d’Apache dans Sid, ça ne marche plus…

En fait ce comportement est lié à une directive de configuration AcceptPathInfo, qu’il faut placer à On.

Leave a Comment February 27, 2010

TeamSpeak Proxy

Si vous êtes un administrateur système, et que vous avez la gentillesse de bien vouloir laisser TeamSpeak passer sur votre firewall pour les pauvres étudiants de la résidence dont vous êtes l’administrateur qui ne pourraient sinon pas passer leur temps à jouer à WoW au lieu de travailler, alors vous avez probablement comme moi remarqué une chose : TeamSpeak n’a pas de port standard. Et c’est la merde ! Mon firewall se transforme peu à peu en gruyère…

Pour repousser la menace, j’ai donc décidé de coder un proxy pour TeamSpeak. Le principe est de l’installer sur une machine qui peut sortir sur tous les ports en UDP. Les clients utilisent un petit logiciel spécial pour ouvrir un canal temporaire le temps de l’utilisation de TS, et le proxy fait du port forwarding.

Pour l’instant

  • Le projet est hébergé sur Github, c’est aussi là que vous trouverez les tarballs, installeurs, …
  • Il y a un installeur pour le client sous Windows, pour les autres OS vous devez compiler le client à la main (c’est du C++).
  • Le serveur est codé en Python, et utilise Twisted. Il n’y pas de paquet Debian ou de truc du genre…
  • Pour le support de TeamSpeak 2, je suis à peu près sûr de moi, par contre ce qui est de TeamSpeak 3 c’est encore en version β, histoire de faire un peu moderne.

N’hésitez pas à me contacter si vous n’avez pas la moindre idée de comment ça fonctionne (ça se comprend, c’est moi qui ai codé…) mais que ça vous intéresse quand même :)

Leave a Comment January 21, 2010

Compiler Aegisub sous Debian (et Ubuntu ?)

Voulant faire du sous titre en ASS, le meilleur logiciel que j’ai pu trouver dans ce but est “Aegisub“. Il a pas mal de fonctions, par contre pour le compiler c’est un peu la misère totale.

Sous Debian Sid, j’ai réussi avec la méthode que je vais détailler plus loin, mais c’est pas garanti que ça fonctionne avec toutes les cartes graphiques… Sous Ubuntu, ça devrait être à peu près pareil aussi.

Trève de bavardage, une fois les sources téléchargées (je vous laisse vous amuser à les trouver…), il faut se rendre dans le dossier, puis taper les commandes :

sudo aptitude install build-essential libglu1-mesa-dev libfreetype6-dev libfontconfig1-dev libwxgtk2.8-dev libwxbase2.8-dev intltool libhunspell-dev libopenal-dev libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libpostproc-dev liblua5.1-0-dev libxext-dev
LUA_CFLAGS=-I/usr/include/lua5.1 LUA_LDFLAGS=-llua5.1 ./configure
make -j3
sudo make install

Je garanti pas du tout que ça fonctionne, mais au moins y’a de bonnes pistes (par exemple, pour savoir comment avoir le support de Lua…)

Note : les dernières versions de Aegisub semblent demander WX Widget 2.9, et ce n’est toujours pas packagé dans Debian. Personellement je n’ai pas encore la force mentale pour arriver à compiler cette horreur, donc j’vais rester sur ma vieille revision tant pis…

Leave a Comment September 23, 2009

Dual screen et xrandr

J’oublie toujours la commande, alors la voici.

xrandr --output VGA --auto --left-of LVDS

À noter que LVDS c’est l’écran de mon PC portable, et VGA c’est l’écran que j’ai à gauche du PC portable. Si vous voulez faire un truc plus compliqué ou différent, RTFM :P

Leave a Comment September 17, 2009

WoW… Grrrrr

Étant administrateur d’un réseau étudiant, j’ai souvent à faire avec des joueurs de WoW mécontent de la qualité de la connexion, voire même de l’impossiblité de se connecter… Quand la connexion est saturée, on peut comprendre que ça foire, mais là je me suis retrouvé face à quelqu’un qui n’arrivait plus du tout à se connecter. Après un peu de bidouille, entre les différents paquets de pollutions par les partages de fichier windows, j’ai fini par trouver le petit minuscule insignifiant paquet qui n’arrivait jamais à destination. En fait, il semblerait que le port de WoW ait changé (car ils utilisent un nouveau protocole si j’ai tout compris). Ce qui est cool, c’est que ça a l’air d’être un “standard”, mais ce qui est pas cool, c’est que le port était pas ouvert…

Bref, tout ça pour dire que le nouveau port de WoW c’est 1116 en TCP.

J’en sais pas grand chose sur ce nouveau protocole, mais si il pouvait devenir un standard pour les jeux ça éviterai de transformer mon firewall en passoire, donc ça serait franchement cool que les éditeurs de jeux se mettent d’accord…

Par contre, je déteste encore plus WoW maintenant…

Leave a Comment September 4, 2009

Debian Sid, Hal et Synaptics

Pris d’une folle envie de réinstaller mon PC, je me suis retrouvé avec un Debian Sid tout à fait fonctionnel, au détail près que le touchpad ne fonctionnait pas… Argh !

Premier réflexe : installer synaptics
sudo aptitude install xserver-xorg-input-synaptics

Déjà à partir de là c’est mieux, tripoter le touchpad fait bouger le curseur de la souris. Mais il manque encore le clic quand on tapote, et le scroll. Il faut pour cela configurer HAL, afin qu’il fournisse au driver la configuration appropriée.
On trouve un exemple de configuration dans le fichier /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi. À la fin, la configuration doit être placée dans le fichier /etc/hal/fdi/policy/11-x11-synaptics.fdi

Pour ma part, le fichier contient la configuration suivante

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
 <device>
   <match key="info.capabilities" contains="input.touchpad">
       <merge key="input.x11_driver" type="string">synaptics</merge>
       <merge key="input.x11_options.SHMConfig" type="string">On</merge>
       <merge key="input.x11_options.EmulateTwoFingerMinZ" type="string">90</merge>
       <merge key="input.x11_options.VertTwoFingerScroll" type="string">1</merge>
       <merge key="input.x11_options.HorizTwoFingerScroll" type="string">1</merge>
       <merge key="input.x11_options.TapButton1" type="string">1</merge>
       <merge key="input.x11_options.TapButton3" type="string">2</merge>  <!-- clic du milieu quand on tapote à 2 doigts -->
   </match>
 </device>

Cette configuration est “multi-touch”, ce qui veut en gros dire que pour scroller (aussi bien horizontalement que verticalement ou en rotation), il faut poser 2 doigts sur le touchpad et effectuer le mouvement de scroll désiré.

Il y a aussi une simulation du clic du milieu en tapotant avec 2 doits.

Un dernier truc sympa, c’est le démon syndaemon qui sert à désactiver le touchpad quand on tape au clavier, par exemple avec la commande suivante
syndaemon -d -t -i 0.3

Leave a Comment July 31, 2009

Test antispam/antivirus

Si vous devez tester le fonctionnement d’un antispam ou d’un antivirus, il existe des chaînes considérées comme tel par les logiciels de protection.

Déjà pour le SPAM, voici le GTUBE (Generic Test for Unsolicited Bulk Email) : doit être placé dans un mail sans aucun espace ou retour à la ligne exactement la chaîne suivante :

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Ensuite pour les virus s’applique fichier de test EICAR, à savoir un fichier dont le seul contenu est :

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Leave a Comment June 2, 2009

Debian experimental, Kmail et GPG

Depuis peu, je me suis mis à signer frénétiquement tous mes mails à l’aide de ma clef GPG. Au début ça marchait plutôt bien dans Kmail, jusqu’à ce que je réinstalle Debian en version instable avec un KDE 4.2 tiré de expérimental. En dehors d’une grande bataille avec evdev, je me suis retrouvé avec un Kmail qui refusait de signer mes mails… La solution ? Installer les paquets gnupg-agent et pinentry-qt4 :

sudo aptitude -t experimental install gnupg-agent pinentry-qt4

Attention, ça ne marchera pas directement après l’installation des paquets, il faut d’abord redémarrer le serveur X (qui va s’occuper de lancer le gnupg-agent), ou alors lancer gnupg-agent à la main, mais j’vous laissez vous amuser à le faire tout seul :)

Leave a Comment March 2, 2009

Empreintes digitales

J’ai en ma possession un Lenovo avec un joli lecteur d’empreintes digitales qui ne me sert à rien, et que jusque là j’avais eu une flemme monstre de configurer. Mais là il se trouve que j’ai quelques minutes à attendre, alors pourquoi pas s’y mettre (malgré la tonne trucs que je dois faire).
Donc manifestement c’est un peu le bazar ces histoires d’empreintes digitales, mais le logiciel qui semble émerger comme “standard” est fprint (ceci dit la dernière release date de fin 2007, et c’est pas mieux chez la concurence… décidément tout le monde s’en fout des empreintes digitales). Petite note : je fais la manip sous Ubunt Hardy Heron, mais ça doit pas être mortellement différent sous une autre distro.

Donc ben commençons. Visiblement madman2k avait fait des paquets, mais il a l’air de les avoir virés de son dépôt, donc on va faire à partir du code source.
Il y a 3 éléments à télécharger sur sourceforge : fprint_demo qui est un GUI qui montre ce que fprint peut faire, libfprint qui est le cœur du logiciel, et enfin pam_fprint qui sert à faire sauter le PC si l’authentification échoue ajouter la gestion de fprint dans PAM. Pour ma part j’ai tout téléchargé et décompressé dans /usr/src.

Une fois que c’est fait, il faut installer les dépendances de compilation, ce qui revient sous ubuntu à faire

aptitude install build-essential libusb-dev libssl-dev libglib2.0-dev libmagick9-dev libpam-dev libgtk2.0-dev

La compilation est tout ce qu’il y a de plus classique. On va commencer par libfprint :

cd /usr/src/libfprint-0.0.6
./configure --prefix=/usr
make -j3
sudo make install

(note : le -j3 du make n’est pas du tout nécessaire, c’est juste pour dire d’utiliser 3 threads; d’après la doc de gentoo le mieux est d’utiliser [nombre de cœurs] + 1 threads, et vu que j’ai un dual core, ben ça fait 3 threads)

Allez maintenant on fait le module PAM (oui c’est pareil que l’autre)

cd /usr/src/pam_fprint-0.2
./configure --prefix=/usr
make -j3
sudo make install

Et on fini avec l’outil de demo

cd /usr/src/fprint_demo-0.4
./configure --prefix=/usr
make -j3
sudo make install

Vous pouvez maintenant tester fprint_demo pour voir si ça marche bien. Bon chez moi ça a scanné mon doigt une fois et puis après ça s’est figé même après l’avoir relancé plusieurs fois et avoir supprimé le dossier de préférences….

On passe donc maintenant à la configuration de PAM, qui en fait est ce qui compte vraiment dans ce tuto.
Il faut donc aller modifier l’horriblement mal documenté PAM, et son fichier /etc/pam.d/common-auth
Donc théoriquement vous avez une ligne qui ressemble à

auth    required        pam_unix.so nullok_secure

Avant, ajoutez y la ligne

auth    sufficient      pam_fprint.so

Le nombre de fois que cette ligne apparaît correspond au nombre d’essais que vous avez (ça me semble foireux ça… si quelqu’un a une idée mieux je suis prenneur). Dans /etc/pam.d il y a plusieurs fichiers de configuration, genre “gdm” ou “sudo”, dans lesquels vous pouvez ajouter cette ligne pour ajouter l’authentification par emprunte digitale à ce service uniquement.

Il ne vous reste maintenant plus qu’à « enrôler » vos doigts, c’est à dire à taper la commande pam_fprint_enroll. Voici l’aide

Usage: pam_fprint_enroll options
        -h      --help                  Display this usage information.
        -f      --enroll-finger index   Enroll finger with index.

        Valid indexes are:
        1 - Left Thumb
        2 - Left Index Finger
        3 - Left Middle Finger
        4 - Left Ring Finger
        5 - Left Little Finger
        6 - Right Thumb
        7 - Right Index Finger
        8 - Right Middle Finger
        9 - Right Ring Finger
        10 - Right Little Finger

Et voici un exemple d’usage (pour enregister l’index droit) :

pam_fprint_enroll --enroll-finger 7

Et voilà normalement là PAM vous demande de scanner votre doigt (sauf pour gksudo visiblement) quand il faut vous identifier. Le seul truc c’est que pour l’instant il a jamais voulu reconnaitre mon doigt… Ça viendra peut être un jour ?

Edit : c’est venu \o/ En fait il faut bien poser son doigt à plat sur le lecteur, sinon ça marche pas…

Leave a Comment September 23, 2008

Previous page


Calendar

February 2012
M T W T F S S
« Oct    
 12345
6789101112
13141516171819
20212223242526
272829  

Archives

Categories