Drupal8でbase_urlを設定する方法

Drupal8でbase_urlを設定する方法

ハロー7016です!

今回はDrupal8を導入する際に、base_urlあたりで
ちょろっと躓いたので備忘録として残します。

Drupal8でbase_urlを設定したい

 

今回AWS EC2環境上にDrupal8を構築しました。
WebサーバーはApacheで下記の構成です。

今回アクセスしたいDrupalのURLを
https://hogehoge7016.com/7016chとします
ALB、リバースプロキシを設定して、Drupalを稼働させ
無事に稼働しているように見えたのですが、どうやら様子がおかしい。

画像などをアップロードすると下記のように
サーバーのIP:リバースプロキシportがURLとして表示されていました。
ユーザ登録時の通知メールに記載されるURLなどでも同様でした。

理想:https://hogehoge7016.com/7016ch/system/files/aaaaaa.png
実際:http://111.122.133.144:10080/7016ch/system/files/aaaaaa.png

 

Drupal6や7ではsettings.phpにてbase_urlを設定することで解決していたので同様に設定しようにもDrupal8ではsettings.phpからbase_urlが無くなった模様。

調べてみるとDrupal8ではSymfonyの機能で、リクエストヘッダより自動的にホストを取得するとのこと。

便利になったのか、不便になったのかわからねぇな…
その対応でやったことを下記にまとめておきます。

1:リバースプロキシ(Apache)での設定

confにてアクセス元のホスト情報をsecへ引き継ぐように設定しました。

  • ProxyPassReverseの設定を下記に変える。
  • ProxyPreserveHost On にする。
ProxyPass /7016ch http://111.122.133.144:10083/7016ch
ProxyPassReverse /7016ch http://111.122.133.144:10083/7016ch
ProxyPassReverse /7016ch http://hogehoge7016.com:10083/7016ch
ProxyPreserveHost On

【説明】

・ProxyPreserveHost On

これを設定することでリバースプロキシがWebサーバー(Drupal)まで
クライアントがアクセスしてきたホストをそのまま引き継いでくれます。

・ProxyPassReverse /7016ch http://hogehoge7016.com:10083/7016ch

これは
https://hogehoge7016.com/7016chでアクセスした際に
https://hogehoge7016.com:10083/7016ch/へリダイレクトされてしまい
タイムアウトが発生したため対応として入れました。

2:Drupal8 Settings.phpでの設定

base_urlの代わりに下記を設定しています。

利用するホストをホワイトリストで許可します。
下記の様に書けばいいとのこと。

$settings[‘trusted_host_patterns’] = [
‘^hogehoge7016¥.com$’,
‘^111¥.122¥.133¥.144$’,
];

リバースプロキシを使用している場合は下記を設定する。

$settings[‘reverse_proxy’] = TRUE;
$settings[‘reverse_proxy_addresses’] = array($_SERVER[‘REMOTE_ADDR’]);

上記はLBにて
X-Forwarded-Proto: httpsが設定されているということを
前提としています。

 

参考
https://www.drupal.org/project/metatag/issues/2842049
https://qiita.com/paty-fakename/items/829afd3577ba18dbb2c8

【apache】 ProxyPreserveHost を On にするとはまる(こともある)

ITカテゴリの最新記事