(13: Autorizzazione negata) durante la connessione a monte: [nginx]


296

Sto lavorando alla configurazione del progetto Django con Nginx e Gunicorn.

Mentre accedo alla mia porta gunicorn mysite.wsgi:application --bind=127.0.0.1:8001nel server Nginx, visualizzo il seguente errore nel mio file di registro degli errori;

30/05/2014 11:59:42 [crit] 4075 # 0: * 6 connessione () a 127.0.0.1:8001 non riuscita (13: autorizzazione negata) durante la connessione a monte, client: 127.0.0.1, server: localhost, richiesta: "GET / HTTP / 1.1", upstream:, "http://127.0.0.1:8001/"host: "localhost: 8080"

Di seguito è riportato il contenuto del mio nginx.conffile;

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;
    }
}

Nella pagina HTML che sto ricevendo 502 Bad Gateway.

Che errore sto facendo?

Risposte:


680

Ho avuto un problema simile nel far funzionare Fedora 20, Nginx, Node.js e Ghost (blog). Si scopre che il mio problema era dovuto a SELinux .

Questo dovrebbe risolvere il problema:

setsebool -P httpd_can_network_connect 1

Dettagli

Ho verificato gli errori nei registri SELinux:

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

E ho scoperto che l'esecuzione dei seguenti comandi ha risolto il mio problema:

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

Riferimenti:

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
Grazie, anche questo ha risolto il mio problema, sono su CentOS 7.
— Jahan

21
Grazie. Avevo bisogno yum install policycoreutils-pythondi farlo per audit2allowprimo. Riferimento: centos.org/forums/viewtopic.php?t=5012
— gross.jonas

Grazie mille funziona per me usando un server nodo. (Redhat 7)
— BlaShadow,

Vedi anche qui . Nel mio caso ho dovuto aggiungere nginx al gruppo dell'utente nella cui home directory era memorizzata la wwwroot.

1
Su Fedora 23 l'installazione di policycoreutils-pythonnon ha fornito il comando audit2allow. Dopo alcune ricerche ho scoperto che dovresti installare il pacchetto devel yum install policycoreutils-devel. Riferimento: danwalsh.livejournal.com/61710.html
— Joseph N.

182

Ho riscontrato anche questo problema. Un'altra soluzione è attivare / disattivare il valore booleano SELinux per la connessione alla rete httpd on(Nginx utilizza l'etichetta httpd).

setsebool httpd_can_network_connect on

Per rendere persistente la modifica, utilizzare il flag -P.

setsebool httpd_can_network_connect on -P

Puoi vedere un elenco di tutti i booleani SELinux disponibili per httpd usando

getsebool -a | grep httpd

1
Questo ha funzionato, grazie. Ho aggiornato da CentOS 6.5 -> 6.7 e deve aver disattivato il valore predefinito durante l'aggiornamento, perché funzionava bene prima dell'aggiornamento. Soluzione semplice.
— Mike Purcell,

16

Ho avuto un problema simile su Centos 7. Quando ho provato ad applicare la soluzione prescritta da Sorin, ho iniziato a muovermi in cicli. Per prima cosa ho negato l'autorizzazione {write}. Poi, quando ho risolto che mi è stato negato il permesso {connectto}. Quindi di nuovo al permesso {write} negato.

Seguendo la risposta @Sid sopra di controllare i flag usando getsebool -a | grep httpde commutarli, ho scoperto che oltre a httpd_can_network_connect era spento. Anche http_anon_write è stato disattivato, con conseguente autorizzazione negata in scrittura e autorizzazione negata {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

Ottenuto utilizzando sudo cat /var/log/audit/audit.log | grep nginx | grep negato come spiegato sopra.

Così li ho risolti uno alla volta, attivando le bandiere una alla volta.

setsebool httpd_can_network_connect on -P

Quindi eseguendo i comandi specificati da @sorin e @Joseph sopra

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

Fondamentalmente è possibile controllare le autorizzazioni impostate su setsebool e correlarle con l'errore ottenuto da grepp'ing 'audit.log nginx, negato


14

Ho risolto il mio problema eseguendo il mio Nginx come l'utente con cui ho effettuato l'accesso, mulagala .

Per impostazione predefinita, l'utente come nginx è definito nella parte superiore del nginx.conffile come mostrato di seguito;

user nginx; # Default Nginx user

Cambia nginx con il nome del tuo attuale utente - qui, mulagala .

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

Tuttavia, ciò potrebbe non risolvere il problema reale e potrebbe effettivamente avere effetti collaterali casuali.

Per una soluzione efficace, fare riferimento alla soluzione di Joseph Barbere .


Grazie che mi ha aiutato in questo
— Overlord,

4

se l'errore "502 Gateway non valido" genera centos api url per il proxy del gateway api passa su nginx, eseguire il comando seguente per risolvere il problema

sudo setsebool -P httpd_can_network_connect 1

2

13-permesso-negato-mentre-connettendosi-a-upstreamnginx sul server centos -

setsebool -P httpd_can_network_connect 1


1

Ho riscontrato anche questo problema. Sto usando Nginx con HHVM, sotto la soluzione risolto il mio problema:

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

sudo restorecon -R -v /etc/nginx/fastcgi_temp

1
  1. Controlla l'utente /etc/nginx/nginx.conf
  2. Cambia la proprietà per l'utente.
sudo chown -R nginx:nginx /var/lib/nginx

Ora vedi la magia.


0

Grazie mille. Ho applicato questa guida su: Centos 7, AspNet Core 3.1, installazione di Nginx.


0

Grazie a tutti per le risposte. La risposta di Kumar il 21 agosto 19 alle 12:14 mi diede una pausa dopo alcuni giorni di risoluzione del problema che avevo, cioè:

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

La soluzione che ho applicato era la seguente:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.