
私はドメインを持っており、場所のオプションexample.com
を使用して nodejs docker コンテナ 3000 ポートを指す nginx ウェブサーバーを使用して自分の Web サイトを提供しています。proxy pass
/
server {
listen 80 default_server;
server_name example.com www.example.com;
index index.php index.html;
access_log /var/log/nginx/access_example.com.log;
error_log /var/log/nginx/error_example.com.log;
location / {
proxy_pass http://localhost:3000;
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;
}
}
今、WordPress Web サイトを追加したいので/blog
、サーバー ブロックの下にこれらの構成を追加しました。
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location /blog {
root /var/www;
try_files $uri $uri/ =404;
}
ターミナルで/var/www/blog/
実行すると、新しくインストールされた wordpress にアクセスできないのはなぜですか。問題はありませんし、ファイルの内容は確認できますが、テスト用に追加したものは読み込まれません。curl http://example.com/blog/license.txt
license.txt
/var/www/blog/
index.php
index.html
問題はtry_files $uri $uri/ =404;
回線にあると思うのですが、役に立つ情報は見つかりませんでした。どんな助けでもいただければ幸いです
答え1
ご存知のとおり、Wordpress はフロント コントローラー アーキテクチャを使用します。つまり、PHP スクリプトを実行するためのエントリ ポイントは $WORDPRESS_ROOT/index.php です。それに応じてリクエストをルーティングするように nginx に指示する必要があります。
try_files $uri $uri/ /blog/index.php?$args;
ほとんどの静的コンテンツのリクエストは、最初の 2 つの値のいずれかによって処理されることに注意してください。Wordpress 自体がシナリオを処理する必要があるため、404 ハンドラーはありません。
しかしindex.phpは読み込まれていない
うーん、何が起こったのかあまり意味のある説明ではありません。つまり、明示的に ..../index.php を指定しましたか、それとも単に .../ を指定しましたか? どのような応答がありましたか? ログには何がありましたか?
PHP (およびほとんどの fcgi ハンドラ) には、通常、構成の別の場所に含まれた、かなり多くの構成が必要です。Ubuntu では、リポジトリからインストールした場合は、既にこれが配置されていると予想されますが、これをテストすることをお勧めします。また、上記のフロント コントローラの変更を行う前に、これに対処することをお勧めします。これは、問題を多少複雑にします。単純な「hello world」PHP スクリプトを使用します。