Назад | Перейти на главную страницу

Детали производственной конфигурации для сервера Django Apache за обратным прокси-сервером nginx

В настоящее время я пытаюсь настроить серверную архитектуру, в которой у меня есть проект Django, работающий через виртуальную среду на сервере Apache (в контейнере Docker), который получает запросы через обратный прокси-сервер nginx. (работает в другом контейнере Docker) У меня есть рабочая среда разработки для этой конфигурации, но я пытаюсь настроить производственную среду для каждого образа Docker.

В рамках этих усилий я изучал директивы файла конфигурации Apache, которые следует установить для производственной среды, и некоторые детали весьма своеобразны. Я попытался просмотреть большое количество документации Apache, а также информативные сообщения в блогах, но так и не смог найти повествование, которое бы в достаточной мере охватило мой вариант использования. По сравнению с программированием конфигурация / администрирование сервера намного сложнее и уникальнее для каждого случая.

Во-первых, мне интересно узнать о ServerRoot, DocumentRoot и UseCanonicalName директивы. Я это понимаю ServerRoot и DocumentRoot директивы в основном определяют, какие части сервера доступны, и UseCanonicalName On используется для создания самореференциальных URL. Однако я не уверен, как на все это влияет, когда перед сервером Apache есть обратный прокси, который также будет обрабатывать рукопожатие SSL и разрешит только https подключения для доступа к серверу Apache.

Кроме того, я не уверен, какие значения следует присвоить ServerName директива. я знаю это ServerName обычно имеет значение домена сервера, но в этом случае сервер Apache находится за обратным прокси. Несмотря на то, что прокси будет прослушивать только порт 443 (и перенаправлять запросы порта 80 на 443), Apache в настоящее время прослушивает только порт 80, учитывая, что обратный прокси будет обрабатывать квитирование SSL. Итак, можно ли просто ввести URL-адрес, скажем "blabla.com" , как значение ServerName директива, или значение должно быть "blabla.com:443", несмотря на то, что Apache прослушивает порт 80.

Ниже представлен мой текущий черновик производственной конфигурации для сервера Apache. Буду признателен, если вы подскажете мне, какие вопросы я упомянул выше. Кроме того, сообщите мне, есть ли какие-либо дополнительные директивы, которые необходимо добавить для моего варианта использования. (т.е. Django поверх Apache за обратным прокси)

WSGIDaemonProcess project python-home=${PATH_TO_PYTHON_VENV} python-path=${PATH_TO_DJANGO_APP_DIR}
WSGIProcessGroup project

User                www-data
Group               www-data

ErrorLogFormat      "[%{cu}t] [%-m:%-l] %-a %-L %M"
LogFormat           "%h %l %u [%{%Y-%m-%d %H:%M:%S}t.%{usec_frac}t] \"%r\" %>s %b \
\"%{Referer}i\" \"%{User-Agent}i\"" combined

LogLevel warn

UseCanonicalName    On
TraceEnable         Off

Timeout             10
MaxRequestWorkers   100

ServerTokens        Prod
ServerSignature     Off

<VirtualHost *:80>
    DocumentRoot /var/www/project/html

    <Directory ${PATH_TO_DJANGO_APP_DIR}/project>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIPassAuthorization On
    WSGIScriptAlias / ${PATH_TO_DJANGO_APP_DIR}/project/wsgi.py

    ErrorLog ${PATH_TO_APACHE_LOG_DIR}/project/error.log
    CustomLog ${PATH_TO_APACHE_LOG_DIR}/project/access.log combined

    ServerName ${APACHE_SERVER_NAME}
    ServerAdmin ${APACHE_SERVER_ADMIN}
</VirtualHost>