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