PHP FPM은 권한이 거부 되었습니까?


9

PHP-FPM이 왜 권한 거부를 줄 수 있는지에 대한 몇 가지 항목을 읽었지만 해결할 수는 없습니다.

오류 로그는 다음과 같습니다.

    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/"

나는 조금 있지만 잃어 버렸다.

  1. / var / lib / nginx / tmp를 ec2-user로 설정했습니다 (확인해야 할 모든 것을 +777까지).
  2. /tmp/php-fpm.sock을 ec2-user로 설정했습니다.
  3. nginx conf 파일이 ec2-user로 설정되었습니다
  4. php-conf는 사용자 및 그룹 ec2-user로 설정됩니다
  5. ps aux는 모든 php-fpm 및 nginx 프로세스에서 ec2-user를 제공합니다.

내 Nginx 구성에는 많은 파일이 포함되어 있으며 기본 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/가 비어 있습니다. /mnt/web/nginx/conf.d에는 "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;
}

내 /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

업데이트 : 문제를 발견했습니다. 답변에 넣으십시오.


1
selinux가 활성화되어 있습니까? 0이 활성화되지 않은 경우 getenforce 또는 cat / selinux / enforce를 실행하십시오.
silviud

1
나머지 nginx 구성은 무엇입니까?
Michael Hampton

1
로그 파일의 소켓은 /tmp/php-fpm.sock이지만 / var / lib / nginx / tmp를 변경했습니다. nginx에서 chroot를 했습니까?
silviud

1
명령 마운트에서 출력을 보내십시오
silviud

1
또한 집안의 모든 디렉토리가 ... serverfault.com/questions/170192/…
silviud

답변:


16

/ var / lib / nginx / tmp 를 ec2-user / ec2-user로 설정했습니다 (확인해야 할 모든 것을 +777까지)

그러나 ... / var / lib / nginx 를 ec2-user / ec2-user로 설정해야했습니다.

... 또한 상위 nginx 폴더를 chown / chgrp 한 후 더 이상 오류가 없습니다.

몇 시간이나 걸렸어 ...


7
chown -Rf www-data:www-data /var/lib/nginx나를 위해 일했다. 아무것도 chmod 할 필요가 없었습니다.
Chris

로그 파일을 확인하는 것은 항상 : 아무것도하기 전에를 확인하기 위해 기억하는 데 도움이
슬픔시

9

이것은 일반적으로 발생합니다. usernginx.conf 의 설정이

user nginx;

다른 것에. 이 경우

user ec2-user ec2-user;

chmod 명령은 Chris의 의견에 따라 필요하지 않으며 보안 허점을 열 수 있습니다.

해결책:

/ var / lib / nginx에서 현재 사용자 및 그룹 소유권을 확인하십시오.

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

이것은 존재하지 않는 사용자와 그룹 nginx이이 폴더를 소유하고 있음을 알려줍니다 . 파일 업로드가 방지됩니다.

이 경우 폴더 소유권을 nginx.conf에 정의 된 사용자로 변경하십시오 (스도는 ec2-user필요하지 않을 수 있음).

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

실제로 변경되었는지 확인하십시오.

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

권한 거부 오류가 사라집니다. error.log를 확인하십시오 (nginx.conf error_log 위치 기준).

$ sudo nano /opt/nginx/error.log

그래도 작동하지 않으면 nginx 및 php-fpm을 다시로드해야 할 수도 있습니다.

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

내 Google 클라우드 Centos 7 서버에서 트릭을 수행했습니다.
Damodar Bashyal

3

다른 솔루션 중 어느 것도 나를 위해 일하지 않았지만 이것이 효과가 있음을 알았습니다.

$ 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

출처


우리는 여러 가지 해결책을 시도했으며 이것이 효과가 있습니다. 우리는 왜 그것이 효과가 있었는지 또는 문제가 무엇인지 모릅니다.
닐 마스터즈

1

파일 업로드와 비슷한 문제가 있습니다. 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"

문제는 권한과 관련이 있습니다. 방금 설정 chmod -R 755 /var/lib/nginx하고 작업했습니다!


0

권한으로 내 문제를 해결했습니다. 가장 쉬운 방법과 가장 간단한 방법은 php-fpm 또는 nginx를 sudo (수퍼 유저)로 실행하지 않는 것입니다. 당신이해야 할 일은 :

  1. nginx의 모든 로그 출력 위치를 yourUserName : yourUserName 예제로 chown하십시오 .chown yourUserName:yourUserName /var/log/nginx/error.log
  2. 다음 업데이트 서버 디렉토리와 예제 :chown yourUserName:yourUserName -R /var/www

루트를 사용하지 않으면 php-fpm 사용자 또는 그룹 또는 청취하는 사용자 또는 그룹을 변경할 필요가 없었습니다. nginx.conf 'user'도 현재 사용자 이름이므로 주석 처리하십시오.


동일한 답변을 여러 번 게시하지 마십시오. 또한이 문제는 오랫동안 해결되었습니다.
Sven

0

/ var / lib / nginx / what에 대한 권한을 편집하는 대신, nginx에 / tmp / nginx와 같은 다른 경로를 사용하도록 지시하는 것이 더 의미가 없습니까? 이것은 나를 위해 문제를 해결했습니다.

# 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 권한은 700이어야합니다 (소유자가 /etc/nginx/nginx.conf 'user'지시문에 지정된 동일한 사용자 인 경우 문제가되지 않아야 함) 또는 770 그룹 권한을 통해 I / O를 수행하기 위해 다른 파일 소유자와 nginx가 있어야합니다. 그것을 보지 못했지만 누가 아는가.

centos7에서 /etc/nginx/nginx.conf를 편집하여 nginx에 클라이언트 본문에 새 디렉토리를 사용하도록 지시하십시오.

...

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

nginx를 다시 시작하십시오 (centos7)

systemctl restart nginx

777을 chmod하지 마십시오. 특히 캐시가 아닙니다! 이제 모든 로컬 사용자가 캐시를 다시 작성하고 잠재적으로 악성 데이터를 사용자에게 보낼 수 있습니다. 업로드의 경우 누군가가 대신 자신의 업로드를 대체 할 수 있습니다.
Michael Hampton

예수 친구는 긴장을 풀고,이 빌드는 데모 클러스터의 일부입니다. 그러나 잘 모르는 사람들을 위해 잘 잡으면 답을 편집하겠습니다.
siliconrockstar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.