Moodle 3.7 Apache with reverse proxy results ERR_TOO_MANY_REDIRECTS.

I have an SSL site with following vhosts file:

<VirtualHost *:80>
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName moodle.site.com:443

SSLEngine on
SecAuditEngine On
RewriteEngine On

    ProxyPreserveHost On
    ProxyPass /
    ProxyPassReverse /


I also redirect all 80 port requests to SSL port.

The command

curl -I https://moodle.site.com/


HTTP/1.1 303 See Other
Date: Fri, 09 Aug 2019 19:13:33 GMT
Server: Apache/2.4.38 (Debian)
Strict-Transport-Security: max-age=15768000; includeSubDomains
Location: https://moodle.site.com
Content-Language: en
Content-Type: text/html; charset=UTF-8

In Moodle config.php I have:

$CFG->wwwroot   = 'https://moodle.site.com';
$CFG->reverseproxy = true;
$CFG->sslproxy  = 1;

Any idea why I get "ERR_TOO_MANY_REDIRECTS" error in Google Chrome, when I try to open https://moodle.site.com URL?

  • is the IP address of the frontend? Commented Aug 12, 2019 at 9:35
  • the IP address of the Moodle backend server. The frontend server has moodle.site.com subdomain name, which resolves to The user enters the moodle.site.com URL, which should reverse proxy content from Moodle backend server from IP address.
    – klor
    Commented Aug 12, 2019 at 9:44

1 Answer 1


I had 4 problems, so I had to fix them (command line commands should be executed as root or use sudo):

1) mod_ssl Apache module was not activated. Test in the command line, if mod_ssl is active:

apache2ctl -M | grep ssl

Should display this (if active):

ssl_module (shared)

FIX (enable mod_ssl in the command line):

a2enmod ssl
# Considering dependency setenvif for ssl:
# Module setenvif already enabled
# Considering dependency mime for ssl:
# Module mime already enabled
# Considering dependency socache_shmcb for ssl:
# Enabling module socache_shmcb.
# Enabling module ssl.
# See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
# To activate the new configuration, you need to run:
# systemctl restart apache2

2) I use the Header directive in Apache SSL conf file, like this:

# Guarantee HTTPS for 180 days including sub domains 
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"

Because of this mod_headers Apache module is required, it was not activated. Test in the command line, if mod_headers is active:

apache2ctl -M | grep headers

Should display this (if active):

headers_module (shared)

FIX (enable mod_headers in the command line):

a2enmod headers

3) I had to use https ProxyPass URL instead of http in Apache vhost conf file :


ProxyPass /
ProxyPassReverse /


ProxyPass /
ProxyPassReverse /

4) Had to turn on SSLProxyEngine directive to use SSL in ProxyPass in Apache vhost conf file.

FIX: Added SSLProxyEngine on in /etc/apache2/sites-available/myvhost.conf

SSLProxyEngine on

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .