Przeczytałem kilka wpisów o tym, dlaczego PHP-FPM może dać mi odmowę zgody, ale nie mogę jej rozwiązać.
Dzienniki błędów brzmią następująco:
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/"
Jestem trochę ale zagubiony:
- Ustawiłem / var / lib / nginx / tmp na ec2-user (nawet +777 wszystko do sprawdzenia)
- Ustawiłem /tmp/php-fpm.sock na ec2-user
- plik conf nginx jest ustawiony na ec2-user
- php-conf jest ustawiony na user i group ec2-user
- ps aux daje ec2-user we wszystkich procesach php-fpm i nginx
Moja konfiguracja Nginx zawiera wiele plików, podstawowa konfiguracja to:
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;
}
mój /etc/nginx/conf.d/ jest pusty mój /mnt/web/nginx/conf.d zawiera wiele konfiguracji stron internetowych, które wszystkie zawierają „wordpress.conf”:
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;
}
Mój /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
AKTUALIZACJA: znalazłem problem, umieść go w odpowiedzi
nginx
amazon-ec2
php-fpm
Edelwater
źródło
źródło
Odpowiedzi:
Ustawiłem / var / lib / nginx / tmp na ec2-user / ec2-user (nawet +777 wszystko do sprawdzenia)
Ale ... Musiałem także ustawić / var / lib / nginx na ec2-user / ec2-user
... po również chown / chgrp nadrzędny folder nginx: nie więcej błędów.
Zajęło mi to kilka godzin ...
źródło
chown -Rf www-data:www-data /var/lib/nginx
pracował dla mnie. nie musiałem niczego przeskakiwać.Z reguły tak się dzieje. Kiedy
user
ustawienie w nginx.conf zostanie zmienione zna coś innego. W tym przypadku,
Komenda chmod nie jest konieczna według komentarza Chrisa i może otworzyć lukę w zabezpieczeniach.
Rozwiązanie:
Sprawdź aktualnego użytkownika i własność grupy na / var / lib / nginx.
Informuje to, że prawdopodobnie nieistniejący użytkownik i grupa o nazwie
nginx
jest właścicielem tego folderu. Zapobiega to przesyłaniu plików.W takim przypadku zmień własność folderu na użytkownika zdefiniowanego w nginx.conf
ec2-user
(sudo może nie być wymagane).Sprawdź, czy rzeczywiście się zmieniło.
Błąd odmowy uprawnień powinien teraz zniknąć. Sprawdź error.log (w oparciu o lokalizację log_błędu nginx.conf).
Jeśli to nie zadziała, być może będziesz musiał ponownie załadować nginx i php-fpm.
źródło
Żadne inne rozwiązanie nie działało dla mnie, ale okazało się, że działa:
Źródło
źródło
Mam podobny problem z przesyłaniem plików. Błąd nginx 500
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"
Problem dotyczył tylko pozwolenia, właśnie ustawiłem
chmod -R 755 /var/lib/nginx
i wszystko działało!źródło
Właśnie rozwiązałem mój problem z uprawnieniami. Najłatwiejszym i najprostszym było nie uruchamianie php-fpm lub nginx jako sudo (superużytkownik). Co musisz zrobić:
chown yourUserName:yourUserName /var/log/nginx/error.log
chown yourUserName:yourUserName -R /var/www
Nie używając roota nie musiałem zmieniać użytkownika lub grupy php-fpm ani żadnego użytkownika lub grup nasłuchujących. Upewnij się również, że skomentowałeś nginx.conf 'user', ponieważ będzie to nazwa bieżącego użytkownika.
źródło
Zamiast edytować uprawnienia do / var / lib / nginx / cokolwiek, czy nie byłoby sensowniej po prostu powiedzieć nginx, aby używał innej ścieżki, takiej jak / tmp / nginx? To rozwiązało problem:
Uprawnienia / tmp / nginx powinny wynosić 700 (co nie powinno stanowić problemu, o ile właściciel jest tym samym użytkownikiem określonym w dyrektywie /etc/nginx/nginx.conf) lub 770, jeśli z jakiegoś powodu musisz mieć innego właściciela pliku i nginx do wykonywania operacji we / wy za pomocą uprawnień grupy. Nigdy tego nie widziałem, ale kto wie.
Na centos7 edytuj /etc/nginx/nginx.conf, aby poinformować nginx, aby używał tego nowego katalogu do treści klientów
i zrestartuj nginx (ponownie centos7)
źródło