web-dev-qa-db-fra.com

Wildcard sous-domaines dans IIS7. Est-il possible de les rendre comme dans Apache?

Est-il possible de configurer IIS7 pour obtenir les mêmes fonctionnalités qu'Apache en ce qui concerne les domaines génériques? Je suis intéressé par le routage d'utilisateur dans l'application Web ASP.NET en fonction de l'utilisateur de sous-domaine utilisé dans l'URL.

Quelque chose comme est décrit ici:

http://steinsoft.net/index.php?site=programming/articles/apachewildcarddomain

Merci

30
GrZeCh

La réponse est non, IIS7 (toujours) ne prend pas en charge les noms d’hôte génériques (voir this ). Si vous souhaitez desservir plusieurs domaines sur un même site Web, la seule solution de contournement consiste pour l’instant à utiliser une adresse IP dédiée et à le faire avec DNS, qui prend en charge les caractères génériques.

Mise à jour 2013

Pour être complet, IIS8 ne possède pas encore cette fonctionnalité.

Mise à jour 2016

Enfin, IIS 10 dans Windows 2016 prend en charge les sous-domaines génériques.

40
Daniel Liuzzi

IIS prend-il en charge l’en-tête d’hôte générique? Puis-je capturer et rediriger * .Mydomain.com vers un site Web?

La réponse est oui/non. Oui, car vous êtes Capable de rediriger * .mondomaine.com vers un site Web . Non, car la magie est dans DNS et non dans IIS.

Voici comment vous le faites:
Dans IIS MMC, Configure un site Web avec en-tête NO Host , Puis attribue une adresse IP à Le site. (si vous avez une adresse IP dans la zone, vous pouvez l'ignorer.) Avec cela, le site Web sera lié à l'adresse IP spécifique et sera à l'écoute de tous. Les requêtes HTTP sont envoyées à l’IP, et vous Avez terminé :) 

La prochaine étape consiste à vérifier que la résolution de votre nom Fonctionne pour la requête générique Et à répondre avec la bonne adresse IP . Si vous utilisez le service Microsoft DNS , Il ne vous permettra pas de créer Un enregistrement '*' A (en supposant que vous avez déjà créé la zone de domaine dans DNS MMC), vous devez effectuer les opérations suivantes:

  1. Accédez à %windir%\system32\dns\
  2. Trouver le fichier de zone. Par exemple.
    mydomain.com.dns, ouvrez-le avec le Bloc-notes
  3. Ajouter une entrée. Par exemple.
    * A IP.IP.IP.IP
  4. Sauvegarder le fichier de données de zone
  5. Rechargez les données de zone Dans DNS MMC. 

Prenez note que ce faisant, tous les * Répondront à l’IP que vous avez configurée plus tôt. Par exemple, Abc.mydomain.com, www.mydomain.com, K2k.mydomain.com, etc.

Pour vérifier que cela fonctionne, essayez d’utiliser la commande ping ping (insert anything here).mydomain.com Et vous devriez Obtenir des réponses de IP.IP.IP.IP

Ensuite, essayez de naviguer, http: // (insérez Quelque chose ici) .mydomain.com /, vous Devriez obtenir la même page Web que celle que vous avez configurée.

La source

16
notandy

Vous ne pouvez pas créer de caractère générique (*) Un enregistrement dans le DNS de Microsoft, mais vous pouvez créer un caractère générique CNAME. Si vous essayez uniquement de diriger tous les sous-domaines vers une adresse IP donnée, cela fonctionnerait. Par exemple, si vous avez un enregistrement A pour www.mydomain.com, vous pouvez ajouter un enregistrement CNAME pour *.mydomain.com et le définir à www.mydomain.com. Le nom d'hôte dans l'en-tête de la demande sera toujours le sous-domaine. Par conséquent, votre application Web devrait pouvoir l'attraper et la gérer si vous le souhaitez.

5
Centijo

Vous pouvez utiliser IIS si vous utilisez Web Platform Installer ( http://www.Microsoft.com/web/downloads/platform.aspx ) et installez le module "Réécriture d'URL". Si vous ajoutez un enregistrement "A" tel que "* .example.com", tous les sous-domaines peuvent être envoyés à votre serveur IIS. Sur le serveur IIS, il vous suffit d'ajouter une règle de réécriture d'URL au site Web par défaut pour effectuer tout ce que vous souhaitez, tel que la redirection vers une autre URL. Lorsqu'un utilisateur entre par exemple "xyz.example.com", vous pouvez le rediriger vers "example.com" et faire en sorte que tous les sous-domaines inconnus soient dirigés vers le domaine racine. Les étapes sont les suivantes:

  1. Installez Web Platform Installer: http://www.Microsoft.com/web/downloads/platform.aspx

    Exécutez-le, recherchez "URL Rewrite" et installez-le.

  2. Allez sur le site Web par défaut et ouvrez «URL Rewrite».

  3. Cliquez sur "Ajouter une ou plusieurs règles" à l'extrême droite.

  4. Nommez la règle et définissez les éléments suivants:

    URL demandée: correspond au modèle

    Utilisation de: expressions régulières

    Modèle: (.*)

    Regroupement logique: Match All

  5. Ajoutez une nouvelle condition (cliquez sur le bouton "Ajouter ..") et définissez:

    Entrée de condition: {CACHE_URL}

    Vérifier si la chaîne d'entrée: correspond au motif

    Modèle (modifiez si nécessaire): (http | https): // (. *?)\.Rootdomain\.tld

    Cliquez sur OK].

  6. Maintenant, faites défiler jusqu'à action et définissez:

    Type d'action: redirection

    URL de redirection (à modifier, si nécessaire): {C: 1}: //rootdomain.tld {R: 0}

Les "{C: #}" et "{R: #}" proviennent de la fenêtre de test lorsque vous cliquez sur les boutons "Modèle de test" en regard des entrées du modèle de regex. Vous pouvez faire correspondre une partie d'une valeur de serveur et la réutiliser ultérieurement.

Vous pouvez également consulter cette astuce sur la transmission du HTTP/HTTPS dans l'URL (le "{C: 1}" à l'étape 6 ci-dessus): http://weblogs.asp.net/owscott/url- rewrite-protocol-http-https-in-the-action

4
James Wilkins

Pour les utilisateurs qui ne peuvent pas passer à IIS 10+, il n'est pas très difficile d'activer la prise en charge du nom d'hôte générique via un proxy inverse. 

L'exemple HTTP est comme ci-dessous, alors que les autres configurations ne nécessitent que quelques étapes supplémentaires.

  1. Créez un site fourre-tout qui se lie à *: 80 et à aucun nom d'hôte.
  2. Créez le premier site qui se lie à *: 8091 et sans nom d'hôte.
  3. Créez un deuxième site qui se lie à *: 8092 et sans nom d'hôte.
  4. Testez les deux sites et passez à autre chose.
  5. Installez le module ARR et URL Rewrite.
  6. Créer des règles de réécriture sur le site fourre-tout pour envoyer des demandes aux deux sites,

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="site1" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_Host}" pattern="^(.*).site1.com$" />
                    </conditions>
                    <action type="Rewrite" url="http://localhost:8091/{R:0}" />
                </rule>
                <rule name="site2" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_Host}" pattern="^(.*).site2.com$" />
                    </conditions>
                    <action type="Rewrite" url="http://localhost:8092/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
    

Notez qu'au niveau du serveur, le mode proxy ARR doit être activé,

    <system.webServer>
        <proxy enabled="true" />
    </system.webServer>

Le nom d'hôte générique IIS 10 est plus simple et offre également de meilleures performances, car ARR a un temps système (mais généralement négligeable).

0
Lex Li

Mise à jour 2: le lien est rompu, passez à IIS 10, il prend désormais en charge les caractères génériques.

MISE À JOUR: Cela fonctionne pendant un certain temps, après un certain temps, je suis devenu bombardé par plusieurs demandes qui arrivent. Je ne recommanderais pas cette méthode.

Assurez-vous que vos enregistrements DNS sont configurés correctement (enregistrement CNAME de * -> @) et cela fonctionnera parfaitement. Testé avec plusieurs domaines.

Le lien est rompu maintenant utilisé pour être http://pzxc.com/Apache-style-wildcard-hostname-rewrite-rules-in-iis

0
Damon Earl