Expondo o host local à Internet via tunelamento (usando o ngrok): Erro HTTP 400: solicitação incorreta; Hostname inválido


210

Nas versões anteriores da pergunta, existe o seguinte: Navegue no site com endereço IP em vez de localhost , que descreve praticamente o que eu fiz até agora ... Eu tenho o IP local funcionando. Então encontrei o ngrok e, aparentemente, não preciso me conectar via IP.


O que estou tentando fazer é expor meu site em execução no host local à Internet. Eu encontrei uma ferramenta que fará isso: ngrok.

Executando o site no visual studio, o site inicia no localhost / port #. Eu executo o comando "ngrok http port #" na linha de comando. Tudo parece começar bem. Eu gero alguns URLs e o URL de inspeção ngrok (localhost: 4040) funciona.

O único problema é que, quando vou para os URLs gerados, recebo um erro HTTP 400: solicitação inválida nome do host inválido. Este é um erro diferente do que quando executo o "ngrok http wrongport #", que é um erro de host não encontrado ... por isso acho que algo de bom está acontecendo. Eu simplesmente não posso dizer o que ...

Existe uma etapa que estou perdendo para expor meu site à Internet por meio do serviço de encapsulamento? Se houver, não consigo encontrá-lo na documentação do ngrok.

Respostas:


564

Solucione esse problema com o ngrok. Nas palavras de inconshrevable, alguns aplicativos ficam irritados quando vêem um cabeçalho de host diferente do esperado.

A execução do seguinte comando deve corrigir o problema:

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

3
Obrigado. Anteriormente, segui as instruções de Devin Rader detalhadas aqui, mas isso agora facilita esse caminho. twilio.com/blog/2014/03/…
sobelito 6/12/2015

Esta solução também funciona se você estiver com problemas para adicionar outra ligação ao applicationHost.config (vs2015 / iisexpress). Você não precisa adicionar um, apenas use esta resposta. Por fim, se você pagou por um domínio personalizado para evitar alterar o endereço toda vez, basta adicionar -subdomain = mysubdomain na resposta acima.
trevorc

4
Não é possível aprovar isso o suficiente! Para todas as instruções complexas e com erros disponíveis para hackear as ligações e configurações de rede do IISExpress, isso corta tudo como uma faca quente na manteiga.
Neil Laslett #

19
Quando local está em https, em vez de http, essa variação dos ngrok http https://localhost:44362 -host-header="localhost:44362"
itens

1
uau, eu perdi quase 2 horas descobrir isso. meu único problema era que eu estava adicionando https no -host-header. assim: ngrok http https://localhost:44392 -host-header="https://localhost:44392" remover https: // do parâmetro -host-header resolveu meu problema. Obrigado
Dave

48

O comando a seguir irá corrigir o problema

ngrok http -host-header=localhost 8080

2
Se você estiver usando o ASP.NET Core, também deverá comentar app.UseHttpsRedirection()na sua classe Startup para evitar um redirecionamento temporário 307.
Mark G

39

Isso não funcionou para mim. você pode fazer o seguinte:

Para o IIS Express

No VS 2015: Vá para a .vs\config\applicationhost.configpasta no seu projeto

No VS 2013 e versões anteriores: Vá para %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Encontre a ligação que diz:

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

Para mim, era um projeto em execução na porta 5219

mude para

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

O IIS Express agora aceita todas as conexões de entrada nessa porta.

Desvantagem: você precisa executar o IIS Express como administrador.

ou você pode reescrever o cabeçalho do host no Ngrok:

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

Esta é a maneira correta de reescrever o cabeçalho no ngrok. Nenhuma das outras respostas funcionou. O IIS já está definido como qualquer nome de host, mas o ngrok retornou "hostname invalid" ao usar -host-header = "localhost: 8892", mas essa versão de reescrita funcionou imediatamente.
Tyeth 11/03

6

Para httpsisso funciona:

ngrok http https://localhost:<PORT> -host-header="localhost:<PORT>"


0

A coisa mais simples para mim foi usar o iisexpress-proxy + ngrok.

Primeiro eu instalo iisexpress-proxyglobalmente com npm

npm install -g iisexpress-proxy

Então eu proxy meu localhost com ele. Digamos, por exemplo, que meu site esteja sendo executado 3003.

iisexpress-proxy 3003 to 12345onde 12345está a nova porta http à qual eu quero fazer proxy.

Então eu posso rodar o ngrok nele.

./ngrok.exe http 12345

Isso simplesmente funciona! 😃

Mas acho que funciona apenas com http. No momento, eu não httpscostumo testar, mas mesmo que funcione, geralmente é muito trabalhoso como sempre.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.