잘못된 요청-잘못된 호스트 이름 IIS7


87

포트 8080에서 웹 앱을 사용하려고하면 다음 오류가 발생합니다.

잘못된 요청-잘못된 호스트 이름
HTTP 오류 400. 요청 호스트 이름이 잘못되었습니다.

이 문제를 어디에서 진단해야할지 모르겠습니다.

답변:


75

바인딩이 IIS인지 확인 했습니까? (inetmgr.exe) 8080에서 모든 호스트 이름을 허용하도록 등록되지 않았을 수 있습니다.

예를 들어 mysite.com:8080에 대해 설정하고 localhost : 8080에 도달하면 IIS는 요청을 받지만 일치 할 호스트 이름 바인딩이 없으므로 거부합니다.

그 외에 서버에서 IIS 로그 (C : \ inetpub \ logs \ wmsvc #)를 확인하고 요청이 표시되는지 확인해야합니다. 그러면 클라이언트 또는 서버 자체에 문제가 있는지 알 수 있습니다.


2
제 경우에는 C : \ Windows \ System32 \ drivers \ etc \ hosts에 다음 줄을 추가해야했습니다. "127.0.0.1 localhost"
chris

4
IIS 관리자에서 바인딩을 어디에서 구성합니까?
Steve Smith

30

FWIW, 호스트 이름 / ip에 대한 요청 만 허용하려면 다음과 같이 바인딩을 설정할 수 있습니다.

<binding protocol="http" bindingInformation="*:80:*" />

이 바인딩을 사용하여 IE6으로 VM을로드 한 다음 내 애플리케이션을 디버깅 할 수 있습니다.


편집 : IIS Express를 사용하여 디버깅하는 동안이 옵션 구성 파일의 기본 위치는 다음과 같습니다.

C:\Users\{User}\Documents\IISExpress\config\applicationhost.config

2
또한 Conveyor라는 무료 VS 확장을 사용하여 IIS Express에서 원격 요청을 처리하도록 할 수 있습니다 (구성 변경 없음). 사용 도구 -> 확장 ... 그, 또는에서 얻을 수 marketplace.visualstudio.com/...를
짐 W는 분석 재개 모니카 말한다

26

Microsoft 의이 페이지에서는 로컬 네트워크의 다른 컴퓨터에서 IIS Server Express에 대한 액세스를 설정하는 방법을 설명합니다.

간단히 말해서 :

1) 관리자 권한이있는 명령 프롬프트에서 :

netsh http add urlacl url=http://[your ip address]:8181/ user=everyone

2) 고급 보안이 포함 된 Windows 방화벽에서 포트 8181에 대한 새 인바운드 규칙을 만들어 외부 연결을 허용합니다.

3) applicationhost.config에서 프로젝트의 노드에 다음을 추가하십시오.

<binding protocol="http" bindingInformation="*:8181:[your ip address]" />

추가하지 마십시오 (다른 답변에서 제안한대로) :

<binding protocol="http" bindingInformation="*:8181:*" />

위의 와일드 카드 바인딩은 http://192.168.1.6:8181/


4
또한 관리자 권한으로 Visual Studio를 실행해야합니다. 그렇지 않으면 IIS Express에 바인딩 할 수 없습니다. 관리자로 테스트를 마치면 applicationhost.config 파일에서 추가 항목을 제거하고 다음을 사용하여 HTTP.sys 항목을 제거하여 이전 단계를 되돌려 야합니다. netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
컴퓨터가 다른 언어로 설정된 경우 "user = everyone"은 다른 언어 여야합니다. 프랑스어에서는 user = "Tout le monde"입니다. 이 답변을 참조하십시오 : stackoverflow.com/a/18856394/1317559
Yster

24

그래서 IIS 관리자의 웹 사이트로 이동하여 사이트 바인딩의 호스트 이름을 localhost에서 *로 변경하여이 문제를 해결했습니다. 즉시 작업을 시작했습니다.

IIS의 사이트 바인딩


완전한! Laravel 사이트를 실행하는 데 사용 된 AWS 인스턴스에서 근무
Vishnoo Rath

