Question

Quels sont les bons (ou au moins les astucieux) moyens de gérer plusieurs sites à partir d’un seul framework Web Python commun (à savoir: Pylons, TurboGears, etc.)? Je sais que vous pouvez effectuer une redirection basée sur le domaine ou le chemin pour réécrire l'URI afin de pointer vers un emplacement spécifique au site. " que je voudrais éviter.

Était-ce utile?

La solution

Django a intégré cette fonctionnalité. Voir la cadre des sites .

En règle générale, incluez une colonne "hôte" dans le schéma de votre base de données attaché aux données que vous souhaitez attribuer à un hôte spécifique, puis incluez l'en-tête HTTP Hôte dans la requête lors de l'extraction. données.

Autres conseils

En utilisant Django sur apache avec mod_python, j’héberge plusieurs sites django (non liés) simplement avec la configuration apache suivante:

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site1
        ServerName site1.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site1.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site1
        </Location>
</VirtualHost>

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site2
        ServerName site2.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site2.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site2
        </Location>
</VirtualHost>

Pas besoin de plusieurs instances Apache ou serveurs proxy. L'utilisation d'une directive PythonInterpreter différente pour chaque site (le nom que vous entrez est arbitraire) permet de séparer les espaces de noms.

J'utilise CherryPy comme serveur Web (fourni avec Turbogears) et j'exécute simplement plusieurs instances du serveur Web CherryPy sur différents ports liés à localhost. Ensuite, je configure Apache avec mod_proxy et mod_rewrite pour transférer de manière transparente les demandes au port approprié en fonction de la demande HTTP.

L'utilisation de plusieurs instances de serveur sur des ports locaux est une bonne idée, mais vous n'avez pas besoin d'un serveur Web complet pour rediriger les requêtes HTTP.

J'utiliserais pound comme proxy inverse pour effectuer le travail. Il est petit, rapide, simple et fait exactement ce dont nous avons besoin ici.

  

QU'EST-CE QUE POUND:

     
      
  1. un proxy inverse: il transmet les demandes des navigateurs clients à un ou plusieurs serveurs principaux.
  2.   
  3. un équilibreur de charge: il répartira les demandes des navigateurs clients entre plusieurs serveurs principaux, tout en conservant les informations de session.
  4.   
  5. un wrapper SSL: Pound déchiffrera les demandes HTTPS des navigateurs clients et les transmettra en tant que HTTP simple aux serveurs principaux.
  6.   
  7. un assainisseur HTTP / HTTPS: Pound vérifiera les demandes de correction et n’acceptera que les demandes bien formées.
  8.   
  9. un échec sur le serveur: si un serveur principal échoue, Pound en prend note et arrête de lui transmettre les demandes jusqu'à ce qu'il soit restauré.
  10.   
  11. un redirecteur de demandes: les demandes peuvent être réparties entre les serveurs en fonction de l'URL demandée.
  12.   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top