私のアプリケーションでは、場所 "/"で静的な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
ディレクティブを使用していません。
ちょうどこれをテストし、それは私にとってはうまくいきます:
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にもアクセスでき、静的なページが表示されます。
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
に書き換えられて提供されます。