既存の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を舗装するとうまくいかないのですが、地雷はありますか?
$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;
}