web-dev-qa-db-fra.com

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

Je travaille à 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:8001 sur le serveur nginx, l'erreur suivante apparaît dans mon fichier journal des erreurs.

2014/05/30 11:59:42 [crit] 4075#0: *6 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", Host: "localhost:8080"

Mon fichier nginx.conf

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, je reçois 502 Bad Gateway.

Quelle erreur est-ce que je fais?

237
Mulagala

J'ai eu un problème similaire à faire fonctionner Fedora 20, Nginx, Node.js et Ghost (blog). Il se trouve 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 corrigeait 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

550
joebarbere

J'ai rencontré ce problème aussi. 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 le changement 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
167
Sid

Avait 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 permission {écriture} refusée. Puis, quand j'ai résolu le problème, j'ai refusé une permission {connectto}. Puis de nouveau à permission {écriture} refusée.

Après @Sid, répondez ci-dessus en vérifiant les indicateurs à l'aide de getsebool -a | grep httpd et en les basculant, ce qui s'ajoute à la désactivation de httpd_can_network_connect. http_anon_write était également désactivé, ce qui a entraîné une autorisation d’écriture refusée 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 avec Sudo cat /var/log/audit/audit.log | grep nginx | grep a nié comme expliqué ci-dessus.

Je les ai donc résolus un à la fois, en basculant les drapeaux un à un.

setsebool httpd_can_network_connect on -P

Puis en exécutant 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 de grepp'ing 'audit.log nginx, refusée.

13
unlockme

J'ai résolu mon problème en exécutant mon nginx en tant qu'utilisateur actif qui est mulagala. Par défaut, l'utilisateur en tant que nginx dans mon fichier nginx.conf.Nous pouvons trouver cette ligne en haut de le fichier nginx.conf.

user nginx;

changez ceci en votre nom d'utilisateur de travail actuel comme

user  mulagala;
10
Mulagala

si l'erreur "502 passerelle incorrecte" jette sur l'URL de l'API centos pour le transfert 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
1
Ezhil Arasan

J'ai rencontré ce problème aussi. 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
sule

13 autorisations refusées lors de la connexion à upstreamnginx sur le serveur centos -

setsebool -P httpd_can_network_connect 1

0
kumar

Merci, les gars :) maintenant je peux utiliser le proxy Nginx pour mon URL Kibana

commande vraiment utile :) setsebool -P httpd_can_network_connect 1

0
Abhishek Jalan
  1. Vérifiez l'utilisateur dans /etc/nginx/nginx.conf
  2. Changer la propriété en utilisateur.
Sudo chown -R nginx:nginx /var/lib/nginx

Maintenant, vois la magie.

0