나의 웹 사이트https://stage.issufy.com/, SSL을 설정한 후 302 리디렉션 루프가 발생합니다. htaccess 파일은 다음과 같습니다.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
http에 대한 Apache 구성은 다음과 같습니다.
<VirtualHost *:80>
ServerName stage.issufy.com
Redirect / https://stage.issufy.com
DocumentRoot /var/www/html/stage.issufy.com
<Directory "/var/www/html/stage.issufy.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =stage.issufy.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>
SSL 구성은 다음과 같습니다.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName stage.issufy.com
DocumentRoot /var/www/html/stage.issufy.com
<Directory "/var/www/html/stage.issufy.com">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/stage.issufy.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/stage.issufy.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
웹사이트는 cloudfare 없이도 잘 작동하지만, cloudflare를 활성화하자마자 302 리디렉션 오류가 발생합니다.
여기 오류 로그가 있습니다
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:18 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:19 +0000] "GET / HTTP/1.1" 302 538 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:20 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
172.68.51.31 - - [17/Jan/2017:18:24:20 +0000] "GET / HTTP/1.1" 302 539 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/52.15.25.665 Chrome/52.0.2743.82 Safari/537.36"
답변1
Cloudflare의 유연한 SSL 서비스를 사용하는 경우 원본 웹 서버는 포트 80에서 암호화되지 않은 상태로 들어오는 트래픽을 볼 수 있습니다.
이 문제를 해결하려면 몇 가지 옵션이 있습니다.
- Cloudflare의 SSL 모드 설정원본에서 지원하는 경우 전체 또는 전체(엄격)로 설정합니다. 당신은 사용자도 할 수 있습니다Cloudflare의 원본 CA 서비스웹 서버에 대한 무료 SSL 인증서를 받으려면
- Mod_Cloudflare 설치Apache의 경우 IP를 올바르게 기록하거나 SSL 환경 변수를 수정하여 유연한 SSL을 고려하는 등 Cloudflare가 투명하게 작동하도록 보장합니다.
- Apache를 계정으로 설정합니다
X-Forwarded-Proto
(사용자가 Cloudflare에 연결하는 대상을 나타냄).
답변2
일부 리디렉션 규칙으로 인해 Cloudflare의 nginx가 혼란스러운 것 같습니다.
HTTP/1.1 302 Found
Date: Tue, 17 Jan 2017 18:18:09 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
Set-Cookie: __cfduid=da71659f540fb5dad0c47d48669012aa61484677089; expires=Wed, 17-Jan-18 18:18:09 GMT; path=/; domain=.issufy.com; HttpOnly
Location: https://stage.issufy.com
Server: cloudflare-nginx
CF-RAY: 322bcedefcc859d2-VIE
.htaccess 파일을 완전히 비활성화한 다음 규칙별로 다시 추가하여 문제를 제거해 보셨나요?
답변3
Redirect / https://stage.issufy.com
이는 구성에서 유일한 302(임시) 리디렉션인 것 같습니다.
CloudFlare SSL은 어떻게 구현되나요? SSL을 처리하는 프런트엔드 프록시로 CloudFlare를 사용하는 경우(CloudFlare의 유일한 옵션)무료버전 AFAIK) 웹 사이트는 여전히 HTTP(포트 80)를 통해 CloudFlare에 콘텐츠를 제공하고 연결은 CloudFlare에서 클라이언트로만 암호화됩니다. 이 경우 위의 리디렉션으로 인해 실제로 302 리디렉션 루프가 발생합니다. (이것은 일반적으로 301로 구현되어야 합니다. 즉. Redirect 301 ...
)
이 경우 클라이언트가 HTTPS를 통해 사이트(또는 CloudFlare)에 액세스하고 있는지 여부를 확인할 수 있는 몇 가지 추가 HTTP 요청 헤더가 있습니다.
RewriteEngine on RewriteCond %{SERVER_NAME} =stage.issufy.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
덧붙여서, 이는 위의 단일 지시문과 동일한 작업을 수행하려고 합니다 Redirect
(비록영구적으로). 둘 중 하나를 사용하지 말고 둘 중 하나를 사용하십시오.
단일 Redirect 301
(mod_alias) 지시문을 사용하는 것이 좋습니다. 그러나 HTTPS를 결정하기 위해 프록시 HTTP 요청 헤더를 확인해야 하는 경우 mod_rewrite가 필요합니다.