web-dev-qa-db-ja.com

nginxエイリアス+ロケーションディレクティブ

server {
    listen      80;
    server_name  pwta; 
    root html;

    location /test/{
        alias html/test/;
        autoindex on;
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

この構成は機能します。ただし、location /test/が置き換えられた場合。 location /testpath/動作しません(入力ファイルが指定されていません)。エイリアスディレクティブの説明に基づいて、「場所」の部分が削除されたため、/testpath/info.phphtml/test/info.phpになると想定しました。

提案をありがとう。

10
Allfo

nginxエイリアス

    server {
    listen      80;
    server_name  pwta;
    index index.html index.php;
    root html;

    location /testpath/ {
        alias html/test/;
    }
    location ~  ^/testpath/(.+\.php)$ { ### This location block was the solution
        alias html/test/;     
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$1;
        include fastcgi_params;
    }
     location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
11
Allfo

aliasディレクティブとrootディレクティブはどちらも、絶対パスで使用するのが最適です。相対パスを使用できますが、それらはnginxのコンパイルに使用されるprefix configオプションに相対的であり、通常は必要なものではありません。

これは、nginx -Vを実行し、--prefix=に続く値を見つけることで確認できます。

ログを見てこれを自分で証明すると、「そのようなファイルはありません」というエラーが見つかります。

9
Bringing Fire