Apache-Httpd

Moodle 3.7 & Apache & 反向代理結果 ERR_TOO_MANY_REDIRECTS

  • January 20, 2020

具有反向代理結果 ERR_TOO_MANY_REDIRECTS 的 Moodle 3.7 Apache。

我有一個帶有以下 vhosts 文件的 SSL 站點:

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


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

SSLEngine on
SecAuditEngine On
RewriteEngine On

   ProxyPreserveHost On
   ProxyPass / http://101.102.103.104:80/
   ProxyPassReverse / http://101.102.103.104:80/

</VirtualHost>                                  
</IfModule>

我還將所有 80 個埠請求重定向到 SSL 埠。

命令

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

在 Moodle config.php 我有:

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

知道為什麼當我嘗試打開https://moodle.site.com URL 時在 Google Chrome 中出現“ERR_TOO_MANY_REDIRECTS”錯誤嗎?

我有 4 個問題,所以我必須修復它們(命令行命令應該以 root 身份執行或使用 sudo):

**1) mod_ssl Apache 模組未啟動。**在命令行中測試,如果 mod_ssl 處於活動狀態:

apache2ctl -M | grep ssl

應該顯示這個(如果啟動):

ssl_module (shared)

FIX(在命令行中啟用 mod_ssl):

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)我在 Apache SSL conf 文件中使用 Header 指令,如下所示:

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

因為這個 mod_headers Apache 模組是必需的,所以它沒有被啟動。在命令行中測試,如果 mod_headers 處於活動狀態:

apache2ctl -M | grep headers

應該顯示這個(如果啟動):

headers_module (shared)

FIX(在命令行中啟用 mod_headers):

a2enmod headers

3) 我不得不在 Apache vhost conf 文件中使用 https ProxyPass URL 而不是 http:

錯誤的:

ProxyPass / http://101.102.103.104:80/
ProxyPassReverse / http://101.102.103.104:80/

好的:

ProxyPass / https://101.102.103.104/
ProxyPassReverse / https://101.102.103.104/

4) 必須打開 SSLProxyEngine 指令才能在 Apache vhost conf 文件中的 ProxyPass 中使用 SSL。

修復: 在 /etc/apache2/sites-available/myvhost.conf 中添加 SSLProxyEngine

SSLProxyEngine on

引用自:https://unix.stackexchange.com/questions/535108