В настоящее время я пытаюсь настроить серверную архитектуру, в которой у меня есть проект 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>