Frage Berechtigung beim Lesen von Upstream verweigert


Wir haben unsere Rails-Anwendung auf nginx und passagier implementiert. Intermittierend Seiten der Anwendung werden teilweise geladen. Es gibt keinen Fehler im Anwendungsprotokoll. Aber nginx Fehlerprotokoll zeigt Folgendes:

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"


34
2018-02-14 05:58


Ursprung


Sie können die Protokollstufe für das Debuggen festlegen: nginx.org/de/docs/debugging_log.html - Rimian


Antworten:


Ich hatte das gleiche Problem bei einem NGINX / PHP-FPM-Setup (php-fpm = verbesserte fcgi für PHP).

Sie können herausfinden, unter welchem ​​Benutzer die nginx-Prozesse laufen

ps aux | grep "nginx: worker process"

Und dann überprüfen Sie, ob die Berechtigungen in Ihren Proxy-Dateien korrekt sind

ls -l /opt/nginx/proxy_temp/

In meinem Fall lief nginx als www-data und zwei der Verzeichnisse in meinem Proxy-Verzeichnis gehörten zu root.

Ich weiß nicht, wie es passiert ist, aber ich habe es behoben (als root)

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

33
2017-08-23 13:09



Die beste Lösung! - efkan
Warum ist es noch nicht akzeptiert? - Kishor Pawar
für diejenigen, die #openresty verwenden - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp" - BG Bruno
Du rettest mein Leben. Vielen Dank! - VietTD


Überprüfen Sie auch die Datei nginx.conf, um sicherzustellen, dass Sie den richtigen Benutzer UND die richtige Gruppe angeben.

Ich hatte ein Problem, wo die Berechtigungen für das Verzeichnis für Benutzername / Nginx eingerichtet wurden, aber der Nginx.conf-Benutzer nur Benutzername angegeben. Wenn der Benutzeranweisung keine Gruppe zugewiesen ist, wird standardmäßig derselbe Name wie für den Benutzer verwendet. Also versuchte Benutzername / Benutzername auf ein Verzeichnis statt auf den Benutzernamen / nginx zuzugreifen. Die Aktualisierung der Konfiguration hat meine Probleme behoben.

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


8
2018-01-11 17:25



Kannst du bitte die hier erwähnte Konfiguration posten? - paweloque


Sie haben wahrscheinlich mit dem Benutzer root begonnen und ihn dann geändert. Nun besteht das Problem darin, dass die Cache-Ordner, d.h.

/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

sind bereits im Besitz von root, so dass Ihr nginx (oder was auch immer Sie versuchen zu wechseln) Benutzer kann nicht auf sie zugreifen, denn sie haben eine Erlaubnis von 700.

Die Lösung ist also einfach. Stoppen Sie nginx, dann:

rm -rf /var/cache/nginx/*

oder was auch immer der Pfad auf deiner Distribution ist und loslassen. Starten Sie dann nginx neu, wodurch diese Ordner mit den entsprechenden Berechtigungen neu erstellt werden.


7
2018-04-17 18:01





Also tat ich alles oben und leider gab es mir den gleichen Fehler. Ich führe eine Rails-App in einer JAR-Datei mit Torque-Box auf einem Centos 6.7-Rechner mit Nginx. Ich kämpfte für ungefähr 3 Stunden, bis ich eine andere Lösung fand und ich hoffe, dass es jemand anderem hilft. Gemäß Dieser Beitrag nginx kann im Erzwingungsmodus ausgeführt werden. Ich habe einfach nur nginx in permissive Modus mit geändert

setenforce 0

Damit war der Fehler behoben und ich konnte meine Anwendung in einer Staging- / Produktionsumgebung ausführen.

Ich war ahnungslos, bis ich den Fehler im audit.log fand

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

Ich hoffe wirklich, dass dies jemand die 3 Stunden rettet, die ich gerade verloren habe.


3
2017-10-10 05:29



Du liegst nicht falsch, ich weiß nicht warum jemand abstimmt -1 (Schande über ihn / sie). Das Problem liegt in RedHat / CentOS basierten Hosts und selinux. Eine Möglichkeit ist setenforce 0 (unhöflich), eine andere Möglichkeit ist setsebool und Netzwerkoptionen. - periket2000
Es half mit CentOS 7.2. - MKatleast3
setsebool -P httpd_can_network_connect 1  von stackoverflow.com/a/24830777/721331 - McKelvin


Beim Start von nginx von einem unprivilegierten Konto wird der use_temp_path=off.

proxy_cache_path ... use_temp_path=off;

Dies sollte vermeiden, dass nginx versucht, die Dateien in den Standardzustand zu versetzen proxy_temp_path. Aus der Nginx-Dokumentation:

Das Verzeichnis für temporäre Dateien wird basierend auf dem use_temp_path festgelegt   Parameter (1.7.10). Wenn dieser Parameter weggelassen oder auf den Wert gesetzt wird   on, das Verzeichnis, das von der Anweisung proxy_temp_path für das angegebene Verzeichnis festgelegt wurde   Standort wird verwendet. Wenn der Wert deaktiviert ist, temporäre Dateien   wird direkt in das Cache-Verzeichnis gestellt.


3
2017-11-02 16:37





chmod 777 /opt/nginx/proxy_temp/

Ich hatte das gleiche Problem und löste es mit chmod zu diesem Verzeichnis.


-3
2018-01-29 06:31



chmod 777 ist nie eine gute Idee. - sendmoreinfo