PHP FPM izin verilmedi mi?


9

Neden PHP-FPM bana izin vermedi izin birkaç giriş okudum ama çözemiyorum.

Hata günlükleri şöyle okunur:

    2013/04/20 23:33:28 [crit] 15479#0: *6 open() "/var/lib/nginx/tmp/fastcgi
/2/00/0000000002" failed (13: Permission denied) while reading upstream, client: 
99.999.999.999, server: example.net, request: "GET /wp-admin/ HTTP/1.1", 
upstream: "fastcgi://unix:/tmp/php-fpm.sock:", host: "example.net", referrer:    
"http://example.net/"

Ben biraz ama kayboldum:

  1. / Var / lib / nginx / tmp'yi ec2 kullanıcısına ayarladım (hatta kontrol etmek için her şey +777)
  2. /Tmp/php-fpm.sock öğesini ec2 kullanıcısına ayarladım
  3. nginx conf dosyası ec2-user olarak ayarlandı
  4. php-conf kullanıcı ve grup ec2-kullanıcı olarak ayarlanır
  5. ps aux, tüm php-fpm ve nginx işlemlerinde ec2 kullanıcısı verir

Nginx Yapılandırmam birçok dosya içeriyor, temel conf:

user              ec2-user ec2-user;
worker_processes  5;  
error_log /opt/nginx/error.log;    
pid        /var/run/nginx.pid;    
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;    
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /opt/nginx/access.log main;    
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 13m;
    index index.php index.html index.htm;
    upstream php {
       server unix:/tmp/php-fpm.sock;
    }
    include /etc/nginx/conf.d/*.conf;
    include /mnt/web/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/ dosyam boş / / mnt/web/nginx/conf.d, hepsi "wordpress.conf" içeren bir çok web sitesi yapılandırması içeriyor:

location / {
    try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 24h;
    log_not_found off;
}
location ~ \.php$ {
    try_files $uri =404;    
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass php;
}

/Opt/php/etc/php-fpm.conf dosyam:

include=/opt/php/etc/fpm.d/*.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-fpm.sock
user = ec2-user
group = ec2-user
pm = dynamic
pm.max_children = 250
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
pm.status_path = /fpm-status
ping.path = /fpm-ping
slowlog = log/$pool.log.slow
catch_workers_output = yes

GÜNCELLEME: sorunu buldum, cevaba koy


1
selinux etkin mi? 0 etkin değilse getenforce veya cat / selinux / enforce komutunu çalıştırın
silviud

1
Nginx yapılandırmanızın geri kalanı nedir?
Michael Hampton

1
günlük dosyadaki soketiniz /tmp/php-fpm.sock, ancak / var / lib / nginx / tmp'yi değiştirdiniz - nginx'te chroot yaptınız mı?
silviud

1
çıktıyı mount komutundan gönder
silviud

1
ayrıca evinizdeki tüm dizinlerin ... bakınız serverfault.com/questions/170192/…
silviud

Yanıtlar:


16

I / var / lib / nginx / batmıştı tmp için EC2-user / EC2-kullanıcı (i bile 777 herşey kontrol etmek)

Ama ... Ben de sette / var / lib / zorundaydı nginx için EC2-user / EC2 kullanıcı

... üst nginx klasörünü chown / chgrp'den sonra: başka hata yok.

Bana birkaç saat sürdü ...


7
chown -Rf www-data:www-data /var/lib/nginxbenim için çalıştı. hiçbir şey yapmaya gerek yoktu.
Chris

günlük dosyalarını kontrol her zaman yardımcı olur, bir şeyden önce onları kontrol etmeyi unutmayın :)
üzüntü şiir

9

Bu genellikle olur. Ne zaman usernginx.conf içinde ayar değiştirilir

user nginx;

başka bir şeye. Bu durumda,

user ec2-user ec2-user;

Chris'in yorumu uyarınca chmod komutu gerekli değildir ve bir güvenlik açığı açabilir.

Çözüm:

/ Var / lib / nginx üzerindeki mevcut kullanıcı ve grup sahipliğini kontrol edin.

$ ls -ld /var/lib/nginx
drwx------ 3 nginx nginx 4096 Aug  5 00:05 /var/lib/nginx

Bu, muhtemelen varolmayan bir kullanıcı ve grubun nginxbu klasöre sahip olduğunu bildirir . Bu, dosya yüklemeyi önler.

Bu durumda klasör sahipliğini nginx.conf dosyasında tanımlanan kullanıcı olarak değiştirin ec2-user(sudo gerekli olmayabilir).

$ sudo chown -Rf ec2-user:ec2-user /var/lib/nginx

Gerçekten değiştiğini doğrulayın.

$ ls -ld /var/lib/nginx
drwx------ 3 ec2-user ec2-user 4096 Aug  5 00:05 /var/lib/nginx

İzin reddedildi hatası şimdi kaldırılmalıdır. Error.log dosyasını kontrol edin (nginx.conf error_log konumuna göre).

$ sudo nano /opt/nginx/error.log

Bu işe yaramazsa, nginx ve php-fpm'yi yeniden yüklemeniz gerekebilir.

$ sudo service nginx reload
$ sudo service php-fpm reload

Bu benim google bulut Centos 7 sunucumda hile yaptı.
Damodar Bashyal

3

Diğer çözümlerin hiçbiri benim için çalışmadı, ama bunu işe yaradı:

$ apt-get install php-pear php5-dev
$ pecl install timezonedb
$ echo 'extension=timezonedb.so'> /etc/php5/mods-available/timezonedb.ini
$ ln -sf /etc/php5/mods-available/timezonedb.ini /etc/php5/conf.d/30-timezonedb.ini
$ service php5-fpm restart

Kaynak


Tamam, birkaç çözüm denedik ve bu işe yaradı. Neden işe yaradığını veya sorunun ne olduğunu bilmiyoruz, ama işe yaradı.
Neil Masters

1

Dosya yükleme ile benzer bir sorun var. nginx 500 hatası 2015/07/05 03:50:36 [crit] 3656#0: *7 open() "/var/lib/nginx/tmp/client_body/0000000007" failed (13: Permission denied), client: 10.0.2.2, server: www.test.com, request: "POST /api/v1/users HTTP/1.1", host: "test"

Sorun sadece izin ile ilgili, ben sadece ayarlamak chmod -R 755 /var/lib/nginxve işler çalıştı!


0

İzinlerle ilgili sorunumu çözdüm. En kolay ve basit yol php-fpm veya nginx'i sudo (süper kullanıcı) olarak çalıştırmak değildi. Yapmanız gerekenler:

  1. kullaniciadiniz için nginx için tüm günlük çıkış yerleri chown: kullaniciadiniz örnek :chown yourUserName:yourUserName /var/log/nginx/error.log
  2. Bir sonraki güncelleme sunucusu dir örneği :chown yourUserName:yourUserName -R /var/www

Root kullanarak php-fpm kullanıcı veya grup veya herhangi bir dinleme kullanıcı veya grup değiştirmek zorunda değildi. Mevcut kullanıcıların adı olacağı için nginx.conf 'user' komutunu da yorumladığınızdan emin olun.


Lütfen aynı cevabı birkaç kez göndermeyin. Ayrıca, bu sorun uzun zamandır çözülmüştür.
Sven

0

/ Var / lib / nginx / üzerinde izinleri düzenlemek yerine, nginx'e / tmp / nginx gibi farklı bir yol kullanmasını söylemek daha anlamlı olmaz mıydı? Bu benim için sorunu düzeltti:

# create the directory
mkdir /tmp/nginx
chown -R nginx.nginx /tmp/nginx (assumes nginx user is named nginx)
chmod -R 700 /tmp/nginx

/ tmp / nginx izinleri tercihen 700 olmalıdır (sahibi /etc/nginx/nginx.conf 'kullanıcı' yönergesinde belirtilenle aynı kullanıcı olduğu sürece sorun olmamalı) veya herhangi bir nedenle gerekiyorsa 770 grup izinleriyle i / o gerçekleştirmek için farklı bir dosya sahibine ve nginx'e sahip olmak. Bunu hiç görmedim ama kim bilir.

Centos7'de, /etc/nginx/nginx.conf dosyasını düzenleyerek nginx'e bu yeni dizini istemci gövdeleri için kullanmasını söyleyin

...

http {
  ...
  client_body_temp_path /tmp/nginx 1 2;
  ...
}

ve nginx'i yeniden başlatın (tekrar centos7)

systemctl restart nginx

Asla 777 hiçbir şey chmod. Özellikle önbellek değil! Artık herhangi bir yerel kullanıcı önbelleğinizi yeniden yazabilir ve kullanıcılarınıza potansiyel olarak zararlı veriler gönderebilir. Yüklemeler için, biri onun yerine kendi yüklemesini kullanabilir.
Michael Hampton

İsa ahbap rahatla, bu yapı bir demo kümesinin parçası. Ama daha iyi bilmeyen insanlar için iyi bir yakalama, cevabı düzenleyeceğim.
siliconrockstar
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.