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.