web-dev-qa-db-ja.com

静的ファイル+リバースプロキシを提供する場合はnginx 403

Nginxを介してノードアプリを提供しようとしていますが、/publicフォルダにある可能性のある静的ファイルを提供しようとしています。私はそれだけの作業をしました-domain.tld/または静的フォルダーのインデックスにアクセスすると、403が表示されます。 directory index of "/var/www/domain.tld/" is forbidden。すべての権限が修正されているように見えるので、混乱しています。

これは私のサーバーブロックです。

server {
    server_name domain.tld;

    location / {
        root /var/www/domain.tld/public;
        try_files $uri $uri/ @proxy;
        access_log off;
    }

    location @proxy {
        proxy_pass http://127.0.0.1:3000;
    }
 }

任意のランダムなページ(想定されるサブディレクトリを含む)にアクセスすると、ノードアプリに適切にプロキシされます。ただし、既存の静的ディレクトリのルート/およびルートの場合、403。

何か案は?

3
Mike Shito

これは、ディレクトリが存在するため、try_filesチェックが原因です。

try_files $uri $uri/ @proxy;

成功します。ただし、ディレクトリインデックスファイルはなく(通常index.htmlindex を参照)、autoindexもオンになりません( autoindex を参照)。

起こりたいことに応じて、次のオプションを検討してください。

  • そのままにします(使用するインデックスファイルを調整することもできます)。
  • 常にディレクトリをバックエンドに渡します。これを行うには、$uri/からtry_filesを削除します。

    location /
        root /var/www/domain.tld/public;
        try_files $uri @proxy;
    }
    
  • try_filesを介して特定のインデックスファイルを確認します(見つからない場合、リクエストはバックエンドに送られます)。

    location /
        root /var/www/domain.tld/public;
        try_files $uri $uri/index.html @proxy;
    }
    
  • autoindexを有効にします。

    location /
        root /var/www/domain.tld/public;
        try_files $uri $uri/ @proxy;
        autoindex on;
    }
    
7
Maxim Dounin