обслуживание статических файлов из jwilder / nginx-proxy - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть веб-приложение (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, и я вижу только пример, чтобы фактически изменить настройки местоположения для каждого хоста и по умолчанию. Но ничего о добавлении нового loкатион в целом.

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

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

1 Ответ

0 голосов
/ 09 мая 2019

Этот ответ основан на этом комментарии из обсуждения проблемы # 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 обслуживать статические файлы для вас.

...