質問編集履歴

1 誤字の修正

nononono

nononono score 22

2017/03/31 02:52  投稿

Reverse Proxy環境下でWordpressの管理画面が正常に動作しない。
Reverse Proxy環境下でWordpressの管理画面が正常に動作しない
前提
---
ECサイトとブログサイトを同一ドメインで別サーバで運用予定です。
ECサイトとブログサイトを同一ドメイン別サーバで運用予定です。
全てのリクエストをECサイト側で受取り、URIに/blogが含まれていた場合にのみブログサイトのIPアドレスにリクエストが転送されるようにNginxのReverse Proxyの設定を行っています。
例:
http://example.comを入力 => ECサイト
http://example.com/blog => ECサイトから転送 => ブログサイト
困っていること
---
この状態でWordpressのサイト自体は問題なく表示されるのですが、管理画面が正常に動作しません。
ドメイン指定(リバースプロキシ経由)、ブログサイトのIPアドレス直指定のいずれの方法でも問題ないので解決策を探しています。
試したこと
---
1. ドメイン指定(リバースプロキシ経由)してアクセスした場合 (http://example.com/blog/wp-admin)
強制的にwp-adminへとリダイレクトが行われる。
そのため、NginxのLocation設定で/blogだけでなく/wp-admin、/wp-loginの場合でもブログサイトのIPに転送する設定にした場合、管理画面のログイン画面へとアクセスすることは出来たものの、正しいメールアドレス、パスワードを入力してもログインできない。
2. ブログサイトのIPアドレス直指定してアクセスした場合 (http://xxx.xxx.xxx.xxx/wp-admin)
管理画面の表示、管理画面へのログインは問題ないが、テーマのプレビューを行おうとした場合に"Non-existent changeset UUID."というメッセージが表示され、正常にプレビューを行えない。
Wordpressの設定
---
管理画面 > 設定 > 一般設定
```ここに言語を入力
WordPress アドレス (URL): http://xxx.xxx.xxx.xxx // サーバのIP直指定
サイトアドレス (URL): http://example.com/blog
```
ECサイト側のNginxの設定
---
nginx version: nginx/1.11.8
```ここに言語を入力
server {
   listen 80;
   server_name example.com;
   location ~ ^/(blog|wp-admin|wp-login) {
       # REVERSE PROXY
       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_pass http://xxx.xxx.xxx.xxx; // IP直指定
   }
   location / {
       rewrite ^(.*)$ https://example.com$request_uri permanent;
   }
}
```
ブログサイト側のWebサーバの設定(Apache)
---
ConoHaのkusanagi
Apache/2.4.25 (Unix)
```ここに言語を入力
<VirtualHost xxx.xxx.xxx.xxx:80>
  ServerAdmin webmaster@example.com
  DocumentRoot /home/kusanagi/my_blog/DocumentRoot
  # ServerName myblog
  ErrorLog /home/kusanagi/myblog/log/httpd/error.log
  CustomLog /home/kusanagi/myblog/log/httpd/access.log kusanagi env=!no_log
  <Directory "/home/kusanagi/myblog/DocumentRoot">
      Header append Access-Control-Allow-Origin *
      Header append Access-Control-Allow-Methods "GET,HEAD,PUT,PATCH,POST,DELETE"
      Require all granted
      AllowOverride All
      Options FollowSymlinks
  </Directory>
  <ifModule mod_rewrite.c>
      RewriteEngine Off
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
  </ifModule>
</VirtualHost>
```
  • PHP

    27961 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Apache

    2382 questions

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

  • nginx

    1238 questions

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

  • WordPress

    10670 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る