Exposition de l'hôte local à Internet via le tunneling (en utilisant ngrok): Erreur HTTP 400: mauvaise demande; Nom d'hôte invalide

210

À partir des versions précédentes de la question, il y a ceci: Parcourir le site Web avec une adresse IP plutôt que localhost , qui décrit à peu près ce que j'ai fait jusqu'à présent ... J'ai l'IP locale qui fonctionne. Ensuite, j'ai trouvé ngrok, et apparemment, je n'ai pas besoin de me connecter via IP.


Ce que j'essaie de faire, c'est d'exposer mon site Web fonctionnant sur localhost à Internet. J'ai trouvé un outil qui fera cela: ngrok.

En exécutant le site Web dans Visual Studio, le site Web démarre sur localhost / port #. J'exécute la commande "ngrok http port #" dans la ligne de commande. Tout semble bien démarrer. Je génère quelques URL et l'url d'inspection ngrok (localhost: 4040) fonctionne.

Le seul problème est que lorsque j'accède aux URL générées, j'obtiens une erreur HTTP 400: mauvaise demande de nom d'hôte non valide. C'est une erreur différente que lorsque j'exécute "ngrok http falseport #", qui est une erreur d'hôte introuvable ... donc je pense qu'il se passe quelque chose de bien. Je ne peux pas dire quoi ...

Existe-t-il une étape qui me manque pour exposer mon site à Internet via le service de tunneling? S'il y en a un, je ne le trouve pas dans la documentation de ngrok.

Christophe
la source

Réponses:

564

Résolvez ce problème avec ngrok. Selon les termes incontrôlables, certaines applications se mettent en colère lorsqu'elles voient un en-tête d'hôte différent de celui attendu.

L'exécution de la commande suivante devrait résoudre le problème:

ngrok http [port] -host-header="localhost:[port]"
Christophe
la source
3
Merci. J'ai précédemment suivi les instructions de Devin Rader détaillées ici, mais cela facilite désormais les choses. twilio.com/blog/2014/03/…
sobelito
Cette solution fonctionne également si vous rencontrez des problèmes pour ajouter une autre liaison à applicationHost.config (vs2015 / iisexpress). Vous n'avez pas besoin d'en ajouter un, utilisez simplement cette réponse. Enfin, si vous avez payé pour un domaine personnalisé pour éviter de changer l'adresse à chaque fois, ajoutez -subdomain = mysubdomain à la réponse ci-dessus.
trevorc
4
Je ne peux pas voter assez pour cela! Pour toutes les instructions complexes et bogues là-bas pour pirater vos liaisons IISExpress et vos paramètres réseau, cela coupe tout comme un couteau chaud dans du beurre.
Neil Laslett
19
Lorsque le local est sur https au lieu de http, cette variation des travaux ci-dessus fonctionne:ngrok http https://localhost:44362 -host-header="localhost:44362"
Jsinh
1
wow, j'ai perdu près de 2 heures à comprendre celui-ci. mon seul problème était que j'ajoutais https dans -host-header. comme ceci: la ngrok http https://localhost:44392 -host-header="https://localhost:44392" suppression de https: // du paramètre -host-header a résolu mon problème. Merci
Dave
48

La commande suivante résoudra le problème

ngrok http -host-header=localhost 8080
Sathish
la source
2
Si vous utilisez ASP.NET Core, vous devez également commenter app.UseHttpsRedirection()dans votre classe de démarrage pour éviter une redirection temporaire 307.
Mark G
39

Ça n'a pas marché pour moi. vous pouvez faire ce qui suit:

Pour IIS Express

Dans VS 2015: accédez au .vs\config\applicationhost.configdossier de votre projet

Dans VS 2013 et versions antérieures: accédez à %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

Trouvez la reliure qui dit:

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

Pour moi, c'était un projet fonctionnant sur le port 5219

le changer en

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

IIS Express accepte désormais toutes les connexions entrantes sur ce port.

Inconvénient: vous devez exécuter IIS Express en tant qu'administrateur.

ou vous pouvez réécrire l'en-tête de l'hôte dans Ngrok:

ngrok.exe http -host-header=rewrite localhost:5219
Stefanvds
la source
C'est la bonne façon de réécrire l'en-tête dans ngrok. Aucune des autres réponses n'a fonctionné. IIS a déjà été défini sur n'importe quel nom d'hôte, mais ngrok a renvoyé "nom d'hôte non valide" lors de l'utilisation de -host-header = "localhost: 8892", mais cette version de réécriture a fonctionné immédiatement.
Tyeth
6

Pour httpscela fonctionne:

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

Joel Wiklund
la source
0

La chose la plus simple pour moi était d'utiliser iisexpress-proxy + ngrok.

D'abord, j'installe iisexpress-proxyglobalement avec npm

npm install -g iisexpress-proxy

Ensuite, je proxy mon hôte local avec elle. Disons par exemple que mon site fonctionne 3003.

iisexpress-proxy 3003 to 1234512345 trouve le nouveau port http sur je veux utiliser le proxy.

Ensuite, je peux exécuter ngrok dessus.

./ngrok.exe http 12345

Ça marche! 😃

Mais je pense que cela ne fonctionne qu'avec http. Pour le moment, je ne l'utilise pas httpspour tester, mais même si cela fonctionne, c'est généralement beaucoup de travail, comme toujours.

Reuel Ribeiro
la source
-7

Pas.

  1. Exécutez la commande sur votre console à partir du répertoire ngrok.exe. Port http ngrok, c'est-à-dire ngrok http 80 https://www.screencast.com/t/oyuEPlR6Z Set

  2. URL Ngrok vers votre application.

Il créera un tunnel vers votre application.

Merci .

Ravinder Rana
la source