Bir konum bloğunu her zaman nginx'te tek bir dosya döndürecek şekilde nasıl yapılandırabilirim?


12

Benim uygulamada "/" konumu bir statik index.html dosyası döndürmek istiyorum, "/ statik" bir klasörden statik dosyaları sunmak istiyorum ve diğer tüm istekleri 404 BULUNAMADI dönmek istiyorum. Daha sonraki bir noktada, tüm diğer istekleri bir WSGI sunucusuna yönlendireceğim.

Bu şu anda benim yapılandırmam:

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

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

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

Statik klasör mükemmel çalışıyor, ancak "/" 404 BULUNAMADI döndürüyor. Ayrıca denedim:

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

Konum bloğunda, ancak bu 500 DAHİLİ SUNUCU HATASI döndürür. aliasTek dosyaları sevmiyor gibi görünüyor . Ayrıca denedim:

try_files static/index_debug.html;

Ancak bu, sunucunun "try_files yönergesinde geçersiz sayıda bağımsız değişken" hatasıyla başlamasını durdurur. Görünüşe göre try_filesaslında birden fazla dosyayı denemenizi gerektiriyor, bu da aradığım davranış değil.

Benim sorum şu: Nasıl bir statik blok her zaman statik bir dosya döndürecek şekilde yapılandırmak?


DÜZENLEME:alias Gerçekten tek bir dosyayı argüman olarak kabul etmesi gereken diğer cevaplardan gördüm , bu yüzden denedim:

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

Ama yine de sadece 500 DAHİLİ SUNUCU HATASI alıyorum. "/" İsteği için hata günlüğü şunları söylüyor:

[alert] 28112 # 0: * 7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" bir dizin değil

Neden "index_debug.htmlindex.html" dosyasını açmaya çalışıyor? indexDirektifi hiçbir yerde kullanmıyorum .


Can youtry_files static/index_debug.html static/index_debug.html;
ceejayoz

@ceejayoz: Öneriyi denemek için location =/404 BULUNAMADI, location /500 DAHİLİ SUNUCU HATASI alıyorum.
Hubro

Eğer yanılmıyorsam, Dizin yönergesini kaçırıyorsunuz ... Herhangi bir web sunucusu her zaman dizin dosyasını arayacak ve kök URI'sini (/) sağlayacak, ekleyerek bunu geçersiz kılabileceğinizi düşünüyorum:location / { return 404; }
Martino Dino

@MartinoDino: Neden ihtiyacım var? Ve nerede?
Hubro

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

Yanıtlar:


10

Sadece bunu test ettim ve benim için çalışıyor:

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

Dosya /tmp/root/static/index_debug.htmlelbette var :)

Herhangi bir URL'yi vurabilirim ve sadece statik sayfayı alıyorum.


0

Yeniden yazma ile try_files ve adlandırılmış bir konuma yönlendirmeyi kullanabilirsiniz. Bunun gibi:

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

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

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

/tmp/rootİçinde dosya varsa , aksi takdirde uri'ye yeniden yazılacak static/index_debug.htmlve sunulacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.