Я реализовал приложение Flask в Gunicorn, и в настоящее время оно работает на Nginx. Структура приложения следующая: несколько HTML-страниц в папке templates (index.html, chat.html, token.html), папка с файлами CSS в static.
Я хочу быть уверенным, что когда пользователи обращаются к host:port, они видят index.html, но когда они обращаются к host:port/token, они видят token.html.
Я почти уверен, что проблема в моей конфигурации Nginx. Я мог бы сделать так, чтобы index.html появлялся при посещении веб-сайта. Также используются файлы CSS, поскольку html-страница не выглядит простой (поэтому здесь нет проблем с доступом к файлам CSS).
Однако как только я получаю доступ к host:port/token, страница становится пустым HTML-кодом, который находится в token.html. По какой-то причине информация в файлах CSS в этом случае не применяется к HTML.
Как заставить Nginx находить мои файлы CSS? Стоит ли как-то указывать расположение папки со статическими файлами? Но в обычном месте (host:port) работает нормально, в другом просто не работает. Моя конфигурация Nginx ниже:
server {
listen 7000 ssl http2 default_server;
listen [::]:7000 ssl http2 default_server;
server_name host www.host;
access_log /home/user/project/server/nginx_logs/nginx-access.log;
error_log /home/user/project/nginx_logs/nginx-error.log;
include snippets/certs.conf;
include snippets/ssl-params.conf;
location / {
include proxy_params;
proxy_pass http://unix:/home/user/project/server/chat.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
try_files $uri $uri/ =404;
}
location /token {
index token.html;
alias /home/user/project/server/app/templates;
} }






Вы неправильно понимаете, как приложение flask запускается на сервере wsgi, и не полностью понимаете эффект перенаправления try_files. Для фляжного приложения index.html в template/ создается на основе настроенного вами маршрута фляги, и это шаблон, а не статический html-файл как таковой. Итак, если вы правильно настроили сервер wsgi для запуска приложения flask, то для запуска приложения flask потребуется следующая конфигурация nginx:
server {
listen 7000 ssl http2 default_server;
listen [::]:7000 ssl http2 default_server;
server_name host www.host;
root /home/user/project/app;
access_log /home/user/project/server/nginx_logs/nginx-access.log;
error_log /home/user/project/nginx_logs/nginx-error.log;
include snippets/certs.conf;
include snippets/ssl-params.conf;
location / {
include proxy_params;
proxy_pass http://unix:/home/user/project/server/chat.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Эта конфигурация в основном передает все запросы, которые попадают в корень, на внутренний сокет wsgi (который запускает ваше приложение flask). Он работает, но не идеален. Во-первых, если вы проверите журнал доступа, вы заметите, что nginx регистрирует каждый запрос GET, включая запросы GET для статического содержимого, расположенного в каталоге static/. во-вторых, вы, вероятно, захотите, чтобы nginx обрабатывал это статическое содержимое напрямую, не передавая его в бэкэнд. Поэтому вы часто видите, что конфигурация nginx для приложения flask имеет по крайней мере одну дополнительную директиву местоположения для обработки статического содержимого:
server {
### all the directives as previous example ###
location /static/ {
alias /home/user/project/app/static/;
}
location / {
### as per previous example ###
}
}