Essayer de configurer Nginx et uWSGI sur Ubuntu 13.10.
Lorsque j'essaie d'accéder au site Web, tout ce que je reçois est "502 Bad Gateway".
A exécuté apt-get install nginx uwsgi uwsgi-plugin-python3
pour installer nginx/uwsgi.
/etc/nginx/sites-enabled/webpage.com:
server {
listen 80;
server_name webpage.com;
access_log /var/log/nginx/webpage.com_access.log;
error_log /var/log/nginx/webpage.com_error.log;
location / {
uwsgi_pass /var/run/webpage.com.uwsgi.socket;
include uwsgi_params;
uwsgi_param Host $Host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
}
}
/etc/uwsgi/apps-enabled/webpage.com
[uwsgi]
vhost = true
plugin = python3
socket = /tmp/webpage.com.sock
master = true
enable-threads = true
processes = 2
home = /var/www/webpage.com/env
wsgi-file = /var/www/webpage.com/env/hello.py
virtualenv = /var/www/webpage.com/env
chdir = /var/www/webpage.com/env
touch-reload = /var/www/webpage.com/reload
/var/log/nginx/webpage.com_error.log
2014/01/17 16:28:58 [error] 25073#0: *13 connect() to unix:///var/run/webpage.com.uwsgi.socket failed (111: Connection refused) while connecting to upstream, client: 83.109.132.224, server: webpage.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///var/run/webpage.com.uwsgi.socket:", Host: "webpage.com"
hello.py
est juste une application simple bonjour monde.
Cela fait plusieurs heures que je lutte avec ça ... Maintenant, j'ai besoin d'aide :)
En regardant les fichiers de configuration postés ici, vous faites référence au socket dans nginx comme suit:
uwsgi_pass /var/run/webpage.com.uwsgi.socket;
et en uwsgi comme
socket = /tmp/webpage.com.sock
Je réalise que cela n’a rien à voir avec le problème du PO, mais comme c’est le message le plus touché par ce message d’erreur de Google, je voudrais indiquer ce qui a réglé le problème pour moi.
Je suivais un tutoriel qui recommandait de placer uwsgi_pass 127.0.0.1:9090;
dans la configuration nginx
pour un script Python qui avait été configuré dans la configuration uwsgi
avec http-socket = :9090
. le journal des erreurs /var/log/nginx/error.log
montrait le problème: 2015/08/13 02:16:04 [error] 12566#12566: *2 upstream prematurely closed connection while reading response header from upstream, client: ::1, server: ~^(www\.)?(.+)$, request: "GET /hello/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:9090", Host: "kybyz"
, le navigateur me renvoyait l’erreur 502 Bad Gateway.
il y avait deux façons (au moins) de le réparer. la première consistait à changer http-socket
dans la configuration uwsgi
en socket
(comme il s'est avéré, le tutorial recommandé; je ne l'avais tout simplement pas lu assez attentivement). cependant, cela ne me permettrait plus de tester le script directement en pointant mon navigateur sur http://127.0.0.1:9090/
, car le script parlait maintenant du protocole uwsgi
au lieu de http
. J'ai donc reconverti en http-socket
et changé, dans la configuration nginx
, la ligne uwsgi_pass
en proxy_pass http://127.0.0.1:9090;
.
Cela ne répond pas à la question initiale de l'OP, mais j'avais la même erreur dans nginx, connect() to unix:///tmp/uwsgi_dev.sock failed (13: Permission denied) while connecting to upstream
, et j'ai pu résoudre le problème en redémarrant complètement le processus uwsgi. C'est un serveur de production, donc j’étais hésitant à faire un redémarrage forcé, mais le simple rechargement du processus uwsgi n’a pas suffi. J'espère que ça aide quelqu'un.
En règle générale, il s’agit d’un problème d’autorisation de fichier, c’est-à-dire que le fichier de socket uwsgi n’est pas lisible par le processus nginx. Vérifiez l'autorisation du fichier de socket, son dossier parent et son dossier grand-parent, etc. Vous pouvez le faire avec une seule commande (supposons que votre processus nginx soit exécuté par l'utilisateur nginx
):
su nginx -c "[[ -r sockfile ]] && echo ok"
Pour mon application Python Django sur AWS, elle est simplement surchargée.
Tout d'abord, j'ai ajouté plus de serveurs et j'ai constaté que les instances C (calcul) étaient meilleures que les instances d'usage général (M), car la charge du processeur était de 66% (utilisée par d'autres clients) après avoir épuisé le processeur. crédits.
Mais après avoir exécuté l'application pendant un certain temps (et après avoir multiplié par 5 le nombre de demandes entrantes au cours d'une courte période), j'ai également vérifié les performances de la base de données (RDS), qui fonctionnait à 100%. J'ai également augmenté la taille de l'instance de base de données de 4 à 8 UC et maintenant, cela fonctionne à nouveau sans erreur.