(13: autorisation refusée) lors de la connexion à l'amont: [nginx]

296

Je travaille avec la configuration du projet Django avec Nginx et Gunicorn.

Pendant que j'accède à mon port gunicorn mysite.wsgi:application --bind=127.0.0.1:8001sur le serveur Nginx, j'obtiens l'erreur suivante dans mon fichier journal d'erreurs;

2014/05/30 11:59:42 [crit] 4075 # 0: * 6 échec de la connexion () à 127.0.0.1:8001 (13: autorisation refusée) lors de la connexion en amont, client: 127.0.0.1, serveur: localhost, demande: "GET / HTTP / 1.1", en amont "http://127.0.0.1:8001/":, hôte: "localhost: 8080"

Voici le contenu de mon nginx.confdossier;

server {
    listen 8080;
    server_name localhost;
    access_log  /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

Dans la page HTML que je reçois 502 Bad Gateway.

Quelle erreur est-ce que je fais?

Mulagala
la source

Réponses:

680

J'ai eu un problème similaire pour que Fedora 20, Nginx, Node.js et Ghost (blog) fonctionnent. Il s'avère que mon problème était dû à SELinux .

Cela devrait résoudre le problème:

setsebool -P httpd_can_network_connect 1

Détails

J'ai vérifié les erreurs dans les journaux SELinux:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

Et constaté que l'exécution des commandes suivantes a résolu mon problème:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

Références:

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels

http://www.linuxproblems.org/wiki/Selinux

joebarbere
la source
22
Merci, cela a également résolu mon problème, je suis sur CentOS 7.
Jahan
21
Merci. Je devais yum install policycoreutils-pythonafin d'obtenir d' audit2allowabord. Référence: centos.org/forums/viewtopic.php?t=5012
gross.jonas
Merci beaucoup, cela fonctionne pour moi en utilisant un serveur de nœuds. (Redhat 7)
BlaShadow
Voir aussi ici . Dans mon cas, j'ai dû ajouter nginx au groupe de l'utilisateur dans le répertoire personnel dans lequel le wwwroot était stocké.
1
Sur Fedora 23, l'installation de la policycoreutils-pythonn'a pas fourni la commande audit2allow. Après quelques recherches, j'ai découvert que vous devriez installer le paquet devel yum install policycoreutils-devel. Référence: danwalsh.livejournal.com/61710.html
Joseph N.
182

J'ai aussi rencontré ce problème. Une autre solution consiste à basculer la valeur booléenne SELinux pour la connexion réseau httpd on(Nginx utilise l'étiquette httpd).

setsebool httpd_can_network_connect on

Pour que la modification persiste, utilisez l'indicateur -P.

setsebool httpd_can_network_connect on -P

Vous pouvez voir une liste de tous les booléens SELinux disponibles pour httpd en utilisant

getsebool -a | grep httpd
Sid
la source
1
Cela a fonctionné, merci. J'ai mis à jour à partir de CentOS 6.5 -> 6.7 et la valeur par défaut doit avoir été désactivée lors de la mise à jour, car cela fonctionnait bien avant la mise à jour. Solution simple.
Mike Purcell
16

J'ai eu un problème similaire sur Centos 7. Lorsque j'ai essayé d'appliquer la solution prescrite par Sorin, j'ai commencé à bouger par cycles. J'ai d'abord eu une autorisation {écriture} refusée. Puis quand j'ai résolu que j'avais une autorisation {connectto} refusée. Revenez ensuite à la permission {écriture} refusée.

Après la réponse @Sid ci-dessus de vérifier les drapeaux en les utilisant getsebool -a | grep httpdet de les basculer, j'ai constaté qu'en plus de la connexion httpd_can_network_connect désactivée. http_anon_write était également désactivé, ce qui a entraîné une autorisation refusée en écriture et une autorisation refusée {connectto}

type=AVC msg=audit(1501830505.174:799183): avc:  
denied  { write } for  pid=12144 comm="nginx" name="myroject.sock" 
dev="dm-2" ino=134718735 scontext=system_u:system_r:httpd_t:s0 
tcontext=system_u:object_r:default_t:s0 tclass=sock_file

Obtenu en utilisant sudo cat /var/log/audit/audit.log | grep nginx | grep nié comme expliqué ci-dessus.

Je les ai donc résolus un à la fois, en activant les drapeaux l'un après l'autre.

setsebool httpd_can_network_connect on -P

Ensuite, exécutez les commandes spécifiées par @sorin et @Joseph ci-dessus

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | 
audit2allow -M mynginx
sudo semodule -i mynginx.pp

Fondamentalement, vous pouvez vérifier les autorisations définies sur setsebool et les corréler avec l'erreur obtenue à partir de grepp'ing 'audit.log nginx, refusée

unlockme
la source
14

J'ai résolu mon problème en exécutant mon Nginx en tant qu'utilisateur avec lequel je suis actuellement connecté, mulagala .

Par défaut, l'utilisateur en tant que nginx est défini dans la partie supérieure du nginx.conffichier, comme illustré ci-dessous;

user nginx; # Default Nginx user

Remplacez nginx par le nom de votre utilisateur actuel - ici, mulagala .

user mulagala; # Custom Nginx user (as username of the current logged in user)

Cependant, cela peut ne pas résoudre le problème réel et peut avoir des effets secondaires occasionnels.

Pour une solution efficace, veuillez vous référer à la solution de Joseph Barbere .

Mulagala
la source
Merci qui m'a aidé à traverser cela
Overlord
4

si l'erreur "502 Bad Gateway" déclenche l'url de l'api centos pour le passage du proxy de la passerelle api sur nginx, exécutez la commande suivante pour résoudre le problème

sudo setsebool -P httpd_can_network_connect 1
Ezhil Arasan
la source
2

13-permission-refusée-lors-de-la-connexion-upstreamnginx sur le serveur centos -

setsebool -P httpd_can_network_connect 1

kumar
la source
1

J'ai aussi rencontré ce problème. J'utilise Nginx avec HHVM, la solution ci-dessous a résolu mon problème:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"

sudo restorecon -R -v /etc/nginx/fastcgi_temp
sule
la source
1
  1. Archiver l'utilisateur /etc/nginx/nginx.conf
  2. Changez de propriétaire en utilisateur.
sudo chown -R nginx:nginx /var/lib/nginx

Maintenant, voyez la magie.

anjaneyulubatta505
la source
0

Merci beaucoup. J'ai appliqué ce guide sur: Centos 7, AspNet Core 3.1, configuration Nginx.

Quang Vu
la source
0

Merci à tous pour les réponses. La réponse de Kumar le 21 août 19 à 12:14 m'a donné un répit après quelques jours de dépannage du problème que j'avais, à savoir:

connect() to 127.0.0.1:9090 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server

La solution que j'ai appliquée était la suivante:

setsebool -P httpd_can_network_connect 1
user386578
la source
-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
Titane
la source