문제

와일드카드 도메인과 관련하여 Apache와 동일한 기능을 달성하도록 IIS7을 구성할 수 있습니까?URL에 사용되는 하위 도메인 사용자를 기반으로 ASP.NET 웹 응용 프로그램에서 사용자를 라우팅하는 데 관심이 있습니다.

여기에는 다음과 같은 내용이 설명되어 있습니다.

http://steinsoft.net/index.php?site=programming/articles/apachewildcarddomain

감사해요

도움이 되었습니까?

해결책

답은 아니오입니다. IIS7 (Still)은 와일드 카드 호스트 이름을 지원하지 않습니다 ( 이것). 하나의 웹 사이트에서 여러 도메인을 제공하려는 경우 Notandy가 제안한 것처럼 현재 유일한 해결 방법은 전용 IP를 사용하고 와일드 카드를 지원하는 DNS와 함께 수행하는 것입니다.

2013 업데이트

완전성을 위해 IIS8에는 아직이 기능이 없습니다.

2016 업데이트

마지막으로 Windows 2016의 IIS 10은 와일드 카드 하위 도메인을 지원합니다.

다른 팁

IIS는 와일드 카드 호스트 헤더를 지원합니까? *.mydomain.com을 하나의 웹 사이트로 캡처하고 리디렉션 할 수 있습니까?

대답은 예/아니오입니다. 예, *.mydomain.com을 하나의 웹 사이트로 리디렉션 할 수 있기 때문입니다. 아니요, 마법은 II가 아닌 DNS에 있기 때문입니다.

당신이하는 방법은 다음과 같습니다.
IIS MMC에서 호스트 헤더가없는 웹 사이트를 구성한 다음 사이트에 IP 주소를 할당하십시오. (상자에 IP 주소가 하나있는 경우이를 건너 뛸 수 있습니다). 이를 통해 웹 사이트는 특정 IP에 바인딩되며 모든 HTTP 요청이 IP로 전송되면 완료됩니다 :)

다음 단계는 이름 해상도가 와일드 카드 쿼리에 대해 작동하는지 확인하고 올바른 IP 주소로 회신하는 것입니다. Microsoft DNS 서비스를 사용하는 경우 '*'레코드를 만들 수 없습니다 (이미 DNS MMC에서 도메인 영역을 생성했다고 가정)는 다음을 수행해야합니다.

  1. 로 이동 %windir%\system32\dns\
  2. 영역 파일을 찾으십시오. 예를 들어
    mydomain.com.dns, 메모장으로 열 수 있습니다
  3. 항목을 추가하십시오. 예를 들어
    * A IP.IP.IP.IP
  4. 영역 데이터 파일을 저장합니다
  5. DNS MMC에서 영역 데이터를 다시로드하십시오.

이렇게하면 모든 *가 이전에 구성한 IP에 대한 응답이됩니다. 예 : ABC.mydomain.com, www.mydomain.com, k2k.mydomain.com 등

작동 중인지 확인하려면 Ping 유틸리티를 사용해보십시오. ping (insert anything here).mydomain.com그리고 당신은 ip.ip.ip.ip에서 답장을 받아야합니다

그런 다음 브라우징을 시도하십시오, http : // (여기에 무엇이든 삽입) .mydomain.com/, 구성한 것과 동일한 웹 페이지를 가져와야합니다.

원천

Microsoft의 DNS에서는 와일드카드(*) 레코드를 생성할 수 없지만 ~할 수 있다 와일드카드를 생성하다 CNAME.모든 하위 도메인을 특정 IP로 연결하려는 경우에는 이것이 가능합니다.예를 들어 다음에 대한 A 레코드가 있는 경우 www.mydomain.com, 당신은 CNAME 에 대한 기록 *.mydomain.com 그리고 그걸 가리킨다 www.mydomain.com.요청 헤더의 호스트 이름은 여전히 ​​하위 도메인이므로 웹 앱은 원하는 경우 이를 포착하고 처리할 수 있어야 합니다.

