обслуживание статических файлов из jwilder/nginx-proxy

У меня есть веб-приложение (django, обслуживаемое uwsgi), и я использую nginx для проксирования запросов к определенным контейнерам. Вот соответствующий фрагмент из моего default.conf.

upstream web.ubuntu.com {
server 172.18.0.9:8080;
}
server {
server_name web.ubuntu.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
include uwsgi_params;
uwsgi_pass uwsgi://web.ubuntu.com;
}
}

Теперь я хочу, чтобы статические файлы обслуживались nginx, а не рабочими uwsgi.

Итак, в основном я хочу добавить что-то вроде:

location /static/ {
autoindex on;
alias /staticfiles/;
}

в автоматически сгенерированный серверный блок для контейнера.

Я считаю, что это должно заставить nginx обслуживать все запросы к web.ubuntu.com/static/* из папки /staticfiles.

Но поскольку конфигурация (default.conf) генерируется автоматически, я не знаю, как динамически добавить указанное выше местоположение в блок сервера :(

Я думаю, что блок местоположения не может быть вне блока сервера, и на каждом сервере может быть только один блок сервера?

поэтому я не знаю, как добавить туда блок местоположения, если я не добавлю динамически в default.conf после того, как появится nginx, а затем перезагрузлю его, я думаю.

Я прошел через https://github.com/jwilder/nginx-proxy и вижу только пример фактического изменения настроек местоположения для каждого хоста и по умолчанию. Но ничего о добавлении новой локации вообще.

Я уже публиковал это в Q&A для jwilder/nginx-proxy и не получил ответа.

Пожалуйста, помогите мне, если есть способ достичь этого.


person user3732361    schedule 07.02.2019    source источник


Ответы (1)


Этот ответ основан на этом комментарии к проблеме № 553. обсуждение в официальном репозитории nginx-proxy. Во-первых, вам нужно создать файл default_location со статическим местоположением:

location /static/ {
    alias /var/www/html/static/;
}

и сохраните его, например, в папку nginx-proxy в корневом каталоге вашего проекта. Затем вы должны добавить этот файл в папку /etc/nginx/vhost.d контейнера jwilder/nginx-proxy. Вы можете собрать новый образ на основе jwilder/nginx-proxy с копированием этого файла или смонтировать его с помощью раздела volumes. Кроме того, вы должны обмениваться статическими файлами между контейнерами webapp и nginx-proxy, используя общий том. В результате ваш файл docker-compose.yml будет выглядеть примерно так:

version: "3"

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx-proxy/default_location:/etc/nginx/vhost.d/default_location
      - static:/var/www/html/static

  webapp:
    build: ./webapp
    expose:
      - 8080
    volumes:
      - static:/path/to/webapp/static
    environment:
      - VIRTUAL_HOST=webapp.docker.localhost
      - VIRTUAL_PORT=8080
      - VIRTUAL_PROTO=uwsgi

volumes:
  static:

Теперь блок server в /etc/nginx/conf.d/default.conf всегда будет включать статическое местоположение:

server {
    server_name webapp.docker.localhost;
    listen 80 ;
    access_log /var/log/nginx/access.log vhost;
    location / {
        include uwsgi_params;
        uwsgi_pass uwsgi://webapp.docker.localhost;
        include /etc/nginx/vhost.d/default_location;
    }
}

что заставит Nginx обслуживать статические файлы для вас.

person constt    schedule 09.05.2019