Я пробовал множество решений других сообщений, но, похоже, у меня ничего не работает, я всегда получаю 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
.
Мои предположения следующие:
nginx
с ним не разговаривают и он не знает о запросе содержимого статической папки.Я пытался запустить его в течение двух дней, но ни одна из найденных мной конфигураций не сработала. Я также пробовал следующие две команды, которые предлагались в других местах:
Рекурсивно изменить контекст безопасности каталога:
chcon -Rt httpd_sys_content_t /home/xiaolong/development/Python/flask_nginx_gunicorn/
Разрешить демону http подключаться по сети (???)
setsebool -P httpd_can_network_connect 1
Что не так с моей конфигурацией?
Дополнительная информация
В моем /etc/nginx/
каталог у меня следующая структура:
nginx.conf
файлsites-available
содержащий только конфигурацию для моего фляжного приложенияsites-enabled
содержащий ссылку на мой файл конфигурации для приложения фляги в sites-available
Я управляю Fedora 22
Вот.
На данный момент ему больше года, поэтому я уверен, что вы с этим справились, но на случай, если кто-то еще это увидит:
Nginx слушает localhost:7777
, но ваш URL-адрес ведет на порт 8080, где находится ваш сервер Gunicorn. Вот почему вы можете получить доступ к своему приложению Flask (обслуживаемому gunicorn), но не к своему статическому контенту (обслуживаемому ngninx). Вот почему вы ничего не получаете в журналах nginx. Если вы пойдете в http://localhost:7777/
, nginx должен передать ваш запрос в ваше приложение Flask, и http://localhost:7777/static/
должен перейти к статическому содержанию.