J'ai un site web (MVC3) qui, pour le développement, est hébergé dans IIS Express. (Je suis tombé sur un bug de Cassini Devserver et j'ai dû faire une mise à jour...) Maintenant, je me demande s'il est possible de laisser d'autres machines sur mon réseau local (derrière un routeur) voir le site comme étant hébergé sur ma machine ? (par exemple, si j'écris http://my.local.ip:port dans un navigateur sur le même réseau local que moi, la page se chargera-t-elle ?)
Réponses
Trop de publicités?Par défaut, IIS Express ne répond qu'aux demandes de l'hôte local. Pour servir les requêtes externes, modifiez applicationhost.config
(situé dans %userprofile%\documents\iisexpress\config\
) et changer localhost
a '*'
ou le nom de votre machine. (rappelez-vous que pour la liaison non-localhost, vous devez être exécuté en tant qu'administrateur ou définir l'acl de l'URL en tant qu'administrateur et ensuite exécuter iisexpress en tant que non-administrateur).
Alternativement, vous pouvez utiliser quelque chose comme PortMapper d'AnalogX pour agir comme un petit proxy de bouclage vers tunnel des ports privés liés au localhost vers des ports ouverts publiquement.
Par exemple,
- IISExpress est localement lié à localhost:8080
- PortMapper port 9090 est configuré pour relayer le trafic vers localhost:8080
En effet, toute connexion sur le port 9090 (ouvert par PortMapper ) sera acheminé vers localhost:8080 ; ce qui permet de contourner toutes les absurdités de netsh qui peuvent parfois être pénibles.
Voici ma configuration :
L'avantage de cette méthode est qu'elle n'expose pas de façon permanente un système ouvert IISExpress sur la boîte de dev locale.
Dans de rares cas, il m'arrive de vouloir ouvrir le port publiquement pour des réunions, mais la plupart du temps, le port doit être fermé et n'être accessible que par localhost. Modifier les règles du pare-feu sur le routeur à chaque fois est un casse-tête. Voici comment j'ai configuré les choses :
- Le pare-feu de mon routeur transmet 9090 port pour PortMapper
- PortMapper continue seulement à transmettre le trafic par proxy à IISExpress (écoute sur 8080 ) seulement si PortMapper est en cours.
Nota
Assurez-vous de fermer tous les PortMapper Windows pour que les changements prennent effet.
Note 2
Comme d'autres l'ont décrit, il se peut que vous deviez ajuster les paramètres de l'appareil. IISExpress pour votre application dans
My Documents\IISExpress\applicationhost.config
project\.vs\config\applicationhost.config
à quelque chose comme :
<bindings>
<!-- bindingInformaiton format:
IPToBindTo:Port:DNSHostName -->
<!--OLD:
<binding protocol="http" bindingInformation="*:8080:localhost"/>-->
<!--Change '*' to 127.0.0.1 and remove 'localhost' right of the port number
to avoid invalid DNS hostname errors -->
<binding protocol="http" bindingInformation="127.0.0.1:8080:" />
</bindings>
Je pense qu'il y a trois étapes à franchir pour que cela soit un succès :
1) Ajoutez une entrée dns ou des entrées hosts pour que les autres machines puissent chercher l'adresse ip de la machine dev.
2) Ajoutez une liaison à applicationhost.config dans %userprofile/documents/IISExpress/Config comme ceci
<site name="MobileDashboard(2)" id="7">
<bindings>
...
<binding protocol="http" bindingInformation="*:yourport#:yourmachinendnsname" />
</bindings>
</site>
3) Exécutez la commande trouvée aquí pour autoriser les demandes entrantes :
netsh http add urlacl url=http://yourmachinendnsname:yourport#/ user=everyone
La réponse dans ce fil de discussion est excellente, elle ne tient pas compte des exceptions du pare-feu.
netsh advfirewall firewall add rule name="IIS Express (non-SSL)" action=allow protocol=TCP dir=in localport=8000
netsh advfirewall firewall add rule name="IIS Express (SSL)" action=allow protocol=TCP dir=in localport=44300
Tiré des commentaires @ http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx
L'astuce de la règle personnalisée dans Fiddler de http://blogs.microsoft.co.il/blogs/shair/archive/2008/12/15/how-to-use-fiddler-on-localhost.aspx a fini par fonctionner pour moi.