Sign inSign up

bugoman/django-nginx

By bugoman

•Updated 14 days ago

Image
0

2.1K

bugoman/django-nginx repository overview

⁠django-nginx

Обратный прокси-сервер для Django с преднастроенным кэшированием.

⁠Usage

⁠Использование конфигурации по умолчанию.

Конфигурация по умолчанию⁠ предполагает, что данный образ будет использоваться в качестве обратного прокси-сервера для одного единственного сайта.

Пример: проксирование сайта httpbin.org и использование локальной папки public/ для переопределения некоторых страниц.

docker run --rm -it \
  -e SERVER_NAME=localhost \
  -e UPSTREAM_SERVER=httpbin.org \
  -e PROXY_HOST_HEADER=httpbin.org \
  -p 8080:80 \
  bugoman/django-nginx

$SERVER_NAME - это имя сервера⁠. $UPSTREAM_SERVER - это адрес сервера бэкенда⁠. $PROXY_HOST_HEADER - это значение HTTP-заголовка Host, передаваемое на бэкенд. В этой переменной можно указать переменную nginx. Значение по умолчанию - $http_host.

Выполнив приведённую выше команду, вы запустите обратный прокси-сервер для httpbin.org, в чём можно убедиться, перейдя по адресу http://localhost:8080/headers⁠.

Конфигурация по умолчанию поддерживает кэширование HTML-ответов от бэкенда при условии наличия соответствующих заголовков. Пример⁠.

⁠Использование собственной конфигурации

Использовать собственную конфигурацию рекомендуется во всех случаях, которые не охватываются конфигурацией по умолчанию. Например, когда вы хотите, чтобы контейнер обрабатывал запросы одновременно на несколько сайтов.

В этом случае вам необходимо смонтировать том с файлами конфигураций на директорию /etc/nginx/conf.d/ и не использовать перечисленные выше переменные окружения ($UPSTREAM_SERVER, $SERVER_NAME и $PROXY_HOST_HEADER):

docker run --rm -it \
  -p 8080:80 \
  -v $(pwd)/conf.d:/etc/nginx/conf.d/ \
  bugoman/django-nginx
⁠Потенциальные точки монтирования
  • /etc/nginx/conf.d/
    Каталог с файлами конфигурации сайтов. По умолчанию содержит конфигурацию example.conf (см. ниже) и default.conf.

  • /etc/nginx/ssl/
    Каталог для SSL-сертификатов. Используемые по умолчанию имена файлов для ключей: nginx.crt, nginx.key и dhparam.pem.

  • /etc/nginx/hooks/reload
    Файл, при изменении которого выполняется команда nginx -s reload. Полезен для ситуаций, когда необходимо обновить конфигурацию nginx из другого контейнера.

  • /usr/share/nginx/static
    Каталог статики для Django (STATIC_ROOT).

  • /usr/share/nginx/media
    Каталог загружаемого контента для Django (MEDIA_ROOT).

  • /usr/share/nginx/public
    Каталог с HTML-файлами, которые должны отдаваться "как есть". Отдача этих файлов имеет больший приоритет, чем отправка запроса на бэкенд.

  • /usr/share/nginx/protected
    Защищенная папка для контролируемого скачивания⁠ или других целей.

⁠Конфигурация по умолчанию

# /etc/nginx/conf.d/example.conf

upstream backend {
  keepalive     2;
  server        ${UPSTREAM_SERVER};
}

server {
  listen        80;
  listen        [::]:80;
  listen        443 ssl http2;
  listen        [::]:443 ssl http2;
  server_name   ${SERVER_NAME};
  set           $base /usr/share/nginx;

  # SSL
  ssl_certificate         /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key     /etc/nginx/ssl/nginx.key;
  # ssl_trusted_certificate /etc/nginx/ssl/chain.pem;

  # Logging
  access_log    /var/log/nginx/${SERVER_NAME}.access.log main buffer=4k flush=10s;
  error_log     /var/log/nginx/${SERVER_NAME}.error.log;

  # Security
  include       /etc/nginx/snippets/security.conf;

  # Deny access to dot files
  location ~ /\.(?!well-known\/).* {
    deny all;
    access_log off;
    log_not_found off;
  }

  # Speed up home page processing
  location = / {
    try_files /dev/null @backend;
  }

  # Prefer public files before backend
  location / {
    root $base/public;
    try_files $uri $uri/index.html $uri.html @backend;
  }

  location = /favicon.ico {
    log_not_found off;
    root $base/static;
    try_files $uri /favicon/$uri =404;
  }

  location /static/ {
    root $base;
    access_log off;
    if_modified_since before;
    include /etc/nginx/snippets/security.conf;
    add_header Cache-Control "max-age=31536000, immutable";
  }

  location /media/ {
    root $base;
    access_log off;
    if_modified_since before;
    include /etc/nginx/snippets/security.conf;
    add_header Cache-Control "max-age=31536000, immutable";
  }

  location /protected/ {
    root $base;
    internal;
  }

  location @backend {
    include /etc/nginx/snippets/backend.conf;

    ssi on;
    proxy_pass http://backend;
    proxy_cache backend;
    proxy_set_header Host ${PROXY_HOST_HEADER};

    # Security
    include /etc/nginx/snippets/security.conf;

    # Cache information
    add_header X-Proxy-Cache $upstream_cache_status always;
    add_header X-Cache-Date $upstream_http_date always;
  }
}

Tag summary

Content type

Image

Digest

sha256:9f3f2a142…

Size

27.3 MB

Last updated

14 days ago

docker pull bugoman/django-nginx