web-dev-qa-db-fra.com

Utilisation de domaines personnalisés avec IIS Express

J'utilise généralement des domaines personnalisés avec mon serveur de développement localhost. Quelque chose dans le genre de:

dev.example.com
dev.api.example.com

Cela m'a fourni une tonne de flexibilité lorsque je travaille avec des API externes telles que Facebook. Cela a très bien fonctionné dans le passé avec Visual Studio Development Server, car tout ce que j'avais à faire, c'était d'ajouter un CNAME à ces enregistrements DNS pointant vers 127.0.0.1.

Cependant, je n'ai pas réussi à faire en sorte que cela fonctionne avec IIS Express. Tout ce que j'ai essayé semble avoir échoué. J'ai même ajouté la configuration XML correcte au fichier applicationHost.config pour IIS Express, mais il ne semble pas reconnaître les entrées aussi valides qu'une installation réelle de IIS. aurait.

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

Chaque fois que j'entre cette ligne et essaie de demander http://dev.example.com:1288 je reçois le message suivant:

Requête incorrecte - Nom d'hôte non valide

Est-ce que quelqu'un sait s'il me manque quelque chose d'évident? Ou l'équipe IIS Express manquait-elle vraiment de prévoyance pour voir ce type d'utilisation?

292
Nick Berardi

C'est ce qui a fonctionné pour moi (mis à jour pour VS 2013, voir l'historique des révisions pour 2010, pour VS 2015 voir ceci: https: // stackoverflow.com/a/32744234/218971 ):

  1. Cliquez avec le bouton droit de la souris sur votre projet d'application Web ▶ PropertiesWeb, puis configurez la section Servers comme suit:
    • Sélectionner IIS Express ▼ du bas vers le bas
    • URL du projet: http://localhost
    • Remplacer l'URL racine de l'application: http://dev.example.com
    • Cliquez sur Create Virtual Directory (Si vous obtenez une erreur ici, vous devrez peut-être désactiver IIS 5/6/7/8, remplacez Default Site par IIS par autre chose que le port :80, assurez-vous que Skype n'utilise pas le port 8 , etc.)
  2. Facultatif: réglez le Start URL sur http://dev.example.com
  3. Ouvrez %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP, Vista et 7) et modifiez la définition du site dans le bloc <sites> config de manière à respecter les règles suivantes:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
    
  4. Si vous exécutez MVC: assurez-vous que applicationPool est défini sur l'une des options "Intégrées" (comme "Clr2IntegratedAppPool").

  5. Ouvrez votre fichier hosts) et ajoutez la ligne 127.0.0.1 dev.example.com.
  6. ► Start ton application!

Quelques bons conseils des commentaires:

  • Vous devrez peut-être exécuter Visual Studio en tant qu'administrateur.
  • Si vous voulez que d'autres développeurs voient votre IIS exécuter netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • Si vous souhaitez que le site résolve tous les hôtes, définissez bindingInformation="*:80:". Utilisez le port de votre choix, 80 est tout simplement pratique.
355
David Murdoch

Pour Visual Studio 2015 , les étapes dans les réponses ci-dessus s'appliquent, mais le fichier applicationhost.config se trouve à un nouvel emplacement. Dans votre dossier "solution", suivez le chemin. Cela crée de la confusion si vous effectuez une mise à niveau et si vous avez deux versions de applicationhost.config sur votre machine.

\.vs\config

Dans ce dossier, vous verrez votre fichier applicationhost.config .

Sinon, vous pouvez simplement rechercher le fichier .config dans votre dossier de solutions et le trouver ainsi.

J'ai personnellement utilisé la configuration suivante:

enter image description here

Avec ce qui suit dans mon fichier hosts:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

Et ce qui suit dans mon fichier applicationhost.config:

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

N'oubliez pas de lancer votre instance de visual studio 2015 en tant qu'administrateur! Si vous ne voulez pas le faire à chaque fois que je recommande ceci:

Comment exécuter Visual Studio en tant qu'administrateur par défaut

J'espère que cela aidera quelqu'un. J'ai eu des problèmes lors de la mise à niveau vers Visual Studio 2015 et j'ai réalisé qu'aucune de mes configurations n'était reportée.

144
njfife

Lors de l'utilisation de Visual Studio 2012 avec IIS Express, la modification d'une liaison existante ne fonctionne pas de manière permanente. (Cela peut fonctionner jusqu'à ce que vous fermez VS, mais après cela, les choses se gâchent vraiment.)

La clé garde la liaison localehost existante et ajoute une nouvelle liaison après celle-ci.

À moins que vous ne fonctionniez en tant qu'administrateur, vous devrez également exécuter netsh add urlacl (pour vous autoriser à exécuter un site non hôte local en tant qu'utilisateur standard).

Si vous souhaitez autoriser un nom d'hôte, le processus complet est le suivant:

  1. Créez votre application Web et déterminez le port utilisé (voir Propriétés du projet, onglet Web, URL du projet).
  2. À partir d'une invite de l'administrateur, exécutez les commandes suivantes (en remplaçant le numéro de port par le numéro de port indiqué au numéro 1):

    _netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    _

