Comment puis-je gérer de manière ambidextre différents hôtes lorsque Django exécute Gunicorn derrière Apache ?

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

Question

J'ai une installation Django sur laquelle j'aimerais exécuter plusieurs variantes du même site :mêmes données, contenu statique différent, dans le but ultime de démontrer XYZ tel qu'implémenté avec divers frameworks JavaScript.J'aimerais que différentes pages d'accueil se chargent, et que celles-ci tirent leur propre contenu statique distinct.(Tous les projets prévus sont des SPA.)

J'ai essayé la solution sur Comment puis-je obtenir le nom de domaine de mon site dans un modèle Django ?, mais sur mon système, le site historique ne donne pas de nom d'hôte « pragmatometer.com » ;il donne le nom d'hôte 'localhost:8000', car Django / Gunicorn sert des pages en tant qu'hôte local.J'ai essayé de spécifier dans /etc/hosts que pragmatometer.com est 127.0.0.1 et d'avoir un proxy Apache pour pragmatometer.com, mais cela a entraîné une erreur.Cela laisse ouverte la possibilité d'exécuter des hôtes séparés sur différents ports, qui devraient être proxy comme distincts, ou de rediriger la page d'accueil vers une page de destination spécifique à une URL, une solution qui sacrifierait l'URL propre de xyz.pragmatometer.com pour démontrer le Implémentation du framework XYZ.Je vois plusieurs façons de le coller avec JavaScript, dont seulement une ou deux que je voudrais qu'un futur patron voie...

J'aimerais idéalement avoir l'URL racine de plusieurs (sous) domaines tirant une page d'accueil spécifique au sous-domaine et le /load/*, /save/* etc.cohérents entre eux.J'aimerais également que l'URL racine exploite ses propres CSS et JavaScript, mais c'est assez simple si je peux faire fonctionner l'URL racine de manière appropriée.

La meilleure solution que je vois jusqu'à présent consiste à avoir des processus de serveur distincts écoutant sur la même adresse IP, mais à avoir des serveurs isomorphes exécutés sur différents ports et mandatés par différents hôtes virtuels Apache.Soit cela, soit demander à JavaScript de détecter l'URL et d'écraser la page avec le "vrai" index du domaine, qui a une petite odeur.

Des commentaires sur une meilleure solution ou sur la manière de bien exécuter l'intention ci-dessus ?

--MODIFIER--

Ou une autre approche qui pourrait être un peu plus propre :

Avoir une image d'accueil qui charge le contenu de /framework/ pour chaque framework, puis document.write() le après la page est suffisamment chargée pour qu'un document.write() écrase le contenu de la page existante.

Si j'utilisais jQuery pour écraser et charger une page de cette façon, cela laisserait-il une pollution qui interférerait avec le bon fonctionnement des frameworks ?

Était-ce utile?

La solution

Votre pile a l'air un peu folle.

Tu veux un serveur Web avec Django accessible par plusieurs domaines.Chaque domaine amène l'application Django à diffuser un contenu différent.Est-ce que je t'ai bien compris ?

Si oui, vous réussirez peut-être en remplaçant Apache par Nginx.Il peut résoudre le nom d'hôte demandeur et décider comment rediriger la demande :

Quelle est la différence entre $host et $http_host dans Nginx

Hébergement de domaines multiples avec un seul projet Django

Mise à jour

Documentation nginx pertinente pour distinguer les différents noms d'hôte :http://nginx.org/en/docs/http/request_processing.html http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name

Documentation nginx pertinente pour l'ajout d'en-têtes de requête :http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header

Voir aussi cette réponse :Ajout et utilisation d'un en-tête (HTTP) dans nginx

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