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

Grafana с SSL и обратным прокси-сервером Apache постоянно перенаправляет

Я пытаюсь переместить свою установку Grafana с ссылки без SSL на SSL. Он находится за обратным прокси-сервером Apache и работал нормально до того, как я попытался настроить SSL.

Я видел много руководств, которые выглядят как вот этот, что я и сделал.

Моя конфигурация Apache выглядит так (с измененным доменным именем на example.com)

<VirtualHost *:80>
    ServerAdmin nermel@example.com
    ServerName grafana.example.com
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L]

    ErrorLog /var/log/apache2/grafana.example.com-error_log
    CustomLog /var/log/apache2/grafana.example.com-access_log common
</VirtualHost>

<VirtualHost *:443>
    ServerName grafana.example.com
    ServerSignature Off

    SSLEngine on
    SSLCertificateFile /opt/repos/dehydrated/certs/grafana.example.com/cert.pem
    SSLCertificateKeyFile /opt/repos/dehydrated/certs/grafana.example.com/privkey.pem
    SSLCertificateChainFile /opt/repos/dehydrated/certs/grafana.example.com/chain.pem
    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>

    ProxyPreserveHost On
    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000/

    ErrorLog /var/log/apache2/grafana.example.com-error_log
    CustomLog /var/log/apache2/grafana.example.com-access_log common

 </VirtualHost>

В моем grafana.ini Я изменил только следующее. Все остальное по-прежнему закомментировано и используется по умолчанию:

domain = grafana.example.com
root_url = https://grafana.example.com

В моем файле grafana.log нет ошибок, и он запускается должным образом. Это заканчивается

t=2019-05-30T14:51:31-0500 lvl=info msg="HTTP Server Listen" logger=http.server address=0.0.0.0:3000 protocol=http subUrl= socket=

Мои записи DNS и сертификаты SSL установлены правильно.

Если я перейду на полный URL (grafana.example.comApache выполняет множество перенаправлений, а затем запрос завершается ошибкой, и Chrome сообщает, что произошло много перенаправлений. Мой журнал доступа выглядит так (с очищенными IP-адресами)

162.158.xxx.xxx - - [30/May/2019:14:51:57 -0500] "GET /?orgId=1 HTTP/1.1" 302 581
162.158.xxx.xxx - - [30/May/2019:14:51:57 -0500] "GET /?orgId=1 HTTP/1.1" 302 581
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 581
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 581
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:58 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:59 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:59 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:59 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:59 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:59 -0500] "GET /?orgId=1 HTTP/1.1" 302 580
162.158.xxx.xxx - - [30/May/2019:14:51:59 -0500] "GET /?orgId=1 HTTP/1.1" 302 580

В моем журнале ошибок apache нет ошибок.

До попытки перехода на SSL мой виртуальный хост выглядел так и работал должным образом:

<VirtualHost *:80>
    ServerAdmin nermel@example.com
    ServerName grafana.example.com
    ProxyPreserveHost On
    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000/


    ErrorLog /var/log/apache2/grafana.example.com-error_log
    CustomLog /var/log/apache2/grafana.example.com-access_log common
</VirtualHost>

Мой apache2ctl -S вывод будет следующим (опять же, с очищенным доменом). Другой мой виртуальный хост SSL указывает на экземпляр GitLab и работает без проблем:

VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server default (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost default (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost repos.example.com (/etc/apache2/sites-enabled/gitlab.conf:18)
         port 80 namevhost grafana.example.com (/etc/apache2/sites-enabled/grafana.conf:1)
*:443                  is a NameVirtualHost
         default server repos.example.com (/etc/apache2/sites-enabled/gitlab.conf:27)
         port 443 namevhost repos.example.com (/etc/apache2/sites-enabled/gitlab.conf:27)
         port 443 namevhost grafana.example.com (/etc/apache2/sites-enabled/grafana.conf:13)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default 
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33 not_used
Group: name="www-data" id=33 not_used

Что мне нужно сделать, чтобы я мог использовать Apache в качестве обратного прокси и использовать SSL для подключения к Grafana?