Apache2 Слишком много перенаправлений в HTTPS Rewrite Virtual Host
Я продолжаю получать слишком много перенаправлений на одном из моих виртуальных хостов, но не на другом. Я уверен, что есть какая-то очень маленькая ошибка, которую я сделал, но я просто не знаю. Я приложил оба конфигурации сайта Apache2 ниже. Я пробовал несколько разных версий условий перезаписи, и ничего не изменилось. Каждый раз я перезапускаю apache. Правила перезаписи, которые имеют для меня наибольший смысл, - вот эти, которые из-за OR-предшественника должны быть (www.stage OR stage) AND HTTPS=OFF
по моим расчетам. Похоже, что проверка HTTPS
никогда не происходит? И я совершенно не понимаю, почему прямая копия рабочего конфига не работает для этого нового сайта.
RewriteCond %{SERVER_NAME} =www.stage.example.com [OR]
RewriteCond %{SERVER_NAME} =stage.example.com
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
У меня есть несколько сайтов, работающих в microk8s pods на сервере с Apache2, и виртуальные хосты передают трафик на соответствующий порт. Основное различие между двумя сайтами заключается в том, что один написан на PHP (работает), а новый - на DJango. Но у меня есть еще один работающий сайт на Django, так что я сомневаюсь, что проблема в этом.
# example.com.config
# Staging branch, unstable wip
# Config also includes 2 other virtual hosts for dev and main as well
<VirtualHost *:80>
ServerName stage.example.com
ServerAlias www.stage.example.com
# Rewrite logs show up in these log files, so I know it's happening in
# this virtual host.
ErrorLog ${APACHE_LOG_DIR}/ex-stage-error.log
CustomLog ${APACHE_LOG_DIR}/ex-stage-access.log combined
ProxyPass / http://localhost:30102/
ProxyPassReverse / http://localhost:30102/
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.stage.example.com
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
RewriteCond %{SERVER_NAME} =stage.example.com
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</IfModule>
</VirtualHost>
<VirtualHost *:443>
ServerName stage.example.com
ServerAlias www.stage.example.com
RequestHeader set X-Forwarded-Proto https
ProxyPreserveHost On
ErrorLog ${APACHE_LOG_DIR}/ex-stage-error.log
CustomLog ${APACHE_LOG_DIR}/ex-stage-access.log combined
ProxyPass / http://localhost:30102/
ProxyPassReverse / http://localhost:30102/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
# example2.com.conf
# All three of the virtual hosts in this file work as expected.
# I tried copying over the rewrite conditions directly, and nothing changed.
# Main branch, stable production release
<VirtualHost *:80>
ServerName example2.com
ServerAlias www.example2.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://localhost:30090/
ProxyPassReverse / http://localhost:30090/
RewriteEngine on
RewriteCond %{SERVER_NAME} =example2.com [OR]
RewriteCond %{SERVER_NAME} =www.example2.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName example2.com
ServerAlias www.example2.com
RequestHeader set X-Forwarded-Proto https
ProxyPreserveHost On
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://localhost:30090/
ProxyPassReverse / http://localhost:30090/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
По их документации, проблема заключалась во включении Cloudflare HTTP на HTTPS, а также в перенаправлении HTTP на HTTPS в конфигурации apache.