Eu li várias entradas sobre por que o PHP-FPM pode me dar permissão negada, mas não consigo resolvê-lo.
Os logs de erro são lidos como:
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/"
Estou um pouco, mas perdido:
- Eu configurei o / var / lib / nginx / tmp como ec2-user (eu até +777 tudo para verificar)
- Eu configurei o /tmp/php-fpm.sock como ec2-user
- o arquivo conf nginx está definido como ec2-user
- o php-conf está definido como user e group ec2-user
- ps aux fornece ao usuário ec2 em todos os processos php-fpm e nginx
Minha configuração do Nginx inclui muitos arquivos, o conf básico é:
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;
}
meu /etc/nginx/conf.d/ está vazio meu /mnt/web/nginx/conf.d contém MUITAS configurações de sites que incluem "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;
}
Meu /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: encontrou o problema, coloque-o na resposta
nginx
amazon-ec2
php-fpm
Edelwater
fonte
fonte
Respostas:
Eu tinha definido o / var / lib / nginx / tmp como ec2-user / ec2-user (eu até +777 tudo para verificar)
Mas ... eu também tive que definir / var / lib / nginx como ec2-user / ec2-user
... depois de chown / chgrp também a pasta principal do nginx: sem mais erros.
Levei algumas horas ...
fonte
chown -Rf www-data:www-data /var/lib/nginx
trabalhou para mim. não precisava chmod nada.Isso geralmente acontece. Quando a
user
configuração no nginx.conf é alterada depara outra coisa. Nesse caso,
O comando chmod não é necessário pelo comentário de Chris e pode abrir uma brecha na segurança.
Solução:
Verifique a propriedade atual do usuário e grupo em / var / lib / nginx.
Isso informa que um usuário e grupo possivelmente inexistente chamado
nginx
possui esta pasta. Isso evita o upload de arquivos.Altere a propriedade da pasta para o usuário definido no nginx.conf neste caso
ec2-user
(o sudo pode não ser necessário).Verifique se realmente mudou.
O erro de permissão negada agora deve desaparecer. Verifique o error.log (com base no local do nginx.conf error_log).
Se isso não funcionar, você pode precisar recarregar o nginx e o php-fpm.
fonte
Nenhuma das outras soluções funcionou para mim, mas achei que funcionava:
Fonte
fonte
Eu tenho o problema semelhante com o upload de arquivos. erro 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"
O problema estava relacionado apenas à permissão, acabei de definir
chmod -R 755 /var/lib/nginx
e tudo funcionou!fonte
Acabei de resolver meu problema com permissões. A maneira mais fácil e simples era não executar o php-fpm ou o nginx como sudo (superusuário). O que você teria que fazer é:
chown yourUserName:yourUserName /var/log/nginx/error.log
chown yourUserName:yourUserName -R /var/www
Ao não usar o root, não tive que alterar o usuário ou grupo php-fpm ou qualquer usuário ou grupo que esteja ouvindo. Certifique-se de comentar também nginx.conf 'user', pois será o nome do usuário atual.
fonte
Em vez de editar permissões em / var / lib / nginx / qualquer outra coisa, não faria mais sentido dizer ao nginx para usar um caminho diferente como / tmp / nginx? Isso corrigiu o problema para mim:
As permissões / tmp / nginx devem ser 700 preferencialmente (o que não deve ser um problema, desde que o proprietário seja o mesmo usuário especificado na diretiva /etc/nginx/nginx.conf 'user') ou 770 se, por algum motivo, você precisar tenha um proprietário de arquivo diferente e nginx para executar a E / S por meio de permissões de grupo. Nunca vi isso, mas quem sabe.
No centos7, edite o /etc/nginx/nginx.conf para informar ao nginx para usar esse novo diretório para corpos de clientes
e reinicie o nginx (novamente centos7)
fonte