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

nginx + uwsgi - что обслуживает статические файлы?

Я использую nginx в качестве прокси для пары флеш-приложений с uwsgi в качестве промежуточного программного обеспечения. Вот моя конфигурация nginx для тестового приложения.


server {
    listen      80;
    server_name test.myapp.com www.test.myapp.com;
    charset     utf-8;
    client_max_body_size 250M;
    location / { try_files $uri @testapp; }

location @testapp {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/testapp_uwsgi.sock;
}

location /forecaster/components/ {
    alias /opt/test/client/app/components/;
}

}

Я почти уверен, что nginx на самом деле не обслуживает статические файлы, даже если я закомментирую location блок, файлы обслуживаются от чего-то. Я вижу 200 в журнале nginx, а также 200 в журналах uWsgi. Как узнать, какой из них обслуживает статические файлы? Я полагаю, что приложение для фляги тоже могло их обслуживать?

/ opt / test / client / app / components / определенно существует и доступен для чтения другим пользователям. Есть ли способ заставить uwsgi НЕ обрабатывать эти запросы?

Вам нужен location. Но не поэтому nginx не обслуживает ваши статические файлы.

Проблема в том, что вы забыли указать root директива в вашем server блок. Таким образом, nginx использует свое скомпилированное значение по умолчанию, которое зависит от системы и почти наверняка не там, где находится ваше веб-приложение. Таким образом, все запросы, в том числе для статических файлов, идут вверх по потоку в uWSGI.

Чтобы решить проблему, установите root директива, указывающая на статические ресурсы вашего приложения.

server {
    root /srv/www/testapp;

Или, если у вас есть только статические файлы в подкаталогах, вы можете указать их с помощью location и alias как показано в документации uWSGI.

location /static {
    alias /srv/www/testapp/static;
}