.log

業務系ITナンデモ屋の日々得ては失われていく知識を書き留めておくメモ。
日記は苦手ですが将棋ネタなんかも書いています。内容は無保証・無責任です。

nginx経由で背後Apache上のWordpressを使う


タイトルの環境で、Wordpressのプラグインを利用しないのであれば、以前書いた方法で問題ないんですが、いろいろ使いはじめると管理ページ上での遷移などがおかしくなったりします。

ここで書く方法は、PHPのほぼすべての環境変数を誤魔化すのでnginxがHTTPSで、背後のApacheがHTTPみたいなややこしい運用でも問題ありません。

前提条件として、nginxで"X-Real-IP"を送り込んでおく必要があります。"X-Forwarded-For"でも大差ないですが割愛します。

なお、Wordpress 3.7 / 3.8 で動作確認済みで実運用中です。

手順

手順は2つだけです。

まず、以下をWordpressのルートディレクトリ("wp-load.php"などがある場所)に「rproxy-hack.php」の名前で作成します。★のところは要修正。
<?php

define ("RH_ROOT", "/");  // ★ 公開URLのパス
define ("RH_IS_HTTPS", true); // ★ HTTPSで公開するならtrue、でなければfalse
// define ("RH_PORT", 12345);  // ★ 標準以外のポートで公開するならここで設定

//////////////////////////////////////////////////////////////// 設定ここまで

// set HTTPS
if (defined("RH_PORT")) {
    $_SERVER["HTTP_HOST"]   = $_SERVER["HTTP_HOST"] . ":" . RH_PORT;
    $_SERVER["SERVER_PORT"] = RH_PORT;
}
else {
    $_SERVER["SERVER_PORT"] = RH_IS_HTTPS ? 443 : 80;
}

// set HTTPS
if (RH_IS_HTTPS) {
    $_SERVER["HTTPS"] = "on";
}

// overwrite REMOTE_ADDR
$_SERVER["REMOTE_ADDR"]  = $_SERVER["HTTP_X_REAL_IP"];

?>

続いて、"wp-load.php"の先頭部分を修正して上記ファイルを読み出させるようにします。
以下の赤字が追加した部分です。
define( 'ABSPATH', dirname(__FILE__) . '/' );

error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );

// for reverse proxy
require_once(ABSPATH . "rproxy-hack.php");


if ( file_exists( ABSPATH . 'wp-config.php') ) {

    /** The config file resides in ABSPATH */
    require_once( ABSPATH . 'wp-config.php' );

自分が関わっている環境だと、上記設定で問題が出たことはありません。


コメントする

名前
 
  絵文字
 
 
記事検索
  • ライブドアブログ