WordPressの投稿画面でページングがおかしいので、「ひょっとしてバグ?」と思ったら、実はnginxの設定をミスっていただけでした(汗。
ウチのサイトの構成は、
- フロント(リバースプロキシ): nginx
- バックエンド(アプリサーバ): apache
になっていますが、nginxとapacheは使用しているIPアドレスが異なるため、ドメインもわざと別々にしています。
そしてWordPressの設定では
- WordPressのアドレス: http://AAA.com/wordpress
- サイトのアドレス: http://AAA.com
みたく両方ともnginxのドメインにしているのですが、投稿画面のページングのURLだけ http://BBB.com/wordpres/~ というapache側のドメインになってしまいます。
ソースを解析したところ、本来は管理画面のURLを設定画面で指定した値にすべきところ、wp-admin/includes/class-wp-list-table.phpではWebサーバ自身の名前を環境変数から取得しているのが原因というところまでは分かりました。
しかし同じような環境で使っている人は他にもいるだろうし、今まで問題にならなかったのには訳があるはずだと調査を進めたところ、凡ミスをしている事が判明。
nginxでリバースプロキシを組むには httpセクションの中で
http {
・・・・・
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
・・・・・}
のように、Proxy用のHTTPヘッダーを追加してあげないと駄目みたいです。
うーん、これは勉強になりましました。