目次
動作環境
サーバー: さくら 共用 ビジネスプロ
Wordpress : 4.4.2
ことの始まり
そう、あれは、土日を満喫しホームページ公開当日を迎えた月曜日の話。
管理人は、DNS切り替えを済ませ、優雅に紅茶を飲んでいました。
DNSが浸透するのには、時間が掛るのです。
だから時間を潰すために、いやいやながら、仕方なく思いつつ、ため息混じりに紅茶の啜っていました。
いやー、ずっとこうしていたい。
このまま寝てしまおうかなー、思い始めた頃に声があがったのです。
「お問い合わせフォームおかしくね?」
管理人は紅茶を一気飲みしました。
※ どうでも良い小話が続きます。対処だけ知りたい方は、以下リンクを辿って下さい。
問題はお問い合わせフォームで起きてるんじゃねぇ!サーバーで起きてるんだ!
企画は、ホームページのリニューアル。
新しく作ったものを新サーバーに乗せて、DNSを切り替えるだけで済むはずです。
今までも同じような作業をしてきましたし、悩むようなことはないはずでした。
しかし、結果はご覧のとおり。
お問い合わせフォームが無限ループを起こしていました。
いやいや、待て待て、まだ浸透が済んでないだけだって!
大丈夫だいじょ・・・、ん?
IPは新サーバーになってるぞ?
これってもう切り替わってるんじゃね?
ここで、一回トイレに行くことにしました。
精神統一は大事!
一回気持ちを落ち着けよう!
よし、行くぞ!
うん、ループしてる。
なんで?!
システムはWordpress で出来ている。
お問い合わせフォームは contactForm7製。
原因は、そこにあるのでは?
いや、待て、他の企画の時に正常動作をしているのを確認している。
とすると、問題は別では?
試しに、お問い合わせフォーム以外でSSL通信をする。
うん、駄目だ。
他のページもダメだ。
そう、原因は別にあったのです。
SSLにあったのです。
というか、サーバーにあるのでは?
調査開始!
さくらはプロキシサーバーも使ってるよ!
たまたまですが、すぐに原因がわかりました。
一般設定でサイトアドレスを「www」抜きにした所、無限ループせずアクセスができました。
お前が原因か!
お前が原因か?
ほんとに?
なんと不思議な現象でしょう。
なんだこれ?
すばやく電凸にとりかかります。
その間、およそ15分!
え?長いって?
そりゃ、紅茶を飲んでましたから!(本日2杯目
して、サポートに問い合わせると以下のページに誘導されます。
https://help.sakura.ad.jp/app/answers/detail/a_id/2325
■ウェブサーバの挙動
・環境変数の取扱い
「さくらのレンタルサーバ」にて提供しているウェブサーバApacheは、 80番ポートを使用する(HTTP)ものと、 443番ポートを使用する(HTTPS)ものとの 2種類に分けられます。 また、後者についてはプロクシとして動作します。 一般的に、前者は「http://」、後者は「https://」という形式でアクセスしますが、 同じディレクトリへのアクセスであっても、その際に呼び出されるウェブサーバ が異なると、 CGIプログラムやウェブサーバが.htaccessなどのファイルを読み込む際、挙動に違いが生じます。 例えば、HTTPとしてアクセスした場合はお手元のコンピュータが、 HTTPSとしてアクセスした場合は サーバそのものがアクセス元となります。 このため、SSLのみのアクセス許可(HTTPアクセスの制限)や、mod_rewriteによるURLの書き換えはできません。
うん、良く意味がわからないね。
日本語って難しいね。
プロキシサーバー経由の動作
つまり、こういうことですかね?
【ブラウザ】<https頂戴
↓https://
【プロキシサーバー】
↓https://
【Wordpress】<$_SERVER['HTTPS']ないからhttpな
↓http://
【プロキシサーバー】
↓http://
【ブラウザ】<アイエー、httpsと違う!
ブラウザもからみ合ってめちゃくちゃ
これが、さくらサーバーの動きとして、これだと無限ループにはなりません。
ただ単に、https通信が、httpに置き換わって返ってくるだけです。
しかし管理人の場合には、ブラウザの挙動が絡んでいました。
ブラウザは、リダイレクトをキャッシュする機能を持っています。
そう、持っているのです。
この機能が絡んでくるとこうなります。
【ブラウザ】
↓https://
【プロキシサーバー】
↓https://
【Wordpress】<$_SERVER['HTTPS']ないからhttpな
↓http://
【プロキシサーバー】
↓http://
【ブラウザ】<アイエー、httpsと違う! https頂戴!
↓https://
【プロキシサーバー】
↓https://
【Wordpress】<$_SERVER['HTTPS']ないからhttpな
↓http://
【プロキシサーバー】
↓http://
【ブラウザ】<アイエー、httpsと違う! https頂戴!
↓https://
以下無限ループ・・・辛いです。
「www」抜きの謎
さてさて、謎がもう一つ残ってます。
なぜ「www」を取ると、正常に稼働したのか・・・。
これは、「www」を利用しない場合は、プロキシサーバーを経由しないからではないでしょうか?
それならば、納得できるかなと。
※ 管理人の妄想です
さくら共用サーバーでSSL対応Wordpressを運用するなら2パターンから選択する
1、ドメインを「www」抜きで運用する
2、プロキシ経由からでも動作するようにカスタマイズする
「1」を選択するのが、自然な形でプログラム的には問題無く運用できると思います。
ただ、絶対それが通れるかと言うと、そうではありません。
「2」を選択せざる得ない場面もあるでしょう。
今回のケースは「2」を選択せざる得なかったです。
ではどうするか?
プロキシ経由からでも動作するようにカスタマイズする
テーマファイル内のfunctions.phpに以下のものを記載してください。
$domain には、お手持ちのサイトドメインを入力しください。
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) { $_SERVER['HTTPS'] = 'on'; $_ENV['HTTPS'] = 'on'; $domain = 'www.kabanoki.net'; // 対象ドメインを入力 $_SERVER['HTTP_HOST'] = $domain; $_SERVER['SERVER_NAME'] = $domain; $_ENV['HTTP_HOST'] = $domain; $_ENV['SERVER_NAME'] = $domain; }
設定は、以上です。
では、また