이것은 localhost에서는 작동하지만 원격 IP에서는 작동하지 않는 asp.net 코어의 문제를 해결했습니다. 감사합니다!
필립

제 경우에는 효과가있었습니다. 100 개 이상의 사이트를 호스팅했지만. 처음으로 착각했으며 방화벽 규칙이나 다른 솔루션에서 찾을 수 없었습니다.
Ketan Kotak

9

들어 Visual Studio 2017Visual Studio 2015, IIS Express설정이 숨겨져에 저장되어있는 .vs디렉토리 경로가이 같은 것입니다 .vs\config\applicationhost.config, 의지 작업을 아래와 같이 바인딩 추가

<bindings>
    <binding protocol="http" bindingInformation="*:8802:localhost" />
    <binding protocol="http" bindingInformation="*:8802:127.0.0.1" />
</bindings>

구문 : https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet


2
이 방법을 사용하는 모든 사람에게 올바른 바인딩 정보 템플릿은 ip address : port : host header입니다. 그래서 올바른 구현은 다음과 같습니다 <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
.vs 폴더는 프로젝트 루트 폴더의 폴더입니다. 의 <바인딩> 태그 <사이트 이름 = "[YourService / 프로젝트 이름]>에 대한 그 applicationHost.config 파일의 모습에서 찾아 태그가.
NEXX

4

IPv6 주소에도 바인딩하는 것을 잊지 마십시오! localhost를 사용하여 127.0.0.1에 사이트를 추가하려고했는데 잘못된 요청 / 잘못된 호스트 이름 오류가 발생했습니다. localhost를 ping했을 때 IPv6가 활성화 되었기 때문에 :: 1로 해결되었으므로 문제를 해결하기 위해 추가 바인딩을 추가해야했습니다.

IIS 사이트 바인딩


4

이것은 내 문제를 해결했습니다 (나쁜 영어에 대해 죄송합니다).

  1. 관리자 권한으로 cmd를 열고 명령을 실행합니다 (대괄호 제외).
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. documents/iisexpress/config/applicationhost.config와 (숨겨진) 폴더에 루트 프로젝트 폴더에 : .vs/config/applicationhost.config당신은 "사이트"태그에 행을 추가 할 필요 :
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. "인터넷 정보 서비스 (iis) 관리자"를 엽니 다
    (찾으려면 : 작업 표시 줄에서 검색에서 "창 기능 켜기 또는 끄기"를 쓰고 결과를 연 다음 "인터넷 정보 서비스"확인란을 선택하고 설치) :

    1. 왼쪽 화면에서 컴퓨터 이름-> 사이트-> 기본 웹 사이트 및
    2. 그런 다음 오른쪽 화면에서 "바인딩"을 클릭하십시오.
    3. 추가 버튼 클릭
    4. 필요한 것을 쓰고 "확인"을 누르십시오.
  4. "고급 보안 기능이있는 Windows 방화벽"을 엽니 다.

    1. 왼쪽 화면에서 "인바운드 규칙"을 누른 다음
    2. 오른쪽 화면에서 "새 규칙 ..."을 누릅니다.
    3. 포트를 확인하고 다음을 누릅니다.
    4. TCP와 포트를 확인하고 다음을 누릅니다.
    5. "연결 허용"을 선택하고 다음을 누릅니다.
    6. 모든 확인란을 선택하고 다음을 누릅니다.
    7. 이름을 쓰고 마침을 누릅니다.
  5. 끝난.


3

이것이 당신의 문제인지 확실하지 않지만 그의 컴퓨터에서 그의 웹 응용 프로그램에 액세스하려고 시도 하고이 문제가있는 사람에게는 다음과 같습니다.

외부 IP 주소가 아닌 127.0.0.1(일명 localhost)에 연결하고 있는지 확인하십시오 .

귀하의 URL은 무언가 같이해야 http://localhost:8181/또는 http://127.0.0.1:8181없습니다 http://YourExternalIPaddress:8181/ .


추가 정보 :
이것이 작동하는 이유는 방화벽이 사용자의 요청을 차단할 수 있기 때문입니다. OS의 방화벽이 될 수 있으며 라우터가 될 수 있습니다.

외부 IP 주소에 연결하면 마치 낯선 사람 (또는 해커) 인 것처럼 인터넷에서 연결됩니다.
그러나 로컬 호스트에 연결할 때 로컬로 직접 연결하고 블록은 분명히 필요하지 않습니다 (& 모두 피함).


나는 localhost를 사용할 때 작동하지만 컴퓨터 로컬 IP 주소를 사용할 때이 문제가 있습니다. IP 주소 를 사용 하지 말라고 구체적으로 말한 이유-이것이 작동하지 않는 이유-이해하고 싶습니다.
코드 고유

1
"해커"가 웹 사이트에 연결하는 데 사용되는 호스트 이름을 변경하는 것은 터무니없는 일입니다.
Arafangion

@Arafangion 어디에서 그것을 바꾸고 무엇을 얻습니까?
MasterMastic

@MasterMastic : 예를 들어, Linux에서 /etc/hosts.conf 파일을 편집하십시오. Windows에는 동등합니다. 또는 더 사소하게,보고 할 호스트 이름을 curl 또는 wget에 알려주십시오. 여기에서 분명히 "호스트 이름"에 의존하여 인터넷의 요청을 차단하므로 해커가 얻는 것은 명백한 "보호"메커니즘을 우회하여 얻는 데 필요한 모든 것입니다. IIS는 여전히 포트에 바인딩 된 것 같습니다. 올바른 수정은 처음에 외부에서 액세스 할 수있는 포트에 바인딩하지 않는 것입니다.
Arafangion

@Arafangion 예,하지만 로컬 리디렉션입니다. 여기서 요점은이 아니라 localhost( 127.0.0.1)를 가리키는 것 입니다. 내가 말하는 것은 외부에서 볼 수있는 IP가 아니라 그것에 연결하는 것입니다. localhost에 의존하지 않고 동의어로만 사용됩니다. 나는 이것을 더 명확하게하기 위해 내 대답을 편집 할 것입니다.
MasterMastic

2

Visual Studio 2005/2008/2010 CMD 도구를 사용할 수 있습니다. 관리자로 실행하고 작성하십시오.

aspnet_regiis -i

마침내 앱을 성공적으로 실행할 수 있습니다.


2

로컬 서버에서 작업하거나 도메인 이름이없는 경우 "호스트 이름 :"필드를 삭제하십시오. 여기에 이미지 설명 입력


1

로컬 호스트 파일 (예 : C : \ Windows \ System32 \ drivers \ etc \ hosts)을 확인하십시오. 제 경우에는 이전에 이것을 사용하여 URL을 개발 상자로 가리키고 잊어 버렸습니다. 그런 다음 동일한 URL을 재사용했을 때 트래픽이 잘못된 서버로 이동했기 때문에 잘못된 요청 (잘못된 호스트 이름)이 계속 발생했습니다.


1

"localhost"를 사용하여 웹 서비스를 호출하려고 할 때이 오류가 발생했습니다. 대신 실제 IP (192.168 ...)를 사용하여 수정했습니다.


우승자. 이이었다 윈도우 서버 2003에 내 문제
DreamTeK

0

msdeploy를 사용하여 응용 프로그램을 새 서버에 복사 한 후 동일한 오류가 발생했습니다. 바인딩이 여전히 이전 서버의 IP 주소를 사용하고 있음이 밝혀졌습니다. 따라서 IIS 바인딩에서 IP 주소를 다시 확인하십시오. (사실 후에는 분명해 보이지만 즉시 확인하지 않았습니다).


0

제공하는 정확한 URL을 다시 확인하십시오. 이 오류는 ASP.NET에 정의 된 경로 접두사를 놓 쳤기 때문에 요청을 라우팅 할 위치를 알지 못했습니다.


0

IIS가 포트를 수신하는지 확인하십시오.

제 경우에는 이것이 문제였습니다. 그래서 내 포트를 8083과 같은 다른 것으로 변경해야했고이 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.