터널링을 통해 로컬 호스트를 인터넷에 노출 (ngrok 사용) : HTTP 오류 400 : 잘못된 요청; 잘못된 호스트 이름


210

이전 버전의 질문에는 다음과 같은 것이 있습니다 : localhost 대신 ip 주소로 웹 사이트를 탐색 하십시오. 지금까지 수행 한 거의 개요가 있습니다 ... 로컬 IP가 작동합니다. 그런 다음 ngrok을 찾았으며 분명히 IP를 통해 연결할 필요가 없습니다.


내가하려는 것은 localhost에서 실행중인 웹 사이트를 인터넷에 노출시키는 것입니다. 나는 이것을 할 도구를 발견했다 : ngrok.

Visual Studio에서 웹 사이트를 실행하면 웹 사이트가 localhost / port #에서 시작됩니다. 명령 행에서 "ngrok http port #"명령을 실행합니다. 모든 것이 잘 시작되는 것 같습니다. 몇 가지 URL을 생성하고 ngrok 검사 URL (localhost : 4040)이 작동합니다.

유일한 문제는 생성 된 URL로 갈 때 HTTP 오류 400이 발생한다는 것입니다. 잘못된 요청 잘못된 호스트 이름입니다. 이것은 "ngrok http wrongport #"를 실행할 때와는 다른 오류입니다.이 오류는 호스트에서 찾을 수없는 오류입니다. 따라서 뭔가 좋은 일이 일어나고 있다고 생각합니다. 나는 단지 무엇을 말할 수 없다 ...

터널링 서비스를 통해 내 사이트를 인터넷에 노출시키는 과정에서 누락 된 단계가 있습니까? 있으면 ngrok 설명서에서 찾을 수 없습니다.

답변:


564

ngrok에서이 문제를 해결하십시오. 말로 표현할 수없는 말로, 일부 응용 프로그램은 예상과 다른 호스트 헤더를 볼 때 화를냅니다.

다음 명령을 실행하면 문제가 해결됩니다.

ngrok http [port] -host-header="localhost:[port]"

3
감사. 이전에 여기에 자세히 설명 된 Devin Rader의 지침을 따랐지만 이제는이 방법이 더 쉬워졌습니다. twilio.com/blog/2014/03/…
sobelito

이 솔루션은 applicationHost.config (vs2015 / iisexpress)에 다른 바인딩을 추가하는 데 문제가있는 경우에도 작동합니다. 이 답변을 사용하기 위해 하나만 추가 할 필요는 없습니다. 마지막으로, 매번 주소를 변경하지 않기 위해 사용자 정의 도메인에 대한 비용을 지불 한 경우 -subdomain = mysubdomain을 위의 답변에 추가하십시오.
trevorc

4
이것을 충분히 공표 할 수 없습니다! IISExpress 바인딩 및 네트워크 설정을 해킹하는 모든 복잡하고 버그가 많은 지침에 대해서는 버터를 통하는 핫 나이프와 같이 잘립니다.
Neil Laslett

19
local이 http 대신 https에있을 때 위의 변형이 작동합니다.ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh

1
와우, 나는 이것을 거의 2 시간 낭비했다. 내 유일한 문제는 -host-header에 https를 추가하는 것이 었습니다. 이와 같이 : ngrok http https://localhost:44392 -host-header="https://localhost:44392" -host-header 매개 변수에서 https : //를 제거하면 문제가 해결되었습니다. 감사합니다
Dave

48

다음 명령은 문제를 해결합니다

ngrok http -host-header=localhost 8080

2
ASP.NET Core를 사용하는 경우 app.UseHttpsRedirection()Startup 클래스에서 307 Temporary Redirect를 피하기 위해 주석 처리해야합니다 .
Mark G

39

이것은 나를 위해 작동하지 않았습니다. 다음을 수행 할 수 있습니다.

IIS Express의 경우

VS 2015에서 : .vs\config\applicationhost.config프로젝트 의 폴더로 이동

VS 2013 및 이전 버전 : %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

다음과 같은 바인딩을 찾으십시오.

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

나를 위해 포트 5219에서 실행되는 프로젝트였습니다

로 변경

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

IIS Express는 이제 해당 포트에서 들어오는 모든 연결을 수락합니다.

단점 : IIS Express를 관리자 권한으로 실행해야합니다.

또는 Ngrok에서 호스트 헤더를 다시 작성할 수 있습니다.

ngrok.exe http -host-header=rewrite localhost:5219

이것은 ngrok에서 헤더를 다시 쓰는 올바른 방법입니다. 다른 답변은 효과가 없었습니다. 이미 IIS를 호스트 이름으로 설정했지만 -host-header = "localhost : 8892"를 사용할 때 ngrok에서 "hostname invalid"를 반환했지만이 다시 쓰기 버전은 즉시 작동했습니다.
Tyeth


0

가장 간단한 것은 iisexpress-proxy + ngrok를 사용하는 것입니다 .

먼저 전 iisexpress-proxy세계적으로 npm으로 설치 합니다.

npm install -g iisexpress-proxy

그런 다음 로컬 호스트를 프록시로 사용합니다. 예를 들어 내 사이트가에서 실행되고 있다고 가정합니다 3003.

iisexpress-proxy 3003 to 1234512345프록시하려는 새 http 포트는 어디에 있습니까 ?

그런 다음 ngrok를 실행할 수 있습니다.

./ngrok.exe http 12345

그냥 작동합니다! 😃

그러나 나는 그것이 작동한다고 생각합니다 http. 지금은 https테스트에 사용하지 않지만 작동하더라도 일반적으로 항상 많은 작업입니다.


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