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

Nginx обслуживает статические файлы для приложения Flask 404

Я пробовал множество решений других сообщений, но, похоже, у меня ничего не работает, я всегда получаю 404 ошибка при попытке разрешить nginx обслуживать статические файлы моих flask применение. Где-то между всеми этими попытками запустить его, у меня также была 403, но я не могу его восстановить. Это моя текущая установка:

Приложение находится в: ~/development/Python/flask_nginx_gunicorn/, который должен быть тестовым проектом для запуска всего, понимания nginx и так далее. Он имеет следующую структуру:

Итак, есть не что иное, как файл с именем app.py, который настраивает несколько маршрутов и index.html в static папка.

Я настроил свой nginx следующим образом:

/etc/nginx/nginx.conf со следующим содержанием:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

В конце есть включение для sites-enabled подкаталог. В этом каталоге у меня есть файл с именем flask_project. В этом файле у меня есть следующая конфигурация моего проекта:

server {

    root /home/xiaolong/development/Python/flask_nginx_gunicorn/;

    server_name localhost;

    # LISTENING ON WHICH PORTS?
    listen localhost:7777;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /static/ {
        autoindex on;
        root /home/xiaolong/development/Python/flask_nginx_gunicorn/;
    }
}

Я начал nginx используя команду systemctl start nginx. Когда он работает, а я делаю ps -aux | grep nginx, Я получаю следующий результат:

root     17748  1.2  2.5 1607328 102772 pts/1  Sl   20:45   0:07 /usr/local/sublime_text_3/sublime_text /etc/nginx/nginx.conf
root     18762  0.0  0.0 122720  2880 ?        Ss   20:53   0:00 nginx: master process /usr/sbin/nginx
nginx    18763  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
nginx    18764  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
nginx    18765  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
nginx    18766  0.0  0.1 124808  7916 ?        S    20:53   0:00 nginx: worker process
root     18988  0.0  0.0 111032  1792 pts/0    S+   20:54   0:00 tail -f 10 /var/log/nginx/error.log
root     19001  0.0  0.0 115820  2396 pts/1    S+   20:55   0:00 grep --color=auto nginx

Итак, я знаю, что он работает. Раньше я получал ошибку в журнале, говоря мне nginx не удалось выполнить привязку к определенному порту, что было вызвано SELinux разрешить привязку только к определенным портам. Я исправил это с помощью команды semanage port --add --type http_port_t --proto tcp 7777.

После каждого изменения я всегда бегал systemctl restart nginx, чтобы перезапустить nginx сервер, чтобы он мог перезагрузить свою конфигурацию.

я использую gunicorn app:app -b localhost:8080 для запуска моего фляжного приложения.

Когда я открываю URL http://localhost:8080/static/ в браузере я получаю 404 и журнал, который я прочитал, используя tail -f 10 /var/log/nginx/error.log заявляет об отсутствии новых ошибок. Тем не менее, приложение flask работает, что я могу проверить, перейдя по ссылке: http://localhost:8080/ и http://localhost:8080/data, которые оба работают нормально. Однако, как только статический контент из статического каталога появляется, я получаю 404.

Мои предположения следующие:

  1. Как-то nginx с ним не разговаривают и он не знает о запросе содержимого статической папки.
  2. Как-то пути все еще не правильные.
  3. Есть еще одна проблема, которая мешает ему получить файл для браузера и не записывать его.

Я пытался запустить его в течение двух дней, но ни одна из найденных мной конфигураций не сработала. Я также пробовал следующие две команды, которые предлагались в других местах:

  1. Рекурсивно изменить контекст безопасности каталога:

    chcon -Rt httpd_sys_content_t /home/xiaolong/development/Python/flask_nginx_gunicorn/

  2. Разрешить демону http подключаться по сети (???)

    setsebool -P httpd_can_network_connect 1

Что не так с моей конфигурацией?

Дополнительная информация

В моем /etc/nginx/ каталог у меня следующая структура:

Я управляю Fedora 22 Вот.

На данный момент ему больше года, поэтому я уверен, что вы с этим справились, но на случай, если кто-то еще это увидит:

Nginx слушает localhost:7777, но ваш URL-адрес ведет на порт 8080, где находится ваш сервер Gunicorn. Вот почему вы можете получить доступ к своему приложению Flask (обслуживаемому gunicorn), но не к своему статическому контенту (обслуживаемому ngninx). Вот почему вы ничего не получаете в журналах nginx. Если вы пойдете в http://localhost:7777/, nginx должен передать ваш запрос в ваше приложение Flask, и http://localhost:7777/static/ должен перейти к статическому содержанию.