IISExpress는 원격 컴퓨터에서 503 오류를 반환합니다


183

로컬 네트워크의 다른 컴퓨터 / 장치를 사용하여 로컬 IISExpress 인스턴스에서 실행중인 웹 사이트를 테스트하려고합니다. Win7 Pro를 실행 중입니다.

로컬 네트워크 세그먼트의 다른 컴퓨터에서 내 컴퓨터를 탐색하려고하면 400 오류가 발생합니다. 호스트 이름이 잘못되었습니다.

다음과 같이 관리자 권한 명령 프롬프트에서 명령을 사용하여 ACL에 대한 원격 액세스 권한을 부여해야한다는 것을 이해합니다.

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

이제 503 서비스를 사용할 수 없습니다 오류가 발생합니다.

Windows 방화벽이 현재 종료되었으며 주소로 로컬 IISExpress 인스턴스를 찾아 볼 수 있습니다. http://localhost:50333

이 구성 퍼즐의 마지막 부분은 무엇입니까?


1
당신이 검색하면 어떻게됩니까 http://mymachinename:50333/ 에서 당신의 컴퓨터?
대령 패닉

1
문제가 해결되었습니다. 수락 된 답변보기 vikomall
Jeff Fritz

1
여기에 대한 더 자세한 논의 : hanselman.com/blog/…
Chris Moschini

3
이 문제를 해결하기 위해 무료 VS 확장 '컨베이어'를 설치할 수 있습니다. marketplace.visualstudio.com/…
Jim W는 Monica

답변:


270

applicationhost.config 파일에 바인딩 정보 항목이없는 것 같습니다.

  1. applicationhost.config 파일을여십시오. 가능한 위치는 다음과 같습니다.

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • 실패하면 출력을 검사하여 iisexpress.exe확인하십시오.
  2. WebSite 항목을 찾아 시스템 이름으로 다음 바인딩을 추가 하십시오.

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. IIS Express를 다시 시작하십시오.


9
신경 쓰지 마. Visual Studio에서 항목에 대한 중복 구성 항목을 만들었습니다. 나는 그것을 제거하고 효과가있었습니다.
nuzzolilo

3
IIS Express는 항상 해당 경로에서 구성 파일을 사용하지는 않습니다. iisexpress.exe사용중인 구성 파일을 보려면 출력을 주의해서 읽으십시오 .
대령 패닉

5
요점 3, IIS Express를 다시 시작하십시오! 시스템 트레이에서 아이콘을 찾아서 강제로 다시 시작하도록 중지하십시오. 더 우아한 방법이 있는지 확실하지 않습니다. 그러나 이것은 나를 위해 일했습니다. 감사!
상원 의원

9
모든 호스트 이름 / ipaddress 조합을 추가하기에 너무 게으른 경우 "your-machine-name"대신 *를 사용하십시오
StarQuake

4
힌트 : IISExpress의 systray 아이콘을 마우스 오른쪽 버튼으로 클릭하면 "모든 응용 프로그램 표시"를 선택하면 현재 로컬로 실행중인 모든 응용 프로그램을 보여주는 대화 상자가 열립니다. 원하는 응용 프로그램을 마우스 오른쪽 버튼으로 클릭하면 (왼쪽 클릭하지 않거나 브라우저가 열림) 아래에 "경로"및 "구성"이 표시됩니다. "구성"을 마우스 왼쪽 버튼으로 클릭하면 위에서 설명한대로 바인딩을 추가 / 편집해야하는 관련 Applicationhost.config 파일이 열립니다. 이는 현재 구성을 쉽게 찾을 수있는 방법입니다.
매트

31

나를 위해 일한 것은 단 하나였습니다.

사용 *:portnumber:*은 좋지 않았다. 예, 그렇게하고 Windows 방화벽이 열려 있는지 확인한 후 포트에 연결할 수 있지만 여전히 "503"오류가 발생합니다.

로컬에서 몇 가지를 테스트 한 결과 http : // localhost 만 작동 한다는 것을 알았습니다 . 실제 IP 주소 (127.0.0.1이 아닌 192.168.1.50)를 사용하면 로컬 컴퓨터에서도 여전히 503이 반환됩니다. 바인딩에 실제 호스트 이름을 사용해 보았지만 IIS Express는 시작을 거부했습니다. 실제로 호스트 이름을 확인하는 방법과 관련이있을 수 있습니다. 나는 더 이상 탐구하지 않았다.