Vous pouvez également utiliser votre nom d'utilisateur (DOMAIN\USER) au lieu de tout le monde pour une sécurité accrue.

  1. Ouvrez applicationhost.config (généralement sous Mes documents\IIS Express\config) et recherchez l'élément avec votre numéro de port.
  2. Ajoutez une liaison supplémentaire avec le nom d'hôte souhaité (dans ce cas, *). Par exemple:

    _<site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>
    _

Notez que si vous voulez ouvrir tous les noms d'hôte (*), vous aurez besoin de deux commandes netsh (une pour * et une pour localhost). Si vous souhaitez uniquement ouvrir un nom d'hôte spécifique, vous n'avez pas strictement besoin de la deuxième commande netsh (localhost); seul celui avec votre nom d'hôte spécifique est suffisant.

44
dmatson

Le nom d'hôte non valide indique que le site que vous avez configuré dans le fichier de configuration IIS Express est (très probablement) en cours d'exécution. IIS Express n'a pas de modèle de processus comme IIS.


Pour que votre site s'exécute, il doit être démarré explicitement (soit en ouvrant et en accédant à partir de webmatrix, soit en utilisant la ligne de commande appelant iisexpress.exe (à partir de son répertoire d'installation) avec le paramètre/site.


En général, les étapes permettant d'autoriser l'utilisation de noms DNS qualifiés complets pour l'accès local sont les suivantes: utilisons votre exemple de nom DNS dev.example.com

  1. editez le fichier% windows%\system32\drivers\etc\hosts pour mapper dev.example.com à 127.0.0.1 (privilège administrateur requis). Si vous contrôlez le serveur DNS (comme dans le cas de Nick), l'entrée DNS est suffisante car cette étape n'est pas nécessaire.
  2. Si vous accédez à Internet par proxy, assurez-vous que le fichier dev.example.com ne sera pas remplacé par un proxy (vous devez l'indiquer dans la liste des exceptions de votre navigateur (pour IE, il s'agirait de Outils/Options Internet/Connexions/Paramètres réseau, accédez à Proxy Server/Advanced et mettez dev.example.com dans la liste des exceptions.
  3. Configurez la liaison IIS Express pour votre site (par exemple, Site1) afin d'inclure dev.example.com. Un privilège administratif sera nécessaire pour utiliser la liaison. Vous pouvez également effectuer une réservation URL unique avec http.sys à l'aide de

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. démarrez iisexpress /site:Site1 ou ouvrez Site1 dans WebMatrix

24
Jaro Dunajsky

Sur mon WebMatrix IIS L'installation rapide changeant de "*:80:localhost" à "*:80:custom.hostname" ne fonctionnait pas ("Nom d'hôte incorrect", même avec les mappages adéquats etc\hosts), mais "*:80:"a fonctionne - et sans aucune des étapes supplémentaires requises par les autres réponses ici. Notez que "*:80:*" ne le fera pas; quitter le deuxième astérisque.

19
rymo

J'essayais d'intégrer l'adresse IP publique dans mon flux de travail et ces réponses ne m'ont pas aidé (j'aime utiliser le IDE en tant que l'EDI). Mais ce qui précède m’amène à la solution (après environ 2 heures de frappe contre un mur pour l’intégrer à Visual Studio 2012/Windows 8), voici ce qui a finalement fonctionné pour moi.

applicationhost.config généré par VisualStudio sous C:\Users\usr\Documents\IISExpress\config

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • Définissez IISExpress pour qu'il s'exécute en tant que Administrator afin qu'il puisse se lier à des adresses extérieures (pas l'hôte local)
  • Exécutez Visual Stuio en tant que Administrator pour qu'il puisse démarrer le processus en tant qu'administrateur, permettant ainsi à la liaison de prendre place.

