エイリアスディレクトリから PHP にアクセスすると nginx が 404 を返す

エイリアスディレクトリから PHP にアクセスすると nginx が 404 を返す

Apache から nginx に移行しようとしています。私がホストしている PHP サイトは、エイリアス ディレクトリである共有ライブラリにアクセスする必要があります。以下は私が考えた構成です。HTML ファイルは問題なく動作しますが、PHP ファイルは 404 を返します。同様の質問に対する回答のほとんど (すべてではないにしても) を読み、試してみましたが、成功しませんでした。私のケースで問題の原因となる可能性のあるものについて何かヒントはありますか?

location /wtlib/ {
    alias /var/www/shared/wtlib_4/;
    index index.php;
}

location ~ /wtlib/.*\.php$ {
    alias /var/www/shared/wtlib_4/;
    try_files $uri =404;
    if ($fastcgi_script_name ~ /wtlib(/.*\.php)$) {
        set $valid_fastcgi_script_name $1;
    }
    fastcgi_pass 127.0.0.1:9013;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/shared/wtlib_4$valid_fastcgi_script_name;
    fastcgi_param REDIRECT_STATUS 200;
    include /etc/nginx/fastcgi_params;
}

皆さんありがとう !

更新: 以下は正常に動作しているようです:

location /wtlib/ {
    alias /usr/share/php/wtlib_4/;
    location ~* .*\.php$ {
      try_files $uri @php_wtlib;
    }

    location ~* \.(html|htm|js|css|png|jpg|jpeg|gif|ico|pdf|zip|rar|air)$ {
      expires 7d;
      access_log off;
    }
}

location @php_wtlib {
    if ($fastcgi_script_name ~ /wtlib(/.*\.php)$) {
        set $valid_fastcgi_script_name $1;
    }
    fastcgi_pass $byr_pass;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/share/php/wtlib_4$valid_fastcgi_script_name;
    fastcgi_param REDIRECT_STATUS 200;
    include /etc/nginx/fastcgi_params;
}

答え1

あなたの行try_files $uri =404;が原因ですが、設定を改善することもできます:

server {
  # other code ...
  index index.php;
  location /wtlib/ {
    alias /var/www/shared/wtlib_4/;
    location ~* .*\php$ {
      try_files $uri @php;
    }
  }
  location @php {
    fastcgi_pass 127.0.0.1:9013;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param REDIRECT_STATUS 200;
    include /etc/nginx/fastcgi_params;
  }
}

関連情報