Обратный прокси-сервер для Django с преднастроенным кэшированием.
Конфигурация по умолчанию предполагает, что данный образ будет использоваться в качестве обратного прокси-сервера для одного единственного сайта.
Пример: проксирование сайта 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;
}
}
Content type
Image
Digest
sha256:9f3f2a142…
Size
27.3 MB
Last updated
14 days ago
docker pull bugoman/django-nginx