<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://uname.pingveno.net/blog/index.php/feed/rss2/xslt" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title># uname -a - Mot-clé - apache</title>
    <link>https://uname.pingveno.net/blog/index.php/</link>
    <atom:link href="https://uname.pingveno.net/blog/index.php/feed/tag/apache/rss2" rel="self" type="application/rss+xml" />
    <description>Le blog de uname.pingveno.net</description>
    <language>fr</language>
    <pubDate>Tue, 18 Aug 2026 13:46:21 +0200</pubDate>
    <copyright>Mathieu Pellegrin</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Dotclear</generator>
          <item>
        <title>Conflict between broken Apache packages makes FCGI angry (mod_fcgid: can't lock process table)</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2014/02/08/Conflict-between-broken-Apache-packages-makes-FCGI-angry-%28mod_fcgid%3A-can-t-lock-process-table%29</link>
        <guid isPermaLink="false">urn:md5:d9a590ab25d996c14c0fb0f8f7c883e9</guid>
        <pubDate>Sat, 08 Feb 2014 17:37:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Hacks</category>
                          <category>apache</category>
                  <category>apache-itk</category>
                  <category>apache-workers</category>
                  <category>debian</category>
                  <category>fastcgi</category>
                  <category>puppet</category>
                  <category>suexec</category>
                  <category>wheezy</category>
                <description>          &lt;p&gt;Here is is a quick note on the fix I made today for a messed up Apache server.&lt;/p&gt;
&lt;h3&gt;The environment&lt;/h3&gt;
&lt;p&gt;Apache2 + Debian + mod_suexec + mod_fcgi&lt;/p&gt;
&lt;h3&gt;The problem&lt;/h3&gt;
&lt;p&gt;The server was down only for PHP-running websites. It triggered a connexion reset when trying to run PHP scripts. Static content and reverse proxies were working correctly, as if nothing was happening.&lt;/p&gt;
&lt;p&gt;In the server logs, the following error was present&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;mod_fcgid: can't lock process table &lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The suexec log was showing no anomaly.&lt;/p&gt;
&lt;p&gt;The server wasn&amp;#8217;t gracefully stopping anymore, and I had to kill him with the &lt;code&gt;-9&lt;/code&gt; signal to stop it.&lt;/p&gt;
&lt;h3&gt;The cause&lt;/h3&gt;
&lt;p&gt;Searching around the web was giving me very few clues on the problem. I couldn&amp;#8217;t find why the CGI subprocess was broken, it is spawned by Apache and so it should not be missing permissions (there is no CGI daemon listening in Apache setup, &lt;a href=&quot;https://uname.pingveno.net/blog/index.php/post/2013/08/25/Configure-Munin-graphs-with-Nginx-and-Debian-7&quot;&gt;contrary to Nginx&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;What causes the Apache subprocesses to get spawned&amp;#160;? Either the Apache &lt;code&gt;mpm-workers&lt;/code&gt;, or &lt;code&gt;mpm-prefork&lt;/code&gt;, or &lt;code&gt;mpm-event&lt;/code&gt; or &lt;code&gt;mpm-itk&lt;/code&gt;. I knew I was using &lt;code&gt;workers&lt;/code&gt;, but a glance in APT installed packages showed me broken packages on &lt;code&gt;workers&lt;/code&gt; and &lt;code&gt;ITK&lt;/code&gt;. Wait&amp;#8230; &lt;code&gt;ITK&lt;/code&gt;&amp;#160;?&lt;/p&gt;
&lt;p&gt;Actually, I run Puppet, and Puppet was configured to keep Apache ot its latest version from repositories. With the release of a newer version of Apache, it had updated the &lt;code&gt;apache2&lt;/code&gt; package &amp;#8230; and installed &lt;code&gt;apache2-mpm-itk&lt;/code&gt; while &lt;code&gt;apache2-mpm-workers&lt;/code&gt; was still present&amp;#160;!&lt;/p&gt;
&lt;p&gt;The result was a conflict while trying to spawn CGI processes, and a crash of the subprocess.&lt;/p&gt;
&lt;h3&gt;The fix&lt;/h3&gt;
&lt;p&gt;Doing a &lt;code&gt;remove apache2-mpm-itk&lt;/code&gt;, and &lt;code&gt;force-reinstall apache2-mpm-workers&lt;/code&gt; did the job.&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>GetSimple: URL index/something returns 404</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2014/02/03/GetSimple-CMS-%3A-URL-index/something-returns-404</link>
        <guid isPermaLink="false">urn:md5:3639ea02711bb850d0f9a7555f29761c</guid>
        <pubDate>Mon, 03 Feb 2014 11:25:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Hacks</category>
                          <category>apache</category>
                  <category>bug</category>
                  <category>GetSimple</category>
                  <category>hack</category>
                  <category>htaccess</category>
                  <category>multiviews</category>
                  <category>rewrite</category>
                <description>          &lt;h3&gt;Problem&lt;/h3&gt;
&lt;p&gt;While using &lt;strong&gt;GetSimple&lt;/strong&gt; with &lt;strong&gt;FancyURLs&lt;/strong&gt; (Apache Rewrite), every menu item nested under the home page returned a 404.&lt;/p&gt;
&lt;p&gt;The (rewritted) URL of the home page is &lt;strong&gt;/index&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The sub-pages URLs are rendered as &lt;strong&gt;index/something&lt;/strong&gt;, and triggered a 404 error.&lt;/p&gt;
&lt;h3&gt;Solution&lt;/h3&gt;
&lt;p&gt;Disable &lt;strong&gt;MultiViews&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;MultiViews is an Apache mechanism for automatically switching wich document is sent to the user, based on the &lt;code&gt;Accept&lt;/code&gt; header. Because the front controller is named &lt;code&gt;index.php&lt;/code&gt;, MultiViews was trying to reach &lt;code&gt;index.php/something&lt;/code&gt; instead of (as specified in RewriteRules) &lt;code&gt;index.php?id=index/something&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;How to do it&lt;/h3&gt;
&lt;p&gt;Open the GetSimple &lt;strong&gt;.htaccess&lt;/strong&gt; file, and locate&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;Options -Indexes&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Change to&amp;#160;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;Options -Indexes -MultiViews&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;See also&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://get-simple.info/forums/showthread.php?tid=5223&quot; hreflang=&quot;en&quot;&gt;http://get-simple.info/forums/showthread.php?tid=5223&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
        
              </item>
          <item>
        <title>Un serveur au régime : faites tourner un serveur complet dans un mouchoir de poche</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/11/26/Un-serveur-au-r%C3%A9gime-%3A-faites-tourner-un-serveur-complet-dans-un-mouchoir-de-poche</link>
        <guid isPermaLink="false">urn:md5:e5d93e067cbe67fe57aa1cd33137909c</guid>
        <pubDate>Mon, 25 Nov 2013 07:15:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Hacks</category>
                          <category>apache</category>
                  <category>debian</category>
                  <category>exim</category>
                  <category>inetd</category>
                  <category>lighttpd</category>
                  <category>linux</category>
                  <category>mysql</category>
                  <category>nginx</category>
                  <category>postgresql</category>
                  <category>serveur</category>
                  <category>sqlite</category>
                  <category>ssmtp</category>
                  <category>swap</category>
                  <category>vsftpd</category>
                <description>          &lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Ce n&amp;#8217;est pas la période pour les régimes et pourtant aujourd&amp;#8217;hui,
dans un billet volontairement cryptique aux
non-initiés, je vais vous dévoiler les quelques secrets qui permettent à
des nerds invétérés de donner vie à des machines ridiculement pauvres
en RAM. Pour la beauté du geste, mais pas que.&lt;/p&gt;
&lt;p&gt;Je me souviens que l&amp;#8217;on s&amp;#8217;est souvent moqué de moi quand je disais
qu&amp;#8217;avec 512&amp;#160;mégas de RAM on pouvait faire tourner un serveur complet
mail+ftp+web+sql. En remplaçant quelques programmes, vous pouvez parfaitement faire
tourner votre application web standalone, un noeud de CDN performant, un
miroir FTP, ou un relais mail.&lt;/p&gt;
&lt;p&gt;Cet article va simplement vous présenter des alternatives, et terminer avec quelques astuces plus générales. Le but est de remplacer notre célèbre LAMP par des solutions moins gourmandes en mémoire.&lt;/p&gt;
&lt;h3&gt;Remplacer Apache&lt;/h3&gt;
&lt;p&gt;Pour remplacer &lt;strong&gt;Apache&lt;/strong&gt;, nous avons le choix entre &lt;strong&gt;Nginx&lt;/strong&gt; et &lt;strong&gt;Lighttpd&lt;/strong&gt; (&lt;em&gt;Lighty&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lighttpd&lt;/strong&gt; est le serveur le plus léger au monde. Sa structure est très simple, et l&amp;#8217;impact d&amp;#8217;une connexion en mémoire est très faible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nginx&lt;/strong&gt; est un serveur qui consomme un peu plus au démarrage, mais qui utilise une gestion intelligente de ses connexions ouvertes pour optimiser son impact mémoire.&lt;/p&gt;
&lt;p&gt;Inconvénients&amp;#160;: oubliez les &lt;code&gt;.htaccess&lt;/code&gt;, préparez-vous à faire un peu de configuration pour remplacer votre &amp;#8220;&lt;code&gt;a2enmod php5&lt;/code&gt;&amp;#8221;, et changez vos habitudes pour redémarrer les services.&lt;/p&gt;
&lt;h3&gt;Remplacer MySQL&lt;/h3&gt;
&lt;p&gt;Ce n&amp;#8217;est pas facile de remplacer MySQL, tellement le nombre de programme qui en dépendent est conséquent. Cependant, si c&amp;#8217;est possible, n&amp;#8217;hésitez pas une seconde, voici les deux alternatives &amp;#8220;lowcost&amp;#8221; possibles&amp;#160;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLite&lt;/strong&gt;&amp;#160;: une base SQLite est simplement un fichier qui est chargé en mémoire au moment où l&amp;#8217;on veut lire dedans. Pas de démon résident, pas d&amp;#8217;impact lorsque la base est inactive. Par contre, préparez vous à attendre un peu si votre base est conséquente&amp;#160;: lire des données en n&amp;#8217;utilisant que le cache disque,&amp;nbsp; ça peut prendre du temps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&amp;#160;: PostgreSQL est un peu le nouveau MySQL, mais en mieux. de faible impact mémoire au démarrage, doté de plus de fonctionnalités que MySQL et proposant de meilleures performances, il reste encore marginal mais a tout pour concurrencer les équivalents propriétaires comme Oracle. On peut l&amp;#8217;utiliser dans un environnement limité, en configurant correctement les limites dans sa configuration.&lt;/p&gt;
&lt;h3&gt;Remplacer ProFTPd&lt;/h3&gt;
&lt;p&gt;Si vous proposez un hébergement, vous proposerez certainement un serveur FTP.&lt;/p&gt;
&lt;p&gt;Si les utilisateurs du serveur sont des utilisateurs &amp;#8220;de confiance&amp;#8221; (ie&amp;#160;: que vous connaissez), vous pouvez leur laisser utiliser le serveur &lt;strong&gt;SFTP&lt;/strong&gt; fourni par le serveur SSH (à activer dans la configuration). De très faible impact mémoire, pour une meilleure sécurité et moins de configuration, le protocole SFTP est supporté par la majorité des clients FTP. C&amp;#8217;est LA solution des flemmards pour mettre en place un serveur FTP.&lt;/p&gt;
&lt;p&gt;Sinon, vous pouvez vous rabattre sur un &lt;strong&gt;VSFTPd&lt;/strong&gt;, qui en plus de vous combler au niveau impact mémoire, vous comblera au niveau rapidité. Il gère aussi le &lt;strong&gt;FTPS&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Remplacer Postfix&lt;/h3&gt;
&lt;p&gt;Si vous n&amp;#8217;utilisez pas la réception des mails et que vous ne faites que de l&amp;#8217;envoi (avec ou sans smarthost), &lt;strong&gt;Exim&lt;/strong&gt; vous comblera au moins autant que Postfix, vous proposant même sous Debian une interface de configuration &amp;#8220;pour les nuls&amp;#8221;&amp;#160;: &lt;code&gt;dpkg-reconfigure exim4-config&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Éviter la catastrophe&lt;/h3&gt;
&lt;p&gt;En cas de gonflement inattendu de la mémoire, et lorsque celle-ci commence à manquer, le système d&amp;#8217;exploitation commence à sacrifier des programmes pour libérer de la RAM. C&amp;#8217;est dommage, on aimerait éviter d&amp;#8217;en arriver à de telles extrémités sur un serveur de production.&lt;/p&gt;
&lt;p&gt;La solution est assez simple, bien qu&amp;#8217;imparfaite&amp;#160;: il suffit de rajouter de la SWAP. La SWAP est un fichier d&amp;#8217;échange placé sur le disque dur, lorsque il n&amp;#8217;y a plus de mémoire en RAM, une partie de la RAM est déchargée (ie copiée) sur la SWAP, pour laisser de la place aux programmes &amp;#8220;actifs&amp;#8221;. Bien entendu, cette mémoire déchargée devra être rechargée dès lors qu&amp;#8217;un programme a besoin d&amp;#8217;un bloc mémoire qui a été placé en SWAP, ralentissant le traitement à la vitesse des temps d&amp;#8217;accès disque (pas cool).&lt;/p&gt;
&lt;h3&gt;Faire dormir tout le monde&lt;/h3&gt;
&lt;p&gt;Ce qui est pénible avec les serveurs, c&amp;#8217;est la quantité de RAM qui est là, utilisée en permanence, pour finalement un seul pic d&amp;#8217;utilisation. Si on pouvait récupérer la RAM des programmes qui n&amp;#8217;interagissent pas avec l&amp;#8217;extérieur, et ne les lancer que quand on en a besoin&amp;#160;? &lt;strong&gt;Inetd&lt;/strong&gt; est fait pour ça&amp;#160;!&lt;/p&gt;
&lt;p&gt;Inetd c&amp;#8217;est un &amp;#8220;super démon&amp;#8221; qui va écouter sur les ports demandés à la place des programmes, et qui va lancer les programmes pour traiter l&amp;#8217;événement, dès lors qu&amp;#8217;une connexion est ouverte sur un de ses ports d&amp;#8217;écoute. On peut donc imaginer avoir un Lighttpd non lancé qui se fait réveiller lorsque Inetd reçoit une connexion sur le port 80. Lighttpd traite alors la requête et s&amp;#8217;arrête immédiatement après, laissant la place pour d&amp;#8217;autres programmes.&lt;/p&gt;
&lt;p&gt;L&amp;#8217;inconvénient ici vient des temps de traitement forcément plus longs qu&amp;#8217;avec des démons résidents (démarrer le programme prend du temps).&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Voilà, c&amp;#8217;est à peu près tout, j&amp;#8217;espère qu&amp;#8217;avec ces petits changements dans votre configuration, vous aurez quelques pistes pour alléger votre serveur, si jamais l&amp;#8217;expérience vous tente. &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Apache : globally configure HTTPS for all VirtualHosts</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2013/01/25/Apache-%3A-globally-configure-HTTPS-for-all-VirtualHosts</link>
        <guid isPermaLink="false">urn:md5:fe226c3e55b5ee9393d47508ef2ebab3</guid>
        <pubDate>Sat, 16 Mar 2013 19:16:00 +0100</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Hacks</category>
                          <category>apache</category>
                  <category>configuration</category>
                  <category>https</category>
                  <category>server</category>
                <description>          &lt;p&gt;You want to configure &amp;#8220;once and for all&amp;#8221; HTTPs for all domains and sub-domains handled by your webserver, and you don&amp;#8217;t want to redeclare the certificate in each VirtualHost. Here is the trick.&lt;/p&gt;
&lt;p&gt;I run Debian. In a default Apache installation, the directory &lt;strong&gt;/etc/sites-enabled&lt;/strong&gt; contains a file named &lt;strong&gt;000-default&lt;/strong&gt; which declares a default VirtualHost for HTTP.&lt;/p&gt;
&lt;p&gt;You have to know that when Apache loads an entire directory of configuration files, the files are read in alphabetical order. So if you want to declare something before something else, you can cheat on its name in the loaded configuration. It is exactly what &lt;strong&gt;000-default&lt;/strong&gt; does.&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;/etc/apache2/sites-available&lt;/strong&gt;, you have a file named &lt;strong&gt;default-ssl&lt;/strong&gt;. Edit this file to fit your needs (path to certificate, etc). Note that this certificate will be the same for all the domains hosted on your server. It&amp;#8217;s what we want&amp;#160;: only one configuration. If you are hosting multiple domains on the same server, the certificate will probably be invalid for at least one of your domains, and you should use &lt;a hreflang=&quot;en&quot; href=&quot;http://httpd.apache.org/docs/trunk/en/mod/mod_macro.html&quot;&gt;mod_macro&lt;/a&gt; instead of a global HTTPs configuration.&lt;/p&gt;
&lt;p&gt;Now, enable the website the common way&amp;#160;: &lt;strong&gt;a2ensite default-ssl&lt;/strong&gt;. Don&amp;#8217;t restart Apache yet.&lt;/p&gt;
&lt;p&gt;Rename the file &lt;strong&gt;default-ssl&lt;/strong&gt; created in &lt;strong&gt;/etc/apache2/sites-enabled/&lt;/strong&gt; to &lt;strong&gt;000-default-ssl&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Configure your other VirtualHost with a &lt;strong&gt;*:80&lt;/strong&gt; section and a &lt;strong&gt;*:443&lt;/strong&gt; section, as usual but without specifying certificate and SSL informations for VirtualHosts on &lt;strong&gt;*:443&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you restart Apache, you will notice something like this&amp;#160;:&lt;/p&gt;
&lt;pre&gt;_default_ virtualhost overlap on port 443&lt;/pre&gt;
&lt;p&gt;To get rid of these warnings, just add to your &lt;strong&gt;ports.conf&lt;/strong&gt;, in the right section&amp;#160;: &lt;/p&gt;
&lt;pre&gt;NameVirtualHost *:443
Listen 443 http&lt;/pre&gt;
&lt;p&gt;When you finally restart Apache, every VirtualHost declared as &lt;strong&gt;*:443&lt;/strong&gt; will use the certificate defined in &lt;strong&gt;000-default-ssl&lt;/strong&gt; without mentioning it.&lt;/p&gt;</description>
        
              </item>
      </channel>
</rss>
