Apache-Httpd
Moodle 3.7 & Apache & 反向代理結果 ERR_TOO_MANY_REDIRECTS
具有反向代理結果 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