В моем приложении я хочу, чтобы местоположение «/» возвращало статический файл 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 НЕ НАЙДЕН. Я также пробовал:
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 ВНУТРЕННЯЯ ОШИБКА СЕРВЕРА. Журнал ошибок для запроса "/" говорит:
[alert] 28112#0: *7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" is not a directory
Почему он пытается открыть 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 и перенаправление в указанное место с помощью rewrite. Как это:
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
и он будет подан.