W mojej aplikacji chcę, aby lokalizacja „/” zwróciła statyczny plik index.html, chcę, aby „/ static” obsługiwał pliki statyczne z folderu i chcę, aby wszystkie inne żądania zwróciły 404 NIE ZNALEZIONO. W późniejszym czasie zamierzam przekierować wszystkie pozostałe żądania do serwera WSGI.
To jest obecnie moja konfiguracja:
# Dev server.
server {
listen 1337;
charset UTF-8;
location / {
rewrite ^ static/index_debug.html break;
}
location /static {
alias /home/tomas/projects/streamcore/static;
}
}
Folder statyczny działa idealnie, ale „/” zwraca 404 NIE ZNALEZIONO. Próbowałem też:
alias /home/tomas/projects/streamcore/static/index_debug.html;
W bloku lokalizacji, ale zwraca 500 BŁĄD SERWERA WEWNĘTRZNEGO. Wygląda na to, alias
że nie lubi pojedynczych plików. Dodatkowo próbowałem:
try_files static/index_debug.html;
Ale to powstrzymuje serwer od rozpoczęcia błędu „nieprawidłowa liczba argumentów w dyrektywie try_files”. Najwyraźniej try_files
faktycznie wymaga wypróbowania więcej niż jednego pliku, czego nie szukam.
Więc moje pytanie brzmi: w jaki sposób skonfigurować blok lokalizacji, aby zawsze zwracał plik statyczny?
EDYCJA: Widziałem z innych odpowiedzi, które alias
rzeczywiście powinny zaakceptować pojedynczy plik jako argument, więc spróbowałem:
location = / {
alias /home/tomas/projects/streamcore/static/index_debug.html;
}
Ale nadal dostaję tylko 500 BŁĘDÓW SERWERA WEWNĘTRZNEGO. Dziennik błędów dla żądania „/” mówi:
[alert] 28112 # 0: * 7 „/home/tomas/projects/streamcore/static/index_debug.htmlindex.html” nie jest katalogiem
Dlaczego próbuje otworzyć plik „index_debug.htmlindex.html”? Nigdzie nie używam tej index
dyrektywy.
źródło
try_files static/index_debug.html static/index_debug.html;
location =/
, otrzymuję 404 NIE ZNALEZIONO,location /
otrzymuję 500 BŁĄD SERWERA WEWNĘTRZNEGO.location / { return 404; }
location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
Odpowiedzi:
Właśnie to przetestowałem i działa dla mnie:
Plik
/tmp/root/static/index_debug.html
istnieje oczywiście :)Mogę trafić dowolny adres URL i po prostu dostaję stronę statyczną.
źródło
Możesz użyć try_files i przekierować do nazwanej lokalizacji z przepisem. Lubię to:
Jeśli plik istnieje w
/tmp/root
nim, zostanie podany, w przeciwnym razie zapisany zostanie plik URIstatic/index_debug.html
i zostanie on podany.źródło