Nous effectuons la transition d'une installation drupal existante pour fonctionner en tant que site SSL uniquement derrière un proxy de déchargement SSL. Drupal lui-même n'a pas de SSL et fonctionne sur le port 80) sur Apache.
Nous avons ce que nous pensons être une configuration assez réussie:
Au bout du monde, il ressemble à:
server {
listen 80;
server_name staging.example.com;
return 301 https://staging.example.com$request_uri;
}
server {
listen 443 ssl;
server_name staging.example.com;
ssl_certificate $chained_cert_path
ssl_certificate_key $private_key_path;
location / {
proxy_pass http://$backend_ip;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-By $server_addr:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect http:// https://;
}
}
Et dans la configuration du site drupal nous exécutons:
// reverse proxy settings and such
$conf['reverse_proxy'] = TRUE;
$conf['reverse_proxy_addresses'] = array($proxy_ip);
$base_url = 'https://staging.example.com';
Comme je l'ai dit, cela semble passer tous les tests, mais mon sens ambide dit que c'était trop facile et qu'il y a un problème énorme qui attend quelque part dans une partie de drupal nous ne comprenons pas assez bien - le pavage manuel de $ base_url ne me convient pas. Y a-t-il des mines terrestres ici?
Vous n'êtes pas obligé d'indiquer $base_url = 'https://staging.example.com';
, vous pouvez avoir quelque chose comme ceci:
server {
listen 80;
server_name staging.example.com;
return 301 https://$Host$request_uri;
}
server {
listen 443 ssl;
server_name staging.example.com;
ssl_certificate $chained_cert_path
ssl_certificate_key $private_key_path;
location / {
proxy_pass http://$backend_ip;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
et dans vos paramètres Drupal:
$conf['reverse_proxy'] = TRUE;
$conf['reverse_proxy_addresses'] = array($proxy_ip);
// from http://devblog.more-onion.com/using-drupal-behind-reverse-proxy
if (
isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' &&
!empty($conf['reverse_proxy']) &&
in_array($_SERVER['REMOTE_ADDR'], $conf['reverse_proxy_addresses'])
) {
$_SERVER['HTTPS'] = 'on';
// This is hardcoded because there is no header specifying the original port.
$_SERVER['SERVER_PORT'] = 443;
}