Howto : Drupal derrière un proxy avec authentification

drupal_blog

Si vous utilisez Drupal derrière un proxy sans ou avec authentification, comme par exemple pour un intranet.

Vous allez être confronté à un gros problème d’utilisation. L’accès à l’interface d’administration est très lent, car il fait des recherches pour savoir les mises à jours disponible, du socle drupal et de ses modules…

Voici comment contourner le problème :

Ajoutez dans le fichier settings.php :

$conf = array(

‘update_fetch_url’ => ‘http://localhost:80/release-history/’

);

Le port 80 est le port surlequel mon apache tourne, vous pouvez bien sur en mettre un autre 😉

Puis autorisez sur votre serveur Apache le mod_proxy (debian-like) :

# ln -s /etc/apache2/mods-available/proxy.* /etc/apache2/mods-enabled/
# ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/

# /etc/init.d/apache restart

Ensuite autorisez le mod_proxy pour le localhost : (Afin d’éviter ce message d’erreur : client denied by server configuration: proxy)

# vi /etc/apache2/mods-enabled/proxy.conf

<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
Order deny,allow
Deny from all
Allow from localhost
</Proxy>
ProxyVia On
</IfModule>

Puis ajoutez ces quelques règles au niveau d’Apache :

ProxyPass /release-history/ http://updates.drupal.org/release-history/
ProxyPassReverse /release-history/ http://updates.drupal.org/release-history/
ProxyRemoteMatch ^.*/release-history/.*$ http://localhost:4444/

Et enfin il faut utiliser cntlm afin de gérer l’authentification avec le proxy qui vous empêche de faire les mises à jour Drupal. CNTLM est un proxy d’authentification comme NTLMaps

CNTLM est disponible sous Ubuntu, un simple « aptitude install cntlm » et le tour est joué.

Il faut maintenant le configurer, pour cela :

# vi /etc/cntlm.conf

Voici les paramètres à changer :

Username        votre-user
Domain          votre-domaine
Password        votre-mot-de-passe             # Use hashes instead (-H)
#Workstation    netbios_hostname        # Should be auto-guessed

Proxy           votre-proxy:8080
#Proxy          10.217.112.42:8080

#
# This is the port number where Cntlm will listen (Ceci est le port d’écoute de CNTLM)
#
Listen          4444

On retrouve d’ailleurs ce port d’écoute dans les règles de Proxy ci-dessus.

Il vous suffit de redémarrer CNTLM et ça devrait fonctionner.

Si cela ne fonctionne pas, n’hésitez pas à revenir vers moi 😉

Merci à Stillcut du forum drupalfr.org pour m’avoir orienté vers un post du forum officiel de Drupal qui m’a permis de trouver la solution

client denied by server configuration: proxy:
client denied by server configuration: proxy:

Author: Pierre-Yves Dubreucq

Passioné par les logiciels libres depuis 2001, je suis VP Bare Metal (Dedibox) chez Scaleway. Je tiens ce blog depuis 13 ans avec beaucoup moins d'assiduité malheureusement qu'à ses débuts, mais bon, le temps est une denrée rare.

Share This Post On

12 Comments

  1. Bonjour,

    Merci pour votre tuto.
    J’ai juste un problème concernant les règles au niveau d’apache. J’ai supposé qu’il fallait les ajouter au niveau de la conf de Apache soit dans /etc/apache2/apache2.conf mais cela ne fonctionne pas.
    Si vous pouviez me donner des pistes.
    Merci.

    Post a Reply
  2. Bonjour @Kiolul,
    Si mes souvenirs sont bons, je l’avais mis dans le vhost par défaut.
    As-tu bien activé le mod proxy ?
    Tu utilises quelle version d’apache ?
    Merci de tes retours et bonne journée
    CiaO ++

    Post a Reply
  3. Merci pour ta réponse rapide.
    J’utilise Apache2. Concernant mod_proxy, je l’ai activer en utilisant ton tuto:
    # ln -s /etc/apache2/mods-available/proxy.* /etc/apache2/mods-enabled/
    # ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/

    Est-ce que celà suffit…
    Bonne journée.

    Post a Reply
  4. Rebonjour,
    J’imagine qu’après avoir fait les liens symboliques tu as bien redémarré Apache ?
    CiaO ++

    Post a Reply
  5. Rebonjour, Oui bien sur.
    Par contre je pense que le souci vient seulement du fichier de config ou mettre les règles de apache.
    Tu me parles de vhost, dans quel fichier tester?
    Merci.
    ++

    Post a Reply
  6. De mémoire, j’ai placé les règles de proxy :
    ProxyPass /release-history/ http://updates.drupal.org/release-history/
    ProxyPassReverse /release-history/ http://updates.drupal.org/release-history/
    ProxyRemoteMatch ^.*/release-history/.*$ http://localhost:4444/
    Dans le fichier :
    /etc/apache2/site-available/default
    Les logs d’Apache te disent quoi ?
    Si tu regardes dans le répertoire en faisant un :
    ls -al /etc/apache2/mods-enabled/
    Les liens symboliques sont-ils bien créés ?
    Désolé, je pose des questions bêtes, mais c’est jamais évident à distance 😉
    Merci d’avance 😉
    CiaO ++

    Post a Reply
  7. Salut et désolé pour la réponse tardive (fêtes de fin d’années oblige ^^).
    J’ai checker les différents points (qui ne sont pas basiques mais bon de rappeler) et te confirme que les liens symboliques sont OK et qu’il n’y a pas d’erreur dans le fichier de log. Le problème se situe vraiment je pense au niveau des règles à ajouter.
    Je ne connais pas vraiment la config de apache mais quand je fais des essais d’ajout, j’ai rapidement des erreurs.

    Pour info le fichier à cette tête:
    NameVirtualHost *

    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/

    Options FollowSymLinks
    AllowOverride None

    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ServerSignature On

    Alias /doc/ « /usr/share/doc/ »

    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128

    Si tu te souviens de la syntaxe pour ajouter les règles plus en détail…

    Merci encore pour ton aide.

    Post a Reply
  8. Salut,
    Je me suis remis sur le sujet aujourd’hui et j’ai trouvé une autre solution qui me semble plus simple à mettre en place. Voici le lien sur le forum de Drupal:
    Ajout dans le menu du paramétrage Proxy

    Une fois « patché », pensez à vider le cache pour que le menu soit mis à jour.

    Merci pour ton aide.

    Post a Reply
  9. Bien le bonjour,
    Merci @Kiolul pour l’info
    Je ne suis pas trop adepte des patchs car après mise à jour il faut le réappliquer, mais c’est toujours bon de le savoir 😉
    Bonne journée

    Post a Reply
  10. Effectivement, il faut penser à le ré-appliquer après MAJ.
    Pour info il tourne sur la version 6.16 donc je devrais être tranquille un petit moment.
    Bonne journée aussi.

    Post a Reply
  11. Ajouter
    $conf[‘update_fetch_url’] = ‘http://localhost:80/release-history/’;
    dans settings.php me semble plus propre non ?
    Ceci mis à part merci pour les infos ça marche nickel chez moi 😛

    Post a Reply
  12. Non valable pour Drupal 7 🙁

    Post a Reply

Trackbacks/Pingbacks

  1. Accéder à internet en terminal derrière un proxy - wget svn hg... | L'admin sous GNU / Linux - Blog Libre - [...] couvre un peu le même périmètre que CNTLM dont j’avais parlé sur mon article pour utiliser Drupal derrière un…

Submit a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *