Ich habe mehrere Einträge darüber gelesen, warum PHP-FPM mir die verweigerte Erlaubnis erteilt, aber ich kann sie nicht lösen.
Die Fehlerprotokolle lauten wie folgt:
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/"
Ich bin ein wenig aber verloren:
- Ich habe die / var / lib / nginx / tmp auf ec2-user gesetzt (ich habe sogar +777 alles zu überprüfen)
- Ich habe die Datei /tmp/php-fpm.sock auf ec2-user gesetzt
- Die Datei nginx conf ist auf ec2-user eingestellt
- das php-conf ist auf user und group ec2-user eingestellt
- ps aux gibt ec2-user für alle php-fpm- und nginx-prozesse
Meine Nginx-Konfiguration enthält viele Dateien. Die grundlegende Konfiguration lautet:
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;
}
Mein /etc/nginx/conf.d/ ist leer. Mein /mnt/web/nginx/conf.d enthält VIELE Website-Konfigurationen, die alle "wordpress.conf" enthalten:
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;
}
Meine /opt/php/etc/php-fpm.conf:
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
UPDATE: habe das Problem gefunden und in die Antwort eingetragen
nginx
amazon-ec2
php-fpm
Edelwasser
quelle
quelle
Antworten:
Ich hatte / var / lib / nginx / tmp auf ec2-user / ec2-user gesetzt (ich habe sogar +777 alles zu überprüfen)
Aber ... ich musste auch / var / lib / nginx auf ec2-user / ec2-user setzen
... nachdem auch der übergeordnete Nginx-Ordner chown / chgrp: keine Fehler mehr.
Hat ein paar Stunden gedauert ...
quelle
chown -Rf www-data:www-data /var/lib/nginx
arbeitete für mich. brauchte nichts zu ändern.Dies geschieht im Allgemeinen. Wenn die
user
Einstellung in nginx.conf von geändert wirdzu etwas anderem. In diesem Fall,
Der Befehl chmod ist laut Chris 'Kommentar nicht erforderlich und könnte eine Sicherheitslücke öffnen.
Lösung:
Überprüfen Sie den aktuellen Benutzer- und Gruppenbesitz in / var / lib / nginx.
Dies zeigt Ihnen, dass ein möglicherweise nicht vorhandener Benutzer und eine Gruppe mit
nginx
diesem Namen diesen Ordner besitzt. Dies verhindert das Hochladen von Dateien.Ändern Sie in diesem Fall den Ordnerbesitz in den in nginx.conf definierten Benutzer
ec2-user
(sudo ist möglicherweise nicht erforderlich).Stellen Sie sicher, dass es sich tatsächlich geändert hat.
Der Fehler "Berechtigung verweigert" sollte jetzt verschwinden. Überprüfen Sie das error.log (basierend auf dem Speicherort von nginx.conf error_log).
Wenn das nicht funktioniert, müssen Sie möglicherweise nginx und php-fpm neu laden.
quelle
Keine der anderen Lösungen hat bei mir funktioniert, aber ich fand, dass dies funktioniert:
Quelle
quelle
Ich habe das ähnliche Problem beim Hochladen von Dateien. Nginx 500 Fehler
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"
Das Problem bezog sich nur auf die Erlaubnis, ich habe es gerade eingestellt
chmod -R 755 /var/lib/nginx
und die Dinge haben funktioniert!quelle
Habe gerade mein Problem mit Berechtigungen gelöst. Der einfachste und einfachste Weg war, php-fpm oder nginx nicht als sudo (Superuser) auszuführen. Was Sie tun müssten, ist:
chown yourUserName:yourUserName /var/log/nginx/error.log
chown yourUserName:yourUserName -R /var/www
Da ich root nicht benutzte, musste ich weder den Benutzer oder die Gruppe von php-fpm noch einen abhörenden Benutzer oder Gruppen ändern. Stellen Sie sicher, dass Sie auch nginx.conf 'user' auskommentieren, da dies der aktuelle Benutzername ist.
quelle
Wäre es nicht sinnvoller, nginx anzuweisen, einen anderen Pfad wie / tmp / nginx zu verwenden, anstatt die Berechtigungen für / var / lib / nginx / Whatever zu bearbeiten? Dies hat das Problem für mich behoben:
/ tmp / nginx-Berechtigungen sollten vorzugsweise 700 (was kein Problem sein sollte, solange der Eigentümer derselbe Benutzer ist, der in der 'user'-Direktive /etc/nginx/nginx.conf angegeben ist) oder 770 sein, wenn Sie dies aus irgendeinem Grund benötigen einen anderen Dateieigentümer und Nginx haben, um E / A über Gruppenberechtigungen auszuführen. Ich habe das noch nie gesehen, aber wer weiß.
Bearbeiten Sie unter centos7 /etc/nginx/nginx.conf, um nginx anzuweisen, dieses neue Verzeichnis für Client-Körper zu verwenden
und starte nginx neu (wieder centos7)
quelle