IIS에서 모든 HTTP를 HTTPS로 리디렉션하는 가장 좋은 방법


26

웹 서버 (IIS 10)의 모든 사이트가 SSL을 시행 (즉, HTTP를 HTTPS로 리디렉션)하기를 원합니다.

Google은 현재 각 사이트에서 'SSL 필요'로 해당 사이트 의 https 주소에 대한 403 error처리기를 설정합니다 302 redirect.

이것은 잘 작동합니다. 그러나 모든 단일 사이트에서 수행해야하는 어려움은 인적 오류의 여지가 많습니다.

이상적으로 301 redirect는 모든 HTTP://*것을 영구적 으로 설정하고 싶습니다HTTPS://*

IIS에서이를 수행하는 간단한 방법이 있습니까?


관리 부담을 줄이고 오타 및 실수를 방지하는 데 도움이되는 모든 사이트에 대해이 변경을 수행하는 스크립트를 작성할 수 없습니까?
토드 윌콕스

1
제목이 잘못되었습니다. "IIS에서 모든 HTTP를 HTTPS로 리디렉션하는 가장 좋은 방법"
Mick

@ToddWilcox 이러한 스크립트의 예를 들어 줄 수 있습니까?
userSteve

IIS를 사용하지 마십시오. : D

답변:


40

IIS7 + 용 IIS URL 다시 쓰기 모듈 2.1은 친구가 될 수 있습니다. 모듈은 IIS URL 다시 쓰기 에서 다운로드 할 수 있습니다 . URL 다시 쓰기 모듈URL 다시 쓰기 모듈 2.0 구성 참조 사용은 모듈 사용 방법을 설명합니다.

모듈이 설치되면 IIS 관리자를 사용하여 호스트 전체 리디렉션을 만들 수 있습니다. 선택 URL 재 작성 , 규칙 (들) ... 추가 하고, 빈 규칙을 .

이름 :
HTTPS로 리디렉션


요청 된 URL과 일치하는 URL : Matches the Pattern
사용 : Wildcards
패턴 : *
대소 문자 무시 : 확인

조건
논리 그룹화 : Match Any
조건 입력 : {HTTPS}
입력 문자열 확인 : Matches the Pattern
패턴 : OFF
대소 문자 구분 : 확인
조건에 따른 트랙 캡처 그룹 : 확인 되지 않음

서버 변수
비워 두십시오.

작업
작업 유형 : Redirect
리디렉션 URL : https://{HTTP_HOST}{REQUEST_URI}
쿼리 문자열 추가 : 선택되지 않음
리디렉션 유형 : Permanent (301)

규칙을 적용하고 IISReset을 실행하십시오 (또는 IIS 관리자에서 다시 시작을 클릭하십시오)

또는 모듈을 설치 한 후 다음과 같이 applicationHost.config 파일을 수정할 수 있습니다.

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

영구 301 리디렉션에도 적용됩니까?
userSteve

위의 답변에 따라 @userSteve에서 리디렉션 유형을 선택할 수 있습니다.
BE77Y

@userSteve whoops, 그렇습니다. Redirect Type 을 301 로 바꾸고 같은 결과를 얻을 수 있어야합니다
sippybear

1
@sippybear 하나 더 질문-input = "{HTTPS}"는 무엇을 의미합니까? 입력이되고 출력이 HTTP이므로 {HTTP} 여야합니까?
userSteve

3
{HTTPS}는 연결이 안전한지 확인하기 위해 쿼리하는 변수입니다. docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… 에 대한 자세한 내용은 여기에서 {HTTPS}가 "off"인지 확인한 후 리디렉션합니다. 그것은이다
sippybear

1

내 연구에 따르면 이것이 리디렉션을 개선하는 더 좋은 방법 일 수 있습니다.

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>

1
왜 이것이 더 좋은지 설명 할 수 있습니까?
userSteve 2016 년

나는 내 자신을 설명 할 수 없어서 미안하지만 구문이 좋은 몇 곳에서 읽으십시오.
타락한 천사

1
소스가 있습니까?
dangel

1
이는 serverfault.com/a/893804/7184 와 정확히 같은 규칙 이지만 정규식 및 모두 일치 그룹화를 사용하여 작성되었습니다. 한가지 단점은 규칙 표현식이 규칙 기본값을 사용하고 더 간결하다는 것입니다.
bzlm

IIS 10을 사용 중이며 선택한 답변이 효과가 없었습니다. 어떤 이유로 IIS는 구문을 유효한 규칙으로 인식하지 못했습니다. 귀하의 코드를 붙여 넣었고 공유해 주셔서 감사합니다.
요르단
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.