web-dev-qa-db-fra.com

Mettre à jour l'état derrière un proxy

J'exécute Drupal dans un intranet qui se trouve derrière un simple proxy HTTP. J'aimerais que les vérifications de mise à jour du module et du noyau fonctionnent réellement.

Je semble me souvenir qu'il y avait un hack de base pour le faire sur Drupal 6, mais je ne trouve plus la page.

Est-ce que quelqu'un sait comment je peux faire fonctionner cela?

9
Frederik

L'une de nos installations d'entreprise avait un proxy direct qui empêchait l'accès direct à Internet, nous avons fini par corriger le noyau avec `` le correctif proxy '' (ainsi nommé car ce problème est ouvert depuis 2004 - http: // drupal.org/node/7881 ).

http://drupal.org/node/7881#comment-413424 - a un patch pour drupal 7 http://drupal.org/ node/7881 # comment-244628 - a un patch pour drupal 6

Une fois le patch installé, vous pourrez modifier drupal_http_request () pour envoyer toutes les requêtes via le proxy.

De cette façon, tous les modules qui nécessitent un accès à Internet fonctionneront comme prévu, par ex. mettre à jour la statue, l'agrégateur, openID, etc.

[~ # ~] mise à jour [~ # ~] : le correctif est déjà fusionné dans Drupal 7 trunk (- https://drupal.org/comment/6425278#comment-6425278 ), et nous espérons qu'il sera sorti avec Drupal 7.16

6
wiifm

Pour référence, c'est la syntaxe que vous pouvez maintenant utiliser dans Drupal pour le configurer pour qu'il s'exécute derrière un proxy (à partir de default.settings.php/7 ):

/**
 * External access proxy settings:
 *
 * If your site must access the Internet via a web proxy then you can enter
 * the proxy settings here. Currently only basic authentication is supported
 * by using the username and password variables. The proxy_user_agent variable
 * can be set to NULL for proxies that require no User-Agent header or to a
 * non-empty string for proxies that limit requests to a specific agent. The
 * proxy_exceptions variable is an array of Host names to be accessed directly,
 * not via proxy.
 */
# $conf['proxy_server'] = '';
# $conf['proxy_port'] = 8080;
# $conf['proxy_username'] = '';
# $conf['proxy_password'] = '';
# $conf['proxy_user_agent'] = '';
# $conf['proxy_exceptions'] = array('127.0.0.1', 'localhost');
2
Andy Jackson

Pour résoudre les pbs intermédiaires, je travaille localement avec le vrai nom de domaine de production, mais derrière un proxy, afin que drupal et la configuration du serveur Web soient strictement identiques (dans certaines conf, l'écoute IP pourrait être différent, en fonction de l'ip d'écoute en production).

Donc, j'avais un proxy qui répondait pour http: //mydomain.local , en procurant à http: // www .mydomain.tld , mais sur une adresse IP locale.

Avec nginx, dans la conf vhost locale:

server_name  mydomain.local;
set $proxied_server_name www.mydomain.tld;
set $proxied_cookie_domain mydomain.tld;

# then generic proxy conf
proxy_set_header Host              $proxied_server_name;
proxy_set_header X-Real-IP         $remote_addr;
proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;

# My param added for drupal absolute url construction
proxy_set_header X-Proxy-Host      $Host;               

# For headers rewriting (Location or Refresh)
proxy_redirect   http://$proxied_server_name/ http://$Host/;

proxy_cookie_domain $proxied_server_name $Host;  
# and for drupal auth, with cookies without sub-domain
proxy_cookie_domain $proxied_cookie_domain $Host;

Pour le vhost mandaté, comme en production

server_name  www.mydomain.tld;

Et dans mes settings.php

if (isset($_SERVER['HTTP_X_PROXY_Host'])) {
  $base_url = 'http://' .$_SERVER['HTTP_X_PROXY_Host'];
}

Avec cette conf, je peux synchroniser tous les drupal ET la base de données ET la configuration du serveur entre beaucoup d'installation drupal (dev et production dans mon cas, mais cela peut être n'importe quoi)) tu veux).

1
dcaillibaud

Il y a un module pour ça

C'est actuellement seulement Drupal 6, mais devrait fournir un bon point de départ.

1
googletorp