로드 밸런서 뒤에 웹 서버가 있습니다.
유지 관리를 위해 사이트를 오프라인으로 전환 할 때마다 유지 관리 페이지를 표시하려면 .htaccess에 조건부 리디렉션을 추가해야합니다. 이 부분은 간단합니다.
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]
그러나 방문자의 IP 주소가 내 개인의 경우 유지 관리 페이지로 리디렉션되지 않으며 사이트가 온라인 인 것처럼 사이트를보고 테스트 할 수 있다는 조건을 추가하고 싶습니다. 이 부분은 일반적으로 간단합니다.
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]
그러나 웹 서버가로드 밸런서 뒤에 있기 때문에 REMOTE_ADDR
로드 밸런싱 서버의 내부 IP 주소로 확인됩니다.
전달 된 IP 주소를 찾기 위해이를 어떻게 변경할 수 있습니까? PHP $_SERVER['HTTP_X_FORWARDED_FOR']
에서 전달 된 IP 주소를 얻는 데 사용할 수 있다는 것을 알고 있습니다 . 나는 몇 가지 일을 시도 .htaccess
했지만 운이 없다.
%{X_FORWARDED_FOR}
%{HTTP:X_FORWARDED_FOR}
%{HTTP_X_FORWARDED_FOR}
해결책
나는 다음을 작동시켰다.
%{HTTP:X-FORWARDED-FOR}
답변
%{HTTP:X-FORWARDED-FOR}
대신 사용%{REMOTE_ADDR}