Назад | Перейти на главную страницу

nginx - работать только с сервером или 404, статических файлов в корне нет

Я пытаюсь обслуживать все запросы с помощью бэкэнда (в данном случае 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-адреса.