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

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

ただいまの
回答率

90.32%

nginxのリバースプロキシ設定でサブディレクトリでapacheで稼働するwordpressへ向けたが、PHPファイルパスが正しく認識されない(404に)

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,955

takeyoshi

score 25

nginxで稼働中サイトのサブディレクトリをapache環境で動くwordpressにリバースプロキシ設定しました。
パーマリンクで設定された各ページは正しく表示されるようになったのですが、
例えばログイン画面など、PHPファイルを直接パス指定した場合に「file not found(404)」になってしまいます。
※ 不思議なことに、htmlファイルを指定すると問題無く表示されます。

前提 以下をリバースプロキシで別サーバで動くwordpressへ
https://example.com/blog/

https://example.com/blog/wp-login.phpへアクセス
→ 「file not found(404)」になってしまいます。

https://example.com/blog/へアクセス
→ リバースプロキシで設定どおりhttps://example.com/blog/index.php が表示されます。(wordpressトップ)

https://example.com/blog/index.phpへアクセス
→ 上記と実質同じパスなのに、「file not found(404)」になってしまいます。

https://example.com/blog/license.txtへアクセス
→ なぜかhttps://example.com/blog/index.php が表示されます。(wordpressトップ)

設定状況は以下のような形です。
nginx (リバースプロキシ元)

server {
    listen       80;
    server_name  example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 default ssl;
    ssl on;
    ssl_certificate /etc/nginx/ssl.crt/server.crt;
    ssl_certificate_key /etc/nginx/ssl.key/server.key;

    ~ 中略 ~

    location /blog/ {
        proxy_pass    https://wordpress稼働サーバIP/blog/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

apache(リバースプロキシ先)は特段変わった設定をしていません。

**httpd.conf**
<Directory "/var/www/html">
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Require all granted
</Directory> 

blogディレクトリ内でwordpress用のパーマリンク設定をhtaccessで行っています。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

なお、リバースプロキシ先(apacehのwordpress)のIPアドレスを直接指定するとアクセスは出来ます。
https://wordpress稼働サーバIP/blog/wp-login.phpへアクセス
→ アクセスは出来る。しかしログインには失敗

そこでwp-config.phpの先頭に以下のように定義すると、ログインから一連の動作は問題無く動くようになりました。

<?php
define( 'WP_SITEURL', 'http://wordpress稼働サーバIP/blog' );                                                      
define( 'WP_HOME', 'http://wordpress稼働サーバIP/blog' );  

しかし、この設定をすると当然、wordpress内のリンクすべてが「http://wordpress稼働サーバIP」の生IPURLになってしまうのです。
※ またSSL証明書の警告も、、

出来ることをどんどん試してみた結果、ちょっと逆に散らかってしまってますが
どなたかご存知なことがあればご教示ください。
よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

自己解決しました。
というより知人のエンジニアさまよりアドバイスをいただき解決しました。

原因はnginxのリバースプロキシ設定にありました。
/etc/nginx/conf.d/ooo.conf

    # PHPファイルに関する設定
    location ~ \.php$ {
      root           /var/www/html;
      fastcgi_pass unix:oooo.sock;
      fastcgi_index  index.php; 
      ~ などPHPに関する設定
    }

    location /blog/ {
      proxy_pass    https://wordpress稼働サーバIP/blog/;
    }

こんな記述だったため二つの問題がありました。

  1. PHPファイルに関する設定が先に反映されてしまっていた
  2. リバースプロキシの設定記述部以降の設定も、正規表現がマッチすれば適用される書き方になってしまっていた

以下のように修正して解決しました。

    # /blogディレクトリ以下全てに適用。「^~」で移行のマッチは無視するように
    location ^~ /blog/ {
      proxy_pass    https://wordpress稼働サーバIP/blog/;
    }

    # PHPファイルに関する設定
    location ~ \.php$ {
      root           /var/www/html;
      fastcgi_pass unix:oooo.sock;
      fastcgi_index  index.php; 
      ~ などPHPに関する設定
    }

教えて頂いた知人のエンジニア様には感謝感謝です。
こちらにも感謝の気持ちも込めてシェアいたします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • nginxのリバースプロキシ設定でサブディレクトリでapacheで稼働するwordpressへ向けたが、PHPファイルパスが正しく認識されない(404に)