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

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


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

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


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 .


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

2

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

setsebool -P httpd_can_network_connect 1


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

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.


0

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


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

-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.