Le résultat net est que vous pouvez accéder à 192.168.2.102 dans mon cas et le tester (par exemple dans un émulateur Android. _. J'espère vraiment que cela aidera quelqu'un d'autre car ce fut définitivement un processus irritant pour moi.

Apparemment, c'est une fonctionnalité de sécurité que j'aimerais voir désactivée.

8
Daniel B. Chapman

Comme Jessa Flint ci-dessus, je ne voulais pas éditer manuellement . Vs\config\applicationhost.config car je voulais que les modifications persistent dans le contrôle de code source. Je ne voulais pas non plus avoir un fichier de commandes séparé. J'utilise VS 2015 .

Propriétés du projet → Evénements de génération → Ligne de commande de l'événement de pré-génération: Screenshot of project properties


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

Assurez-vous simplement de changer le numéro de port sur le port de votre choix.

5
Jon

La réponse votée est valide .. et cette information m'a beaucoup aidé. Je sais que ce sujet a déjà été abordé, mais je voulais ajouter quelques informations supplémentaires. Les gens disent que vous devez "éditer manuellement" le fichier application.config dans le répertoire Users IISExpress/Config. Cela a été un gros problème pour moi parce que je voulais distribuer la configuration via le contrôle de code source à différents développeurs.

Ce que j’ai trouvé, c’est que vous pouvez automatiser la mise à jour de ce fichier à l’aide du programme "C:\Program Files\IIS Express\appcmd.exe". Il a fallu un certain temps pour connaître les paramètres de contrôle, mais je vais partager mes conclusions ici. Pour résumer, vous pouvez créer un fichier .bat qui exécute à la fois la commande NETSH et le fichier APPCMD.EXE (et éventuellement remplacer un fichier hôte si vous le souhaitez) pour faciliter la configuration de l'en-tête de l'hôte avec IIS Express.

Votre fichier de batte d'installation ressemblerait à ceci:

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

Je vais également créer un fichier bat "Désinstaller" qui nettoiera ces liaisons.

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

J'espère que cette information est utile à quelqu'un .. Il m'a fallu un peu pour découvrir.

5
Jesse Flint

Suivant les conseils de Jaro, je suis parvenu à faire fonctionner cela sous Windows XP et IIS Express (installé via Web Matrix) avec une petite modification et n'était pas limité à localhost. C'est juste une question de régler les fixations correctement.

  1. Utilisez WebMatrix pour créer un nouveau site à partir d'un dossier situé à la racine de votre application Web.
  2. Fermez WebMatrix.
  3. Ouvrir %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP. Vista et 7 chemins seront similaires) et éditez la définition de site dans le bloc <sites> de config pour qu’elle corresponde à ce qui suit:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation="*:80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>

Si vous exécutez MVC, laissez le pool d'applicationsPool défini sur l'une des options "intégrées".

4
Neil Monroe

La solution de David est bonne. Mais j'ai trouvé que <script>alert(document.domain);</script> dans la page alerte toujours "localhost" car l'URL du projet est toujours localhost même si elle a été remplacée par http://dev.example.com. Un autre problème que je rencontre est qu'il me prévient que le port 80 a déjà été utilisé, même si j'ai désactivé Skype en utilisant le numéro de port 80 comme recommandé par David Murdoch. J'ai donc trouvé une autre solution beaucoup plus simple:

  1. Exécutez le Bloc-notes en tant qu'administrateur et ouvrez le répertoire C:\Windows\System32\drivers\etc\hosts, ajoutez le domaine 127.0.0.1 et enregistrez le fichier.
  2. Ouvrez le projet Web avec Visual Studio 2013 (Remarque: vous devez également exécuter en tant qu'administrateur), cliquez avec le bouton droit de la souris sur le projet -> Propriétés -> Web (supposons que l'URL du projet sous l'option "IIS Express" soit http://localhost:33333/). , puis changez-le de http://localhost:33333/ à http://mydomain:333333/ Remarque: après ce changement, vous ne devez plus cliquer sur le bouton "Créer un répertoire virtuel" situé à droite de la zone URL du projet, ni sur le bouton Enregistrer du logiciel Visual Studio. comme ils ne seront pas réussis. Vous pouvez enregistrer vos paramètres après la prochaine étape 3.
  3. Ouvrez% USERPROFILE%\Mes documents\IISExpress\config\applicationhost.config, recherchez "33333: localhost", puis mettez-le à jour en "33333: mydomain" et enregistrez le fichier.
  4. Enregistrez votre réglage comme indiqué à l'étape 2.
  5. Cliquez avec le bouton droit de la souris sur une page Web de votre visual studio, puis cliquez sur "Afficher dans le navigateur". Maintenant, la page sera ouverte sous http://mydomain:333333/, et <script>alert(document.domain);</script> dans la page alertera "mydomain".

Remarque: Le numéro de port indiqué ci-dessus est supposé être 33333. Vous devez le remplacer par le numéro de port défini par votre studio visuel.

Publication modifiée: Aujourd'hui, j'ai essayé avec un autre nom de domaine et j'ai obtenu l'erreur suivante: Impossible de lancer le serveur Web IIS Express. Échec d'enregistrement de l'URL ... L'accès est refusé. (0x80070005) . Je quitte le IIS Express en cliquant avec le bouton droit de la souris sur l'icône IIS Express située dans le coin droit de la barre des tâches de Windows, puis je redémarre Visual Studio en tant qu'administrateur. Le problème est résolu. .

3
wcb1

Laissant ceci ici juste au cas où quelqu'un aurait besoin de ...

J'avais besoin d'avoir des domaines personnalisés pour une configuration Wordpress Multisite dans IIS Express, mais rien n'a fonctionné jusqu'à ce que je lance Webmatrix/Visual Studio en tant qu'administrateur. Ensuite, j'ai pu lier des sous-domaines à la même application.

<bindings> 
    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>

Ensuite, allez à http: //witely.localhost: 12345 / sera exécuté.

0
MW247

J'utilisais iisexpress-proxy (à partir de NPM) pour cela.

https://github.com/icflorescu/iisexpress-proxy

0
trd