nginx + uwsgi: - modificador no disponible solicitado: 0 -

81

Ubuntu 12.04, nginx 1.2.0, uwsgi 1.0.3.

Empiezo uwsgi con el siguiente comando:

uwsgi -s 127.0.0.1:9010 -M -t 30 -A 4 -p 4 -d /var/log/uwsgi.log

En cada solicitud, nginx responde con 502 y uwsgi escribe para registrar la siguiente línea:

-- unavailable modifier requested: 0 --
Lisio
fuente
En Ubuntu uwsgi se inicia como un servicio: service uwsgi start.
sorin

Respuestas:

109

Respuesta original

Para Python 2 en Ubuntu 11.10, use upstart, instale el complemento de python para uWSGIcon apt-get install uwsgi-plugin-pythony si está usando un archivo ini para configurar su uWSGIaplicación, luego agréguelo plugins = pythona la [uwsgi]sección y debería resolver este problema.

Editar: actualizado para Python 3 y Ubuntu 17.10

Para Python 3 en Ubuntu 17.10, use systemd, instale el complemento de python para uWSGIcon apt-get install uwsgi-plugin-python3y si está usando un archivo ini para configurar su uWSGIaplicación, luego agréguelo plugins = pythona la [uwsgi]sección y debería resolver este problema.

Para obtener más información sobre cómo comenzar con python/ uWSGIapps, incluido cómo configurarlas mediante un iniarchivo, consulte esta práctica guía.

SHaKie
fuente
El equivalente de esto (yum plugin install + uwsgi config change) me funcionó en CentOS7.
Mike Howsden
Me he estado rompiendo la cabeza, no puedo solucionar este problema. Gracias !
SuperNova
¿Qué pasa con el linux alpino?
Adam Parkin
No sé dónde está el archivo para la "configuración de la aplicación uwsgi individual". ¿Podría ser más específico? ¿Es este el archivo ini de mi aplicación uwsgi? ¿El archivo / etc / something? Tal vez pegue una muestra de cómo se ve el contenido del archivo para saber a qué se refiere. ¿Y una ubicación típica para el archivo?
Jason
Ha pasado bastante tiempo desde que tuve que preocuparme por esto (7 años de hecho) pero de hecho me refiero al uwsgiarchivo ini de la aplicación. Como probablemente pueda imaginar, ya no tengo ningún archivo de configuración por ahí, pero una búsqueda rápida en Google produjo esta (aparentemente) guía útil . En cuanto a la ubicación del archivo ini, de manera realista podría vivir en casi cualquier lugar. Si usted se sentía particularmente aventurero que incluso podría servir hasta que el archivo ini de otro servidor web en cualquier lugar en el mundo, así:uwsgi --ini http://uwsgi.it/configs/myapp.ini
Shakie
26

Resuelto instalando el uwsgi-plugin-python3complemento y agregando la --plugin python3opción al uwsgicomando de inicio

Lisio
fuente
2
Escriba una respuesta amplia con más detalles y establezca la pregunta como resuelta con la respuesta de
@SHaKie
15

Estoy iniciando uwsgi desde advenedizo en Ubuntu. Resolví el problema ejecutando apt-get install uwsgi-plugin-pythony luego agregando plugins=pythona mi application.ini en / etc / uwsgi / applications-available.

shane
fuente
8

de http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html , "Para enrutar solicitudes a un complemento específico, el servidor web debe pasar un número mágico conocido como modificador a las instancias de uWSGI. De forma predeterminada, número se establece en 0, que se asigna a Python ".

Estoy usando 9 para un script bash y está funcionando. los números y sus significados están en esta página: http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html

en mi configuración de nginx:

location ~ .cgi$ {
    include uwsgi_params;
    uwsgi_modifier1 9;
    uwsgi_pass 127.0.0.1:3031;
}
jcomeau_ictx
fuente
0

Estoy usando Ubuntu 18.04 con Python 3. A continuación se muestra la configuración exacta que usé para que funcione.

Debe tener instalado el complemento uWSGI de Python 3:

apt install uwsgi-plugin-python3

La configuración de su sitio Nginx debe apuntar a su socket uWSGI. Asegúrese de que el puerto coincida con la configuración en los pasos posteriores.

    location / {
        uwsgi_pass 127.0.0.1:9090;
        include uwsgi_params;
    }

Vuelva a cargar la configuración de Nginx para reflejar los cambios que acaba de realizar:

systemctl reload nginx

Puede utilizar argumentos de línea de comandos o un archivo ini para la configuración. Yo creé uwsgi.ini. Asegúrese de que la dirección del socket coincida con su configuración de nginx.

[uwsgi]
socket = 127.0.0.1:9090
chdir = /var/www
processes = 4
threads = 2
plugins = python3
wsgi-file = /var/www/app.py

Mi app.py solo tiene un ejemplo básico:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/plain')])
    return [b"Hello World!"]

Ahora inicie el servidor uWSGI desde la línea de comando:

uwsgi uwsgi.ini
Jordan Mack
fuente