Модуль Nginx не обслуживает CSS-файлы - PullRequest
0 голосов
/ 29 октября 2019

У меня работает веб-приложение в kubernetes. Я хочу обслуживать статические файлы, в моем случае css, из модуля nginx. Из приложения я определяю местоположение файла CSS следующим образом:

 <link rel="stylesheet" href="assets/css/stylesheet.css" type="text/css">

При создании образа Docker я копирую файл CSS в www/media/ и в конфигурации nginx указываю на это:

FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY config/default.conf /etc/nginx/conf.d/default.template
COPY assets/ /www/media
EXPOSE 80

Вот конфигурация nginx:

server {
    listen 0.0.0.0:80;
    server_name localhost;
    location / {
        proxy_pass http://${FLASK_APP}:8080/;
    }

    location ~ /assets {
        root /www/media;
    }
}

Я подтвердил, что файл можно найти на модуле nginx под /www/media/css/stylesheet.css, однако я не могу получить к нему доступ ни из браузера, ни из самого приложения. Я получаю следующую ошибку: GET http://192.168.99.106:30604/assets/css/stylesheet.css net::ERR_ABORTED 404 (Not Found)

/assets должен указывать на www/media, где находится каталог с таблицей стилей, правильно? Что я недопонимаю?

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Не уверен, что это решение, но, надеюсь, кое-что попробовать.

  1. Измените файл докера на

COPY assets /www/media

В ваших комментариях вы сказали, что вы можете видеть файлы в / www / media. Но вы пытаетесь получить к ним доступ в / assets. Вы правильно настроили это в nginx? Возможно, попробуйте это
location /assets/ {
    alias /www/media/;
  }
Последнее, что я хотел бы упомянуть, - это разрешения. Каковы разрешения файлов в контейнере? ls -la скажет вам это. Они должны быть 755 Я считаю, что для Nignx.

Надеюсь, это поможет вам.

0 голосов
/ 31 октября 2019

Хорошо, я понял это. Вот моя конфигурация Nginx для обслуживания файлов:

server {
listen 0.0.0.0:80;
server_name localhost;

    location / {
      proxy_pass http://${FLASK_APP}:8080/; 
  }
    location ~ \.css {
      root /www/media;   
    }
}

Я также немного изменил свой докер:

FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY config/default.conf /etc/nginx/conf.d/default.template
COPY assets /www/media/assets
RUN chown -R nginx:nginx /www/
EXPOSE 80

С указанным выше конфигом css обслуживается без проблем.

...