Saltear al contenido principal

Servidores WSGI – Lenguaje Python

UN Interfaz de puerta de enlace del servidor web
(WSGI) implementa el lado del servidor web de la interfaz WSGI para ejecutar aplicaciones web Python.

¿Por qué es necesario WSGI?

Un servidor web tradicional no comprende ni tiene ninguna forma de ejecutar aplicaciones Python. A finales de la década de 1990, un desarrollador llamado Grisha Trubetskoy
se le ocurrió un módulo de Apache llamado mod_python
para ejecutar código Python arbitrario. Durante varios años, a finales de la década de 1990 y principios de la de 2000, Apache configurado con mod_python ejecutó la mayoría de las aplicaciones web de Python.

Sin embargo, mod_python no era una especificación estándar. Era solo una implementación que permitía que el código Python se ejecutara en un servidor. A medida que el desarrollo de mod_python se estancó y se descubrieron vulnerabilidades de seguridad, la comunidad reconoció que se necesitaba una forma coherente de ejecutar el código Python para aplicaciones web.

Por lo tanto, a la comunidad de Python se le ocurrió WSGI como una interfaz estándar que los módulos y contenedores podrían implementar. WSGI es ahora el enfoque aceptado para ejecutar aplicaciones web Python.

Servidor WSGI que invoca una aplicación WSGI.

Como se muestra en el diagrama anterior, un servidor WSGI simplemente invoca un objeto invocable en la aplicación WSGI según lo definido por el estándar PEP 3333.

El propósito de WSGI

¿Por qué usar WSGI y no solo apuntar un servidor web directamente a una aplicación?

  • WSGI le brinda flexibilidad. Los desarrolladores de aplicaciones pueden cambiar los componentes de la pila web por otros. Por ejemplo, un desarrollador puede cambiar de Green Unicorn a uWSGI sin modificar la aplicación o el marco que implementa WSGI. Desde PEP 3333:

    La disponibilidad y el uso generalizado de dicha API en servidores web para Python […] separaría la elección del marco de la elección del servidor web, lo que daría libertad a los usuarios para que elijan la combinación que más les convenga, mientras que los desarrolladores de marcos y servidores se pueden centrar en su área de especialización preferida.

  • Los servidores WSGI promueven el escalado. La atención de miles de solicitudes de contenido dinámico a la vez es el dominio de los servidores WSGI, no los marcos. Los servidores WSGI manejan las solicitudes de procesamiento del servidor web y deciden cómo comunicar esas solicitudes al proceso de un marco de aplicación. La segregación de responsabilidades es importante para escalar de manera eficiente el tráfico web.

Servidor WSGI - Servidor web - Navegador

WSGI es por diseño una interfaz estándar simple para ejecutar código Python. Como desarrollador web, no necesitará saber mucho más que

  • qué significa WSGI (Web Server Gateway Inteface)

  • que un contenedor WSGI es un proceso en ejecución independiente que se ejecuta en un puerto diferente al de su servidor web

  • su servidor web está configurado para pasar solicitudes al contenedor WSGI que ejecuta su aplicación web, luego pasa la respuesta (en forma de HTML) al solicitante

Si está utilizando un marco web estándar como Django, Flask o Bottle, o casi cualquier otro marco Python actual, no necesita preocuparse por cómo los marcos implementan el lado de la aplicación del estándar WSGI. Del mismo modo, si está utilizando un contenedor WSGI estándar como Green Unicorn, uWSGI, mod_wsgi o gevent, puede hacer que se ejecuten sin preocuparse por cómo implementan el estándar WSGI.

Sin embargo, conocer el estándar WSGI y cómo estos marcos y contenedores implementan WSGI debería estar en su lista de verificación de aprendizaje a medida que se convierta en un desarrollador web Python con más experiencia.

Especificaciones oficiales de WSGI

El estándar WSGI v1.0 se especifica en
PEP 0333. A partir de septiembre de 2010, WSGI v1.0 es reemplazada por
PEP 3333, que define el estándar WSGI v1.0.1. Si está trabajando con Python 2.xy cumple con PEP 0333, entonces también cumple con 3333. La versión más reciente es simplemente una actualización para Python 3 y tiene instrucciones sobre cómo se debe manejar Unicode.

wsgiref en Python 2.x y
wsgiref en Python 3.x
son las implementaciones de referencia de la especificación WSGI integradas en la biblioteca estándar de Python, por lo que se puede utilizar para crear servidores y aplicaciones WSGI.

Ejemplo de configuración de servidor web

La configuración de un servidor web especifica qué solicitudes se deben pasar al servidor WSGI para procesarlas. Una vez que el servidor WSGI procesa y genera una solicitud, la respuesta se devuelve a través del servidor web y al navegador.

Por ejemplo, la configuración de este servidor web Nginx especifica que Nginx debe manejar activos estáticos (como imágenes, JavaScript y archivos CSS) en el directorio / static y pasar todas las demás solicitudes al servidor WSGI que se ejecuta en el puerto 8000:

# this specifies that there is a WSGI server running on port 8000
upstream app_server_djangoapp {
    server localhost:8000 fail_timeout=0;
}

# Nginx is set up to run on the standard HTTP port and listen for requests
server {
  listen 80;

  # nginx should serve up static files and never send to the WSGI server
  location /static {
    autoindex on;
    alias /srv/www/assets;
  }

  # requests that do not fall under /static are passed on to the WSGI
  # server that was specified above running on port 8000
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    if (!-f $request_filename) {
      proxy_pass http://app_server_djangoapp;
      break;
    }
  }
}

Tenga en cuenta que el código anterior es una versión simplificada de una configuración de Nginx lista para producción. Para plantillas SSL y no SSL reales, eche un vistazo a la
Plantillas de servidor web de ropa interior en GitHub.

Implementaciones del servidor WSGI

Hay una lista completa de servidores WSGI en el
WSGI Leer los documentos página. Los siguientes son servidores WSGI basados ​​en recomendaciones de la comunidad.

  • Unicornio verde es un servidor basado en el modelo de trabajador previo a la bifurcación portado desde Ruby Unicornio proyecto.

  • uWSGI está ganando fuerza como una implementación de servidor WSGI de alto rendimiento.

  • mod_wsgi es un módulo de Apache que implementa la especificación WSGI.

  • CherryPy es un servidor web Python puro que también funciona como servidor WSGI.

Recursos de WSGI

Lista de verificación de aprendizaje de servidores WSGI

  1. Comprenda que WSGI es una especificación estándar de Python para que las aplicaciones y los servidores la implementen.

  2. Elija un servidor WSGI según la documentación y los tutoriales disponibles. Green Unicorn es bueno para empezar, ya que ha existido por un tiempo.

  3. Agregue el servidor WSGI a su implementación de servidor.

  4. Configure el servidor web para pasar solicitudes al servidor WSGI para patrones de URL apropiados.

  5. Pruebe que el servidor WSGI responda a las solicitudes locales pero no a las solicitudes directas fuera de su infraestructura. El servidor web debe ser el paso para las solicitudes y respuestas del servidor WSGI.

¿Qué sigue después de que se ejecute su aplicación Python?

¿Necesitas ayuda para revisar el código de tu proyecto?



Esta entrada tiene 0 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Volver arriba