SNI는 SSL / TLS 핸드 셰이크 중에 발생하므로 클라이언트가 HTTP에 연결할 때 브라우저 지원을 감지 할 수 없습니다.
그래서 당신이 맞습니다. 이를 수행하는 유일한 방법은 사용자 에이전트 필터입니다.
가장 큰 문제는 SNI를 수신하지 않는 브라우저 또는이를 지원하는 것으로 알려진 브라우저에 대해 블랙리스트로 작업 할 것인지 여부입니다. 사이트를 사용할 수없는 모호하거나 새로운 장치는 거래 차단기처럼 보이므로 허용 목록이 더 나은 옵션이라고 할 수 있습니다.
귀하의 HTTP에서 <VirtualHost>
:
# Internet Explorer 7, 8, 9, on Vista or newer
RewriteCond %{HTTP_USER_AGENT} MSIE\s7.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s8.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s9.*Windows\sNT\s6 [OR]
# Chrome on Windows, Mac, Linux
RewriteCond %{HTTP_USER_AGENT} Windows\sNT\s6.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Macintosh.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Linux.*Chrome [OR]
# Firefox - we'll just make the assumption that all versions in the wild support:
RewriteCond %{HTTP_USER_AGENT} Gecko.*Firefox
RewriteRule ^/(.*)$ https://ssl.hostname/$1 [R=301]
블랙리스트 옵션도 있습니다. 이로 인해 SNI를 사용하지 않는 클라이언트를 SNI가 필요한 사이트로 보낼 위험이 있지만 반면에 IE 10과 같은 새로운 사용자를 오른쪽으로 보낼 것입니다. 장소:
# IE 6
RewriteCond %{HTTP_USER_AGENT} !MSIE\s6
# Windows XP/2003
RewriteCond %{HTTP_USER_AGENT} !Windows\sNT\s5
# etc etc
RewriteRule ^/(.*)$ https://ssl.hostname/$1 [R=301]
거기에는 많은 브라우저가 있습니다. 나는 표현이 너무 느슨했고 많은 브라우저를 다루지 않았습니다.
어떤 옵션을 선택하든 .. 행운을 빌어 요!