nginxで常に単一のファイルを返すようにロケーションブロックを構成するにはどうすればよいですか?


12

私のアプリケーションでは、場所 "/"で静的なindex.htmlファイルを返し、 "/ static"でフォルダーから静的ファイルを提供し、他のすべての要求で404 NOT FOUNDを返します。後で、他のすべての要求をWSGIサーバーにリダイレクトします。

これは現在私の設定です:

# Dev server.
server {
    listen 1337;
    charset UTF-8;

    location / {
        rewrite ^ static/index_debug.html break;
    }

    location /static {
        alias /home/tomas/projects/streamcore/static;
    }
}

静的フォルダは完全に機能していますが、「/」は404 NOT FOUNDを返します。私も試しました:

alias /home/tomas/projects/streamcore/static/index_debug.html;

ロケーションブロックでは、500の内部サーバーエラーが返されます。alias単一のファイルが好きではないようです。さらに私は試しました:

try_files static/index_debug.html;

ただし、これにより、「try_filesディレクティブの引数の数が無効です」というエラーでサーバーが起動しなくなります。どうやらtry_files実際には複数のファイルを試す必要があるようですが、これは私が探している動作ではありません。

だから私の質問は:どのようにして静的ブロックを常に返すようにロケーションブロックを構成するのですか?


編集:aliasは実際に単一のファイルを引数として受け入れるはずの他の回答から見たので、私は試しました:

location = / {
    alias /home/tomas/projects/streamcore/static/index_debug.html;
}

しかし、まだ500の内部サーバーエラーしか発生しません。「/」リクエストのエラーログには次のように記載されています。

[アラート] 28112#0:* 7「/home/tomas/projects/streamcore/static/index_debug.htmlindex.html」はディレクトリではありません

「index_debug.htmlindex.html」を開こうとするのはなぜですか?indexディレクティブをどこでも使用していません。


あなたはできますかtry_files static/index_debug.html static/index_debug.html;
ceejayoz

@ceejayoz:location =/404 NOT FOUNDが表示され、location /500内部サーバーエラーが表示されるので、提案を試してみます。
Hubro

:私は間違っていないよ場合は、インデックスディレクティブを逃している...任意のWebサーバは常にルートURIを(/)、私はあなたが追加することによって、これを上書きすることができると思う提供し、インデックスファイルを探しますlocation / { return 404; }
マルティーノディノ

@MartinoDino:なぜ必要なのですか?そして、どこ?
Hubro

location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
Martino Dino

回答:


10

ちょうどこれをテストし、それは私にとってはうまくいきます:

server {
    root /tmp/root;
    server {
        listen 8080;
        location /static {
            try_files $uri =404;
        }
        location / {
            rewrite ^ /static/index_debug.html break;
        }
    }
}

ファイル/tmp/root/static/index_debug.htmlはもちろん存在します:)

どのURLにもアクセスでき、静的なページが表示されます。


0

書き換えを使用して、try_filesと名前付きの場所へのリダイレクトを使用できます。このような:

server {
    root /tmp/root;
    server {
        listen 8080;

        location / {
            try_files $uri $uri/ @index;
        }

        location @index {
            rewrite ^ static/index_debug.html break;
        }
    }
}

ファイルが存在する場合は/tmp/rootそれが提供され、それ以外の場合はuriが書き換えられてstatic/index_debug.html提供されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.