web-dev-qa-db-ja.com

Drupal SSLオフロードリバースプロキシの背後-この設定は正しいですか?

既存のdrupalインストールをSSLオフロードプロキシの背後にあるSSL専用サイトとして実行するように移行しています。Drupal自体にはSSLがなく、ポート80で実行されていますApache。

かなり成功した構成だと思います。

世界のnginx側では、次のようになります。

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://;
    }
}

そしてdrupalサイトの設定で私たちが実行しています:

// reverse proxy settings and such
$conf['reverse_proxy'] = TRUE;
$conf['reverse_proxy_addresses'] = array($proxy_ip);
$base_url = 'https://staging.example.com';

私が言ったようにこれはすべてのテストに合格しているようですが、私のスパイの感覚はこれが簡単すぎると言い、drupalの一部でどこかで待っているという疑わしい問題があります。 -手動で$ base_urlを舗装するとうまくいかないのですが、地雷はありますか?

6
Wyatt Barnett

$base_url = 'https://staging.example.com';を指定する必要はありません。次のようにすることができます。

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;
    }
}

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;
}
5