Yukarı akım okurken izin verilmedi.


40

Ray uygulamalarımızı nginx ve yolcunun üzerine yerleştirdik. Zaman zaman uygulama sayfalarının kısmen yüklenmesi. Uygulama günlüğünde hata yok.Ama nginx hata günlüğü aşağıdakileri gösteriyor:

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"


Günlük seviyesini hata ayıklamaya ayarlayabilirsiniz: nginx.org/en/docs/debugging_log.html
Rimian

Yanıtlar:


39

Aynı NGINX / PHP-FPM kurulumunda da sorun yaşadım (php-fpm = php için geliştirilmiş fcgi).

Nginx işlemlerinin hangi kullanıcı olarak çalıştığını öğrenebilirsiniz.

ps aux | grep "nginx: worker process"

Ve sonra proxy dosyalarınızdaki izinlerin doğru olup olmadığını kontrol edin

ls -l /opt/nginx/proxy_temp/

Benim durumumda, nginx www-datavekil olarak çalışıyordu ve proxy dizinimdeki dizinlerden ikisi köke aitti.

Henüz nasıl olduğunu bilmiyorum, ancak yaparak (root olarak) düzelttim.

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

4
En iyi çözüm!
efkan

Neden henüz kabul edilmedi?
Kishor Pawar

1
#openresty - "chown www-data: www-data -R / usr / yerel / openresty / nginx / * _ temp" kullananlar için
BG Bruno

1
Nginx işlemimi durdurdum, klasörü başka bir isimle yeniden adlandırdım, nginx işlemini yeniden başlattım ve klasörü doğru izinlerle yeniden oluşturdum. Bir cazibe gibi çalıştı!
Chirayu Shishodiya

8

Muhtemelen kullanıcı kökü ile başladınız, sonra değiştirdiniz. Şimdi sorun şu ki, önbellek klasörleri, yani

/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

zaten root aittir, bu nedenle nginx'iniz (veya ne değiştirmeye çalışıyorsanız onu) kullanıcı onlara erişemez, çünkü 700 iznine sahiptir.

Böylece çözüm kolaydır. Nginx'i durdur, sonra:

rm -rf /var/cache/nginx/*

ya da dağıtımınızdaki yol ne ise ve bırakın. Sonra bu klasörleri uygun izinlerle yeniden yaratacak nginx'i yeniden başlatın.


8

Doğru kullanıcıyı VE grubu belirlediğinizden emin olmak için nginx.conf dosyasını da kontrol edin.

Dizindeki izinlerin username / nginx için ayarlandığı yerde bir sorun yaşadım, ancak nginx.conf kullanıcısı yalnızca kullanıcı adını belirtti. Varsayılan olarak, kullanıcı direktifine hiçbir grup verilmezse, kullanıcı ile aynı adı kullanır. Böylece kullanıcı adı / kullanıcı adı, kullanıcı adı / nginx yerine bir dizine erişmeye çalışıyordu. Yapılandırmayı güncellemek sorunlarımı çözdü.

Bakınız: http://nginx.org/en/docs/ngx_core_module.html#user


2
Lütfen bahsettiğiniz konfigürasyonu buraya gönderebilir misiniz?
Ocak'ta

4

Bu yüzden yukarıdakilerin hepsini yaptım ve maalesef bana aynı hatayı veriyordu. Ben nginx bir centos 6.7 makinede torkebox ile bir kavanoz dosyasına paketlenmiş bir raylar uygulaması çalıştırıyorum. Başka bir çözüm bulana kadar bunu yaklaşık 3 saat savaştım ve umarım başkasına yardımcı olur. Bu makaleye göre nginx zorlama modunda çalışabilir. Sadece nginx'i izin verilen moda değiştirdim.

setenforce 0

Böylelikle hata giderildi ve uygulamamı bir hazırlık / üretim ortamında çalıştırabildim.

Audit.log'da hatayı bulana kadar habersizdim.

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

Umarım bu, kaybettiğim 3 saati birinden kurtarır.


1
Yanlış değilsin, neden birisinin neden -1 oy verdiğini bilmiyorum (ona ayıp). Sorun RedHat / CentOS tabanlı konaklarda ve selinux'ta. Bir yol setenforce 0 (kaba), diğeri ise setsebool ve network seçenekleriyle.
periket2000

CentOS 7.2 ile yardımcı oldu.
MKatleast3

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

3

Ayrıcalıklı olmayan bir hesaptan nginx başlatırken use_temp_path=off.

proxy_cache_path ... use_temp_path=off;

Bu, nginx'in dosyaları varsayılana koymaya çalışmaktan kaçınmasını gerektirir proxy_temp_path. Nginx dokümanlarından:

Geçici dosyalar için dizin use_temp_path parametresine (1.7.10) göre ayarlanır. Bu parametre belirtilmezse veya açık değere ayarlanırsa, verilen yer için proxy_temp_path yönergesi tarafından belirlenen dizin kullanılır. Değer kapalı olarak ayarlanırsa, geçici dosyalar doğrudan önbellek dizinine yerleştirilir.


-3
chmod 777 /opt/nginx/proxy_temp/

Aynı problemi yaşadım ve chmod tarafından bu dizine çözüldü.


13
chmod 777 asla iyi bir fikir değildir.
sendmoreinfo 14:12
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.