Обратный прокси-сервер Apache с использованием mod_proxy
0 Введение
Я пытаюсь настроить сервер с основным сайтом, размещенным на портах 80 и 443 (назовем его example.com), и секцией на этом сайте, которая обслуживает аналитику umami, размещенную на порту 3000 (назовем ее umami.example.com), используя обратный прокси. Я использую Django и Apache (с mod_wsgi, как подсказывает проект django), и мне нужно настроить DNS с помощью Cloudflare.
Основной сайт работает как и предполагалось, перенаправляя http трафик на https (подробнее об этом в разделе Apache), и я пытаюсь добавить этот раздел под umami.example.com, но каждый запрос заканчивается 404 ошибкой, выдаваемой моим основным сайтом.
В настоящее время я пытаюсь заставить часть umami работать, используя обратный прокси (как показано в первой секции конфига Apache)
####################################################################
1 DNS
DNS настроен с помощью Cloudflare с 3 записями A:
- example.com -> IP-адрес сервера
- umami -> тот же ip-адрес сервера
- www -> снова тот же ip
и некоторые MX и TXT.
####################################################################
2 Конфигурация Apache
<VirtualHost _default_:80>
ServerAdmin admin@example.com
ServerName umami.example.com
ProxyPass "/" "http://127.0.0.1:3000/"
ProxyPassReverse "/" "http://127.0.0.1:3000/"
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost _default_:443>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
Alias /static /mainfolder/static
DocumentRoot /mainfolder/django-folder
<Directory /mainfolder/django-folder/static>
Require all granted
</Directory>
<Directory /mainfolder/django-folder/django-app>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess django-folder python-path=/mainfolder/django-folder python-home=/usr/local/env
WSGIProcessGroup django-folder
WSGIScriptAlias / /mainfolder/django-folder/django-app/wsgi.py
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
####################################################################
3 Что я пробовал
Подключение напрямую к IP-адресу в обход DNS (порт 80) не имеет никакого значения.
Подключение напрямую к IP-адресу в обход DNS (порт 3000) работает как положено.
Поменяв местами конфигурацию Apache работает следующим образом:
- Когда обратный прокси стоит на первом месте (конфигурация такая, как описано выше), то подключение к 80 порту обслуживает сайт аналитики.
- Когда редирект идет первым (поменяно местами), подключение к 80 порту перенаправляет на HTTPS сайт .
Добавление и удаление
ProxyPreserveHost
не имеет никакого значения.