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

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

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

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

WordPress

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

Q&A

解決済

1回答

8254閲覧

nginxでパス指定によるリバースプロキシについて

rera

総合スコア109

nginx

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

WordPress

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

0グッド

0クリップ

投稿2016/12/05 12:32

NginxとWordpressのリバースプロキシについて教えてください。

構成がやや複雑で下記のような構成になっています。
構成図

http://hoge.com/static/docker
http://hoge.com/static/docker1
http://hoge.com/static/docker2

全てのサイトでWordpressの閲覧、記事の参照やコメントの確認など一通り動作が正常に確認できました。

TOPページにあるログインのリンク先を確認するとhttp://hoge.com/static/docker/wp-login.phpとなっていますが
ログインしようと/static/dockerのパスが消え、http://hoge.com/wp-login.phpにリダイレクトされてしまいます。

これではログインが出来ないので非常に困ってしまいます。
何かご存知の方がいましたらご教授くださると助かります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

実機で確認していないので設定そのものではないですが、回答します。


リダイレクトの応答もリバースプロキシで書き換える必要があります。初期状態ではproxy_redirect default;が設定されているのと同じですから、proxy_passで設定したパラメータを使ってリダイレクト応答を書き換えてくれます。

ただし、図で後段のリバースプロキシを見ると、locationのURIとWordPressのURIパスとが一致していないです。これだとページ中のリンクなどが正しくならないのではないでしょうか。そこで、次のようにすればいいように思います。

location /static/docker1 { proxy_pass http://docker1/static/docker1; proxy_redirect default; # 初期設定 }

しかしこれでは、後段リバプロのアップストリームURLのホスト (docker1) とWordPressのURLのホスト (hoge.com) が一致しないためproxy_redirect default;が効かないでしょう。次のいずれかが必要になります。

  • WordPressで設定するURLのホストを、上記の後段リバプロの設定に合わせてdocker1等に変える。
    この場合、WordPressの返すページの中のリンク (リダイレクトではない) などにアプリの絶対URLがある場合、ホスト部がdocker1になってします。
  • WordPressで設定するURLのホスト部をhoge.comとする。リバプロのアップストリームURLのホスト部は、アプリサーバを区別できるもの (IPアドレスなど) にする。
    この場合、ホストのリダイレクトURLを明示的に書き換えるためのproxy_redirectディレクティブの追加が必要かもしれません。

なお、前段リバプロについても、リダイレクトURLについて同様の配慮が必要でしょう。また、設定と動作確認はアプリサーバ→後段リバプロ→前段リバプロの順にやったほうがいいと思います。

投稿2016/12/06 03:09

編集2016/12/06 03:38
ikedas

総合スコア4317

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

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

rera

2016/12/07 06:08

詳しく解答してくださり、ありがとうございます。 後段リバプロとWordpress側のホストネームがあってない点は盲点でした。 しかしproxy_redirectでURLを書き換えてみたりしましたがダメでした。 結果的にはPHPのグローバル変数に直接設定したところうまくいきました。 教えていただいた方法では私の技量で解決はできませんでしたがproxy_redirectの動作について 改めて考えました。 ``` $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; $_SERVER['REQUEST_URI'] = '/gallery/docker' . $_SERVER['REQUEST_URI']; $_SERVER['SCRIPT_NAME'] = '/gallery/docker' . $_SERVER['SCRIPT_NAME']; $_SERVER['PHP_SELF'] = '/gallery/docker' . $_SERVER['PHP_SELF']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; ```
ikedas

2016/12/07 07:32

うまくいってよかったですね。 その設定で特に問題ないようなら、ご自分で回答を作って「これで解決した」(自己解決) にしておいて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問