Я пытаюсь обслуживать все запросы с помощью бэкэнда (в данном случае uwsgi для фляги), и если бэкэнд не имеет такого пути, nginx должен вернуть 404.
Каким-то образом я могу заставить бэкэнд взять на себя управление только тогда, когда я использую
try_files $uri @uwsgi;
Но так вы получите доступ ко всем файлам в корневом каталоге. Я не хочу обслуживать все файлы в корневом каталоге.
Я тоже пробовал это:
try_files @uwsgi =404;
Но тогда я получаю 404, даже если путь определен в моем приложении фляги.
Дополнительный контекст: Ubuntu 14.04, nginx 1.4.6
location @uwsgi {
include uwsgi_params;
uwsgi_pass unix:$document_root/myapp.sock;
}
location / {
try_files $uri @uwsgi;
}
location /static/ {
try_files $uri =404;
}
Приложение фляги выглядит так:
@app.route('/test')
def hello_world():
return 'Hello World!'
Поэтому, когда я захожу на example.com/test, я хочу, чтобы бэкэнд flask обрабатывал это. Но я не хочу, чтобы nginx обслуживал все файлы в корневом каталоге.
Зачем использовать try_files
если у вас никогда нет файлов, которые вы хотите попробовать, и вы всегда хотите передать их своему обработчику WSGI? Вы пробовали просто сделать uwsgi_pass корневым каталогом?
location / {
include uwsgi_params;
uwsgi_pass unix:$document_root/myapp.sock;
}
Вы можете комбинировать его со статическим местоположением / статическим именем сервера, который обслуживает файлы из обычной папки, но только для этого статического URL-адреса.