웹 플랫폼 설치 프로그램을 사용하는 경우 IIS를 사용할 수 있습니다 (http://www.microsoft.com/web/downloads/platform.aspx) 및 "URL Rewrite"모듈을 설치하십시오. "A"*.example.com "을 추가하면 모든 하위 도메인을 IIS 서버로 전송할 수 있습니다. IIS 서버에서는 기본 웹 사이트에 URL 재 작성 규칙을 추가하여 다른 URL로 리디렉션하는 등 원하는대로 수행합니다. 사용자가 "xyz.example.com"에 들어가면 "example.com"으로 리디렉션하고 모든 알려지지 않은 하위 도메인을 루트 도메인에 가리킬 수 있습니다. 단계는 다음과 같습니다.

  1. 웹 플랫폼 설치 프로그램 설치 : http://www.microsoft.com/web/downloads/platform.aspx

    실행하고 "URL Rewrite"를 검색하고 설치하십시오.

  2. 기본 웹 사이트로 이동하여 "URL Rewrite"를 엽니 다.

  3. 가장 오른쪽에서 "규칙 추가"를 클릭하십시오.

  4. 규칙을 지정하고 다음을 설정하십시오.

    요청 된 URL : 패턴과 일치합니다

    사용 : 정규 표현

    패턴 : (.*)

    논리 그룹화 : 모두 일치합니다

  5. 새 조건을 추가하고 ( "Add .."버튼을 클릭) 다음을 설정하십시오.

    조건 입력 : {cache_url}

    입력 문자열이 있는지 확인하십시오 : 패턴과 일치합니다

    패턴 (필요에 따라 수정) : (http | https) : // (.*?) .rootdomain .tld

    OK]를 클릭합니다.

  6. 이제 아래로 스크롤하여 작업을 설정하고 설정하십시오.

    액션 유형 : 리디렉션

    URL 리디렉션 (필요에 따라 수정) : {C : 1} : //rootdomain.tld {r : 0}

"{c :#}"및 "{r :#}"은 Regex 패턴 항목 옆의 "테스트 패턴"버튼을 클릭하면 테스트 창에서 나옵니다. 서버 값의 일부를 일치시키고 나중에 재사용 할 수 있습니다.

또한 URL에서 HTTP/HTTPS를 전달할 때이 팁을 확인할 수 있습니다 (위 6 단계의 "{C : 1}") : http://weblogs.asp.net/owscott/url-rewrite-protocol-http-https-in-the-action

업데이트 2 : 링크가 고장 났고 IIS 10으로 업그레이드하고 지금은 와일드 카드를 지원합니다.

업데이트 : 이것은 잠시 동안 작동합니다. 잠시 후 여러 요청이 발생합니다. 이 방법을 권장하지 않습니다.

DNS 레코드가 올바르게 설정되어 있는지 확인하십시오 ( *->@의 CNAME 레코드)는 완벽하게 작동합니다. 여러 도메인으로 테스트되었습니다.

이제 링크가 끊어졌습니다http://pzxc.com/apache-style-wildcard-hostname-rewrite-rules-in-iis

IIS 10+로 업그레이드 할 수없는 사용자의 경우 리버스 프록시를 통해 와일드 카드 호스트 이름 지원을 활성화하는 것이 그리 어렵지 않습니다.

HTTP 예제는 다음과 같습니다. 다른 설정은 몇 단계 만 더 있습니다.

  1. *: 80과 호스트 이름이없는 캐치-모든 사이트를 만듭니다.
  2. *: 8091 및 호스트 이름이없는 첫 번째 사이트를 만듭니다.
  3. *: 8092 및 호스트 이름이없는 두 번째 사이트를 만듭니다.
  4. 두 사이트를 모두 테스트하고 계속 진행하십시오.
  5. ARR 및 URL 재 작성 모듈을 설치하십시오.
  6. Catch-All 사이트에서 재 작성 규칙을 작성하여 두 사이트로 요청을 발송하고,

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="site1" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^(.*).site1.com$" />
                    </conditions>
                    <action type="Rewrite" url="http://localhost:8091/{R:0}" />
                </rule>
                <rule name="site2" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^(.*).site2.com$" />
                    </conditions>
                    <action type="Rewrite" url="http://localhost:8092/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
    

서버 레벨에서 ARR 프록시 모드를 켜야합니다.

    <system.webServer>
        <proxy enabled="true" />
    </system.webServer>

IIS 10 와일드 카드 호스트 이름은 더 단순하고 ARR의 오버 헤드가 있지만 일반적으로 무시할 수 있기 때문에 성능이 향상됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top