Pregunta

¿Cuáles son las formas buenas (o al menos inteligentes) de ejecutar varios sitios desde un único marco web común de Python (es decir:¿Pilones, TurboGears, etc.)?Sé que puedes hacer una redirección basada en el dominio o la ruta para reescribir el URI para que apunte a una ubicación específica del sitio y también he visto algunos "brutales".if site == 'site1' / elseif / elseif / etc" que me gustaría evitar.

¿Fue útil?

Solución

Django tiene esto incorporado.Ver el marco de los sitios.

Como técnica general, incluya una columna 'host' en el esquema de su base de datos adjunta a los datos que desea que sean específicos del host, luego incluya el Host Encabezado HTTP en la consulta cuando se recuperan datos.

Otros consejos

Usando Django en Apache con mod_python, alojo múltiples sitios Django (no relacionados) simplemente con la siguiente configuración de Apache:

<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>

No se necesitan varias instancias de Apache ni servidores proxy.El uso de una directiva PythonInterpreter diferente para cada sitio (el nombre que ingresa es arbitrario) mantiene los espacios de nombres separados.

Utilizo CherryPy como mi servidor web (que viene incluido con Turbogears) y simplemente ejecuto varias instancias del servidor web CherryPy en diferentes puertos vinculados a localhost.Luego configuro Apache con mod_proxy y mod_rewrite para reenviar solicitudes de forma transparente al puerto adecuado según la solicitud HTTP.

Usar múltiples instancias de servidor en puertos locales es una buena idea, pero no necesita un servidor web con todas las funciones para redirigir las solicitudes HTTP.

yo usaría libra como proxy inverso para hacer el trabajo.Es pequeño, rápido, simple y hace exactamente lo que necesitamos aquí.

QUE ES LA LIBRA:

  1. un proxy inverso:pasa solicitudes de los navegadores del cliente a uno o más servidores back-end.
  2. un equilibrador de carga:distribuirá las solicitudes de los navegadores del cliente entre varios servidores back-end, manteniendo la información de la sesión.
  3. un contenedor SSL:Pound descifrará las solicitudes HTTPS de los navegadores de los clientes y las pasará como HTTP simple a los servidores back-end.
  4. un desinfectante HTTP/HTTPS:Pound verificará que las solicitudes sean correctas y aceptará sólo las que estén bien formadas.
  5. un servidor fallido:Si un servidor back-end falla, Pound tomará nota del hecho y dejará de pasarle solicitudes hasta que se recupere.
  6. un redirector de solicitud:Las solicitudes pueden distribuirse entre servidores de acuerdo con la URL solicitada.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top