Comment autoriser un utilisateur à utiliser son propre nom de domaine pour un service hébergé?

StackOverflow https://stackoverflow.com/questions/144630

Question

Je travaille sur une application Web ASP.NET MVC qui permet aux utilisateurs de publier du contenu, mais à part de le publier sur un serveur distant, je souhaite autoriser les utilisateurs à utiliser directement leur nom de domaine. Par exemple, l'utilisateur " Tom " son nom de domaine TomSite.com peut pointer vers http://www.mywebapp.com/user/tom , mais le sous-chemin sera également mappé. Par exemple, TomSite.com/path sera mappé sur www.mywebapp.com/user/tom/path, ce qui est transparent pour le visiteur Web. Le visiteur ne verra jamais " mywebapp.com " n'importe où sur TomSite.com.

Je pense que Smugmug.com fournit un tel service, afin de permettre aux gens d'utiliser leur propre nom de domaine pour le portfolio de photos. Je veux atteindre le même résultat.

Comment puis-je faire cela? Merci!

Était-ce utile?

La solution

Cela nécessite plusieurs étapes.

Vous devez d’abord déterminer comment vos utilisateurs configureront leur domaine pour qu’il dispose d’un enregistrement CNAME pour votre site. Vous pouvez résoudre ce problème de différentes manières, le meilleur étant l’éducation. Créer des partenariats avec des fournisseurs d’hébergement nécessite beaucoup de volume.

Dans IIS, vous devrez soit ajouter chaque nom d’hôte manuellement (mais cela pourrait également être réalisé par le biais de scripts), soit disposer d’une adresse IP dédiée réservée à votre site.

Il est également nécessaire que le domaine soit associé à un compte. L'utilisateur doit l'ajouter lui-même et vous ajouterez probablement une vérification dans l'interface qui confirme que le domaine est pointé sur votre serveur. Le code correspondant devrait ressembler à ceci (n'oubliez pas d'inclure l'espace de noms System.Net).

if (Dns.GetHostEntry("www.user.example.com").HostName == "www.example.com")
{
    // www.user.example.com is a CNAME for www.example.com
}

Dans votre projet ASP.NET MVC, vous devez implémenter des itinéraires dans ce but particulier. Créez une classe personnalisée héritant de Route qui prend également en compte le domaine.

Autres conseils

Smugmug (dont vous avez parlé) demande à leurs utilisateurs de configurer un enregistrement CNAME qui alias l'URL de la section photo personnelle de l'utilisateur. Pour la plupart des utilisateurs, cela nécessitera probablement de contacter leur hôte ou de rechercher des fichiers d’aide afin de tout configurer.

Ainsi, même si www.tomsite.com peut diffuser de manière transparente des pages hébergées sur www.mywebapp.com, les utilisateurs devront faire un effort particulier. Pour en faire une solution totalement transparente, vous aurez besoin d’un arrangement avec le utilisateurs Web hôte (Smugmug semble avoir un tel arrangement avec GoDaddy).

Je doute que vous puissiez configurer cette intégration avec tous les hébergeurs Web. La seule solution complète consiste donc à héberger vous-même les sites Web de vos utilisateurs (je ne connais pas suffisamment votre situation au sens large pour déterminer est une solution raisonnable).

Remarque: la création d'un alias sur votre propre serveur Web (alias réécriture d'URL) ne fonctionnera pas, à moins que vous n'hébergiez vous-même leur site, car il est évident que les personnes qui extraient du domaine de votre utilisateur n'arriveront pas sur votre serveur. / p>

Faites pointer le nom convivial de chaque client sur l'adresse IP externe de votre serveur Web.

Utilisez IIS pour résoudre le nom convivial spécifié dans la demande d’en-tête d’hôte au site Web logique que vous souhaitez transmettre à ce nom convivial. IIS mappera volontiers un site Web et un dossier virtuel sur le même dossier du système de fichiers. Créer un site web pour chaque client. Liez ensuite ce site Web au nom convivial du client.

N'oubliez pas de mapper le site Web par défaut uniquement sur vos propres noms. Si vous le laissez en mode promiscuous (mappé sur "*"), les résultats seront imprévisibles.

Pour définir le mappage d'en-tête d'hôte

Sélectionnez Site Web par défaut sous le nœud Sites . Dans le volet Actions en haut à droite, cliquez sur Liaisons ... pour ouvrir la boîte de dialogue Liaisons de sites . Il y aura une liste de liaisons, contenant probablement une seule entrée portant la mention http * 80. Sélectionnez cette option, puis cliquez sur le bouton Modifier ... . Définissez Nom d'hôte sur votre propre nom convivial.

Lancez Gestionnaire IIS7 et créez pour chaque site client un site Web sous le nœud Sites . Définissez la liaison du chemin de fichier et de l'en-tête de l'hôte lors de la création de chaque site Web. Évidemment, la liaison d’en-tête d’hôte (nom d’hôte) doit être le nom convivial de ce client.

Créez simplement un nouvel enregistrement dans les paramètres de votre serveur Web tomsite.com directement sur votre mywebapp.com/user/tom/ path?

Voir cela comme un alias:)

Bien sûr, puisque vous êtes basé sur asp.net/windows, je pense que vous devrez approfondir vos connaissances sur IIS pour automatiser ce genre de choses. Si vous étiez sur Apache, cela ajouterait 3 simples lignes à httpd.conf.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top