Moodle 3.7 & Apache & 역방향 프록시 결과 ERR_TOO_MANY_REDIRECTS

Moodle 3.7 & Apache & 역방향 프록시 결과 ERR_TOO_MANY_REDIRECTS

역방향 프록시를 사용하는 Moodle 3.7 Apache에서는 ERR_TOO_MANY_REDIRECTS가 발생합니다.

다음 가상 호스트 파일이 있는 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;

Google Chrome에서 열려고 할 때 "ERR_TOO_MANY_REDIRECTS" 오류가 발생하는 이유가 무엇인지 아시나요?https://moodle.site.comURL?

답변1

4가지 문제가 있으므로 수정해야 합니다(명령줄 명령은 루트로 실행하거나 sudo를 사용하여 실행해야 함).

1) mod_ssl Apache 모듈이 활성화되지 않았습니다.명령줄에서 mod_ssl이 활성화되어 있는지 테스트합니다.

apache2ctl -M | grep ssl

다음이 표시되어야 합니다(활성인 경우).

ssl_module (shared)

고정시키다(명령줄에서 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)

고정시키다(명령줄에서 mod_headers를 활성화합니다):

a2enmod headers

3) Apache vhost conf 파일에서 http 대신 https ProxyPass URL을 사용해야 했습니다.

잘못된:

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) Apache vhost conf 파일의 ProxyPass에서 SSL을 사용하려면 SSLProxyEngine 지시어를 켜야 합니다.

문제를 해결하세요: /etc/apache2/sites-available/myvhost.conf에 SSLProxyEngine을 추가했습니다.

SSLProxyEngine on

관련 정보