Что не так с маршрутизацией моих файлов HTML / CSS для разных мест на Nginx?

Я реализовал приложение 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;
} }
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы неправильно понимаете, как приложение 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 ###
    }

}

Другие вопросы по теме