Кажется таким очевидным в заднем плане. Оказывается, проблема была в том, что я слепо доверял certbot для автоматического создания нового VirtualHost и перенаправления, и я не особо задумывался о том, как это работает.
Если вы посмотрите на пример файла .conf в вопросе, причина, по которой он работает, заключается в том, что инструкции WSGI создаются вне области действия тегов <VirtualHost>
, что позволяет им быть подхваченными обоими виртуальными хостами. , Но в то же время, поскольку они создаются глобально, инструкции WSGI в файле .conf, который идет первым в алфавитном порядке, переопределяют другие, следовательно, app1 отображается на app1domain.com и app2domain.com.
Когда я переехал инструкции WSGI внутри тегов <VirtualHost>
, я перемещал их внутри тегов <VirtualHost *:80>
, потому что все примеры, которые я нашел, делали это (потому что они не использовали SSL). Когда я это сделал, вместо запуска приложения RewriteEngine перенаправлял запрос на https-версию веб-сайта. Это замечено <VirtualHost *:443>
, когда вы заметите, что у меня не было инструкций по запуску приложения, поэтому мы получаем страницу по умолчанию.
В конце я переписал свои файлы .conf следующим образом:
<VirtualHost *:80>
ServerAdmin myemail@outlook.com
ServerName app1domain.com
ServerAlias www.app1domain.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =app1domain.com [OR]
RewriteCond %{SERVER_NAME} =www.app1domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName app1domain.com
ServerAlias www.app1domain.com
ServerAdmin myemail@outlook.com
WSGIDaemonProcess app1 python-home=/var/www/app1/venv user=brett group=sudo home=/ threads=5
WSGIScriptAlias / /var/www/app1/app.wsgi
<Directory /var/www/app1>
WSGIProcessGroup app1
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/app1domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/app1domain.com/privkey.pem
</VirtualHost>