마지막 으로이 구성을 사용했습니다.

<binding protocol="http" bindingInformation="*:53351:localhost" />
<binding protocol="http" bindingInformation="192.168.1.50:53351:*" />

그런 식으로을 사용하여 원격 컴퓨터에서 연결할 수있었습니다 http://192.168.1.50:53351.


이 정확한 오류가 발생했지만 현재 IP를 변경할 수 있기 때문에 현재 IP를 구성에 하드 코딩하고 싶지 않았습니다. 와일드 카드가 IP 및 호스트 이름 부분에서 작동한다는 것을 알았습니다. <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> 편집 : 실제로 SO 마크 다운을 이해하려고 시도했지만 종료했습니다 :).
Brian Barker

19

이러한 전체 주제에 대해 3 시간 이상을 낭비한 후 설정을 공유하기로 결정했습니다. 내 구성은 Windows 8의 웹 업데이트 4에 대한 Visual Express 2012입니다. 이것은 연구 (최소 8 년) 이후 MS VS로 처음 돌아 왔으며 이제는 Linux 규칙이 확실합니다. django에서 이런 종류의 설정은 문서 검색에 10 분이 걸렸습니다.

  1. 테스트를 위해 방화벽을 끄십시오

    netsh advfirewall set allprofiles state off
    
  2. 내 경우 로컬 주소는 localIP = 192.168.1.102입니다 (링크에는 숫자가 아닌 도메인을 포함 할 수 없으므로 mylocaldomain.com 대신 아래를 사용하십시오. 스택 오버 플로우 정책 참조). Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. ISS Express 시작 서비스에 대한 자동 실행 추가

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. http 서버에 이상한 규칙을 추가하십시오 (필요한지 여전히 모르겠습니다)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. VS IDE가 아닌 IISExpress를 수동으로 실행

  6. ISSExpress가 바인딩을 등록하고 있음을 알 수 있습니다
  7. 작동하면 브라우저를 실행 http://mylocaldomain.com:53351 하고 방화벽 규칙을 추가 할 수 있습니다
  8. 방화벽 규칙 추가

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

로컬 네트워크 사용 localsubnet에 액세스하려면 외부에서 서버에 액세스하려면 remoteip을 any로 설정하십시오.

  1. 방화벽 시작

    netsh advfirewall set allprofiles state on
    
  2. 모든 것이 로컬 및 공용 IP에서 작동하는지 다시 확인하십시오.

행운을 빌어 요

라팔


3
이로 인해 VS2013을 관리자로 실행하지 않고 IIS Express를 VS2013이있는 Win8에서 더 이상 실행하지 못했습니다. 이제 netsh 명령의 결과로 IIS Express가 외부 트래픽을 열려고 시도하기 때문입니다. 또한 실제로 해당 트래픽을 처리 할 수 ​​없었습니다. 이 답변에서 netsh 명령으로 인한 문제를 되돌리려면 관리자 권한으로 실행중인 명령 프롬프트에서 다음을 실행 netsh http delete urlacl url=http://*:55416/하십시오 . (포트를 포트로 교체)
Chris Moschini

fwiw-4 단계가 필요하지 않습니다 (@Rafal이 확실하지 않은 netsh 호출이 필요합니다).하지만 2 단계에서 "localhost"바인딩이 필요하지 않지만 솔루션에서 VS2013 프로젝트를 실행하려면 앞 "localhost"바인딩이 남아있을 때 end가 훨씬 빠르게 로드됩니다 .
lukkea

위의 지침을 따르면 여전히 503을 사용하는 것으로 나타났습니다 localhost. 게스트 (Windows) 컴퓨터 이름이의 바인딩 applicationhost.config에 있어야하고 호스트 (Mac)에서 게스트 컴퓨터 이름이에 매핑되어야 한다는 것을 알았 127.0.0.1습니다 /etc/hosts. 그런 다음에야 호스트의 게스트 시스템에 대한 요청이 성공했습니다.
Matt

5 단계에 한 가지 추가. iisexpress.exe / siteid : id를 사용하십시오. 여기서 id는 <site id = "id"> 설정에서 사이트의 id 속성 값입니다. 그렇지 않으면 첫 번째 사이트가 시작됩니다.
Mudit Jain

9

문제는 잘못된 urlacl 매핑과 관련이 있음을 발견했습니다. 이것을 알아 내려면 :

netsh http show urlacl 

http://+:80/바인딩 할 포트 와 같은 것을 찾으십시오 .

그런 다음 사용

netsh http delete url=<the url from the list>

이것은 나를 위해 문제를 해결했습니다.


4
netsh http delete urlacl url = <목록의 URL>이어야합니다. 이것은 저에게 감사했습니다!
sergiogx

1
이에 대한 내용은 msdn 블로그 에서 자세히 설명합니다 . 이것은 궁극적으로 내 문제였습니다.
Kevin Scharnhorst 2016 년

3
감사합니다, 정확한 구문은netsh http delete urlacl <yoururl>
요엘 halb은

7

아무것도 나를 위해 일하지 않았다. 마침내 나는 iisexpress-proxy를 찾았다.

내 대답을 참조하십시오 https://stackoverflow.com/a/33623399/631527

또 다른 해결책은 ngrok


놀랄 만한! 다른 솔루션을 모두 시도했지만 작동하지 않았습니다. "잘못된 요청"또는 "서비스를 사용할 수 없습니다". 너무 복잡한. 노드 모듈을 설치하고 실행하면 즉시 작동합니다!
TetraDev

공장! 거룩한! 감사합니다!
Ayson Baxter

ngrok도 확인하십시오
툴킷

1
그것은 ngrok와 함께 매력처럼 작동합니다! 로컬 호스트에서 iis-proxy로 먼저 라우팅 한 다음 프록시에서 ngrok로 라우팅 해야하는 것은 이상하지만, 효과가있었습니다!. 예를 들어, 포트에 iisexpress가 3028있습니다. 나는 도망 iisexpress-proxy 3028 to 12345다음과 ./ngrok.exe http 12345. 😅
Reuel Ribeiro

@TetraDev, "잘못된 요청"또는 "서비스를 사용할 수 없음"은 ngrok에서 localhost를 액세스 할 때 수신 된 호스트 헤더가 여기
Dani Torres

3

도움이 된 것은 'IISExpress'아이콘, '모든 응용 프로그램 표시'를 마우스 오른쪽 버튼으로 클릭하는 것이 었습니다. 그런 다음 웹 사이트를 선택하고 사용하는 aplicationhost.config를 보았으며 수정이 완벽했습니다.

IISExpress 구성


1

문제는 솔루션 대신 웹 폴더에서 applicationhost.config 파일을 업데이트하는 것입니다. 솔루션 구성 파일은 변경할 파일입니다.


1

@vikomall의 해결책 후에 관리자로 VS를 시작하는 것을 잊지 마십시오. 이것은 나를 위해 수정합니다.


0

Anthony Rizzolo의 답변과 관련하여 Windows 8.1에서는 다음과 같이 입력해야했습니다.

netsh http delete urlacl url=<the url from the list>

예를 들면 다음과 같습니다.

netsh http delete urlacl url=http://+:8689/

0

위의 답변 중 어느 것도 나를 위해 일하지 않았습니다.

같은 서비스에 대해 netsh에 두 개의 항목이 있습니다.

netsh http show urlacl

여기에 이미지 설명을 입력하십시오

하나는 강력한 와일드 카드를 사용하고 다른 하나는 약한 와일드 카드를 사용합니다.

약한 와일드 카드가있는 것을 제거하면 작업이 완료되었습니다.

netsh와 관련하여 강력하고 약한 와일드 카드에 대한 추가 정보

UrlPrefix의 호스트 요소가 단일 더하기 부호 (+)로 구성되면 UrlPrefix는 해당 구성표, 포트 및 relativeURI 요소와 관련하여 가능한 모든 호스트 이름과 일치하며 강력한 와일드 카드 범주에 속합니다.

별표 (*)가 호스트 요소로 표시되면 UrlPrefix는 약한 와일드 카드 범주에 속합니다. 이 종류의 UrlPrefix는 강력한 와일드 카드, 명시 적 또는 IP 바인딩 된 약한 와일드 카드 UrlPrefix와 아직 일치하지 않은 지정된 체계, 포트 및 relativeURI와 관련된 모든 호스트 이름과 일치합니다. 이 호스트 사양은 경우에 따라 기본 catch-all로 사용되거나 많은 UrlPrefix를 사용하지 않고도 URL 네임 스페이스의 큰 섹션을 지정하는 데 사용할 수 있습니다.

https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

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