質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

2269閲覧

Wordpressサイトをリバースプロクシ上のサイトでSSL化したい

退会済みユーザー

退会済みユーザー

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2017/05/03 04:25

###前提・実現したいこと
Wordpressサイトをリバースプロクシ上のサイトでSSL化したい

###背景
リバースプロクシサーバーを利用してサイトの常時SSL化を目指しています。
しかし、実際のWordpressが稼働しているサーバーは、意図的にSSLに対応しておらず、
WordpressがSSLからアクセスされたことが認識できないことが考えられます。
サイトマップ等のURL出力にも影響が出ることが考えられます。

本体&プラグイン等の手動アップデートを考慮して、どの部分を変更 or 追加することで
強制的にSSLで見られているということをWordpressに認識させることができるでしょうか?

###環境
Frontend:nginx 1.12 + Let's encrypt
MiddleEnd: Apache 2.2.x
App : Wordpress 4.7.x

###発生している問題・エラーメッセージ

現在計画段階のためなし

###使用しているプラグイン

Category Limitation Google XML Sitemaps MW WP Form Smart Custom Fields WP Multibyte Patch WP Super Cache WP User Avatar

###試したこと
自己フレームワークにより制作されたWebサイトで、SSL運営テスト中のみ(perl)

###補足情報(言語/FW/ツール等のバージョンなど)
FreeBSD 10.x
php 7.1.x
Server conoha VPS (旧HDDプラン) 2台 (ローカルネット接続済)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

WordPress には次の通り is_ssl() という関数が用意されており、基本的には WordPress 本体や行儀のよいプラグイン達はこの関数で現在の接続が SSL か否かの判断をしているようです。

is_ssl() | Function | WordPress Developer Resources

コードを引用すると、次のようにスーパーグローバルの $_SERVER['HTTPS'] を確認する単純な内容です。 is_ssl() を使わずに自分で判定しているプラグインもあるかもしれませんが、まあ抑々 PHP で他の判定方法を使う理由も思い当りませんし、基本的にはそういったプラグインも同等の処理だと考えて良いのではないでしょうか。

php

1function is_ssl() { 2 if ( isset( $_SERVER['HTTPS'] ) ) { 3 if ( 'on' == strtolower( $_SERVER['HTTPS'] ) ) { 4 return true; 5 } 6 7 if ( '1' == $_SERVER['HTTPS'] ) { 8 return true; 9 } 10 } elseif ( isset($_SERVER['SERVER_PORT'] ) && ( '443' == $_SERVER['SERVER_PORT'] ) ) { 11 return true; 12 } 13 return false; 14}

というわけで、上記の処理に 常に SSL であると認識させる ためには、次のようにして wp-config.php あたりで $_SERVER['HTTPS'] を上書きしてしまえば簡単です。

php

1$_SERVER['HTTPS'] = 'on';

ちなみに、上のリンクから is_ssl() のドキュメントの後半を読んでいただくと、 User Contributed Notes に同様のやり方でリバースプロキシ環境に対応する方法が記載されています。そちらはもう少しちゃんと (?) していて、以下の通リバースプロキシから送信される X-Forwarded-Proto HTTP ヘッダを元に、「本当にリバースプロキシとユーザエージェントの間は SSL なのか?」を判定してから $_SERVER['HTTPS'] の上書きを行っていますが、今回は全面的に常時 SSL 化されるようなので、前掲のような雑な処理で良いと思います。

※もしも「SSL 接続でない場合、 https:// にリダイレクトさせる」ような処理をWordPress 上で実装するのであれば必要となりますが…

php

1if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') 2 $_SERVER['HTTPS'] = 'on';

投稿2017/05/03 06:22

argparse

総合スコア1017

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/05/03 10:56

ありがとうございます。 リダイレクトはリバースプロクシ側で行います。 わずか1行の設定できるので、とても助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問