Autorizzazione negata durante la lettura a monte


40

Abbiamo distribuito la nostra applicazione rails su nginx e passenger. Le pagine dell'applicazione vengono sempre caricate parzialmente. Non vi sono errori nel registro dell'applicazione, ma il registro errori nginx mostra quanto segue:

2011/02/14 05:49:34 [crit] 25389#0: *645 open() "/opt/nginx/proxy_temp/2/02/0000000022" failed (13: Permission denied) while reading upstream, client: x.x.x.x, server: y.y.y.y, request: "GET /signup/procedures?count=0 HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "y.y.y.y", referrer: "http://y.y.y.y/signup/procedures"


È possibile impostare il livello di registro per il debug: nginx.org/en/docs/debugging_log.html
Rimian

Risposte:


39

Ho avuto lo stesso problema su una configurazione NGINX / PHP-FPM (php-fpm = fcgi migliorata per php).

Puoi scoprire su quale utente sono in esecuzione i processi nginx

ps aux | grep "nginx: worker process"

E poi controlla se le autorizzazioni nei tuoi file proxy sono corrette

ls -l /opt/nginx/proxy_temp/

Nel mio caso, nginx era in esecuzione come www-datae due delle directory nella mia directory proxy appartenevano a root.

Non so ancora come sia successo, ma l'ho risolto facendo (come root)

chown www-data.www-data /opt/nginx/proxy_temp

4
La migliore soluzione!
efkan,

Perché non è ancora accettato?
Kishor Pawar,

1
per coloro che usano #openresty - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp"
BG Bruno

1
Ho interrotto il mio processo nginx, rinominato la cartella con un altro nome, riavviato il processo nginx e aveva creato di nuovo la cartella con le autorizzazioni corrette. Ha funzionato come un fascino!
Chirayu Shishodiya,

8

Probabilmente hai iniziato con l'utente root, quindi l'hai modificato. Ora il problema è che le cartelle della cache, ad es

/var/cache/nginx/client_temp
/var/cache/nginx/fastcgi_temp
/var/cache/nginx/proxy_temp
/var/cache/nginx/scgi_temp
/var/cache/nginx/uwsgi_temp

sono già di proprietà di root, quindi il tuo utente nginx (o qualunque cosa tu stia provando a passare) non può accedervi perché ha un permesso di 700.

Quindi la soluzione è semplice. Interrompi nginx, quindi:

rm -rf /var/cache/nginx/*

o qualunque sia il percorso sulla tua distribuzione e rilascio. Quindi riavviare nginx che ricrea queste cartelle con le autorizzazioni appropriate.


8

Controllare anche il file nginx.conf per assicurarsi di specificare l'utente E il gruppo corretti.

Ho avuto un problema in cui le autorizzazioni per la directory erano impostate per username / nginx, ma l'utente nginx.conf ha specificato solo il nome utente. Per impostazione predefinita, se non viene assegnato alcun gruppo alla direttiva utente, utilizza lo stesso nome dell'utente. Quindi, username / username stavano provando ad accedere a una directory invece di username / nginx. L'aggiornamento della configurazione ha risolto i miei problemi.

Vedi: http://nginx.org/en/docs/ngx_core_module.html#user


2
Puoi per favore pubblicare la configurazione che hai citato qui?
Paweloque,

5

Quindi ho fatto tutto quanto sopra e sfortunatamente per me mi stava dando lo stesso errore. Sto eseguendo un'app di binari impacchettata in un file jar con torquebox su una macchina centos 6.7 con nginx. Ho combattuto per circa 3 ore fino a quando ho trovato un'altra soluzione e spero che aiuti qualcun altro. Secondo questo articolo, nginx può essere eseguito in modalità di applicazione. Ho semplicemente cambiato nginx in modalità permissiva con

setenforce 0

Con ciò, l'errore era sparito e sono stato in grado di eseguire la mia applicazione in un ambiente di gestione temporanea / produzione.

Ero all'oscuro finché non ho trovato l'errore su audit.log

type=AVC msg=audit(1444454198.438:466): avc:  denied  { name_connect } for  pid=3201 comm="nginx" dest=8080 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket

Spero davvero che questo salvi qualcuno nelle 3 ore che ho appena perso.


1
Non sbagli, non so perché qualcuno voti -1 (peccato per lui / lei). Il problema è negli host basati su RedHat / CentOS e selinux. Un modo è setenforce 0 (maleducato), l'altro è con setsebool e opzioni di rete.
periket2000,

Ha aiutato con CentOS 7.2.
MKatleast3,

setsebool -P httpd_can_network_connect 1 da stackoverflow.com/a/24830777/721331
McKelvin il

3

Quando si avvia nginx da un account non privilegiato, il use_temp_path=off.

proxy_cache_path ... use_temp_path=off;

Ciò era necessario per evitare che nginx provasse a mettere i file nei valori predefiniti proxy_temp_path. Dai documenti nginx:

La directory per i file temporanei è impostata in base al parametro use_temp_path (1.7.10). Se questo parametro viene omesso o impostato sul valore on, verrà utilizzata la directory impostata dalla direttiva proxy_temp_path per la posizione specificata. Se il valore è impostato su off, i file temporanei verranno inseriti direttamente nella directory della cache.


-3
chmod 777 /opt/nginx/proxy_temp/

Ho avuto lo stesso problema ed è stato risolto da chmod in quella directory.


13
chmod 777 non è mai una buona idea.
sendmoreinfo,
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.