ELB + SSL + WordPressについて

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
ELBを経由してEC2へ

この記事を三行にまとめると

cssやjsが上手く読み込めないことがある
HTTPSがONになるようにwp-config.phpを編集します
まずはこの辺を疑ってみるのが良いと思います
AWSのELBを使ってWordpressで作ったウェブサイトをSSL動かす場合の話なのですが、httpsでサイトにアクセスしてみると、なぜかcssやjsが上手く読み込めないことがある。

そういう時、原因としてはcssやjsのパスがhttpsではなくhttpになっているせいが考えられます。

通常、httpsでサイトにアクセスするとサーバ変数に「HTTPS」というのが入ってきます。でも状況によってはこれが入って来ない場合があるんですね。さくらインターネットのレンタルサーバーなんかもそうなんですが、そのせいでcssなどがhttpの方を参照しちゃったりするわけです。

AWSの場合、EC2サーバーではなくロードバランサーにSSLの設定をすることができます。この時、ユーザーからELBへのアクセスはhttpsでも、ELBからEC2へのアクセスはhttpという設定にすることができます。たぶんこういう設定にしていると、サーバー変数の「HTTPS」が入って来ない。ただちゃんと確認したわけではいので、もしかしたらELBからEC2へのアクセスもhttpsにしてあっても同様の現象が起きるかもしれない。もしそうだったらめんご。

いずれにしろHTTPSがない場合にどうするかって話なんですが、ELBの方でSSLの設定ができていれば、httpsでサイトにアクセスした時、以下のようなサーバー変数が入ってきます。

//$_SERVERの中身
[HTTP_X_FORWARDED_PORT] => 443
[HTTP_X_FORWARDED_PROTO] => https

これでhttpかhttpsかを判定して、もしhttpsだった場合はHTTPSがONになるようにwp-config.phpを編集します。

//HTTP_X_FORWARDED_PORT == 443とかでも良い
if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $_SERVER['HTTPS'] = 'on';
  $_ENV['HTTPS'] = 'on';
}

これでhttpsでもcssが正常に読み込まれて表示の崩れなどもなくなる。

もし上記の対策をしたけど表示が崩れたままだーって場合はもっと他の部分に問題があると思うんだけど、もしELBを使ってSSLでサイトを作った場合に表示がおかしかったら、まずはこの辺を疑ってみるのが良いと思います。

ELBにSSLを設定するやり方は以前にも書いたことがあるので、良かったらあわせてどーぞ。

AWSのELB + SSL 〜feat.グローバルサイン〜

お宿にもSSL化の波が押し寄せてキター
 もしかしたら何か関連しているかも? 
 みんなからのコメント 
2017年11月29日 15:07:24
[…] ELB + SSL + WordPressについて | 日記の間 | あかつきのお宿 […]
2020年11月29日 14:33:15
とあるAWSエンジニア
大変参考になりました。長時間悩んでいた事象がこちらのサイトで解決しました。
本当にありがとうございます。
2020年11月30日 16:11:40
まっち~(管理人)
いえいえ、お役に立てて何よりです