JooTC
phpfpm_socket_permission_denied

unix:/var/run/php-fpm.sock failed (13: Permission denied) 해결

php-fpm.sock failed (13: Permission denied) 문제


nginx-502-bad-gateway-error

NginxPHP-FPM 서비스를 재시작한 후 웹페이지에 접속하면 502 Bad Gateway 페이지가 뜨는 경우가 있습니다.

어떤 이유로 502 Bad Gateway 문제가 발생한 것인지 확인하기 위해서 Nginx 에러 로그(/var/log/nginx/error.log)를 찾아보았습니다.

phpfpm_socket_permission_denied

/var/log/nginx/error.log에 표시된 에러 메세지는 다음과 같습니다.

2018/10/27 18:27:49 [crit] 30824#0: *1 connect() to unix:/var/run/php-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.###.###, server: mydomain.com, request: "GET / HTTP/2.0", upstream: fastcgi://unix:/var/run/php-fpm.sock:", host: "mydomain.com"

(또는 아래와 같이 보여지기도 합니다.)

2018/10/27 18:27:49 [crit] 30824#0: *1 connect() to unix:/var/run/php/php7.0-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.###.###, server: mydomain.com, request: "GET / HTTP1.1", upstream: "fsatcgi://unix:/var/run/php/php7.0-fpm.sock:", host: "mydomain.com"

 

 

해결 방법


이 문제의 원인은 다양하지만, 대부분 Nginx 또는 PHP-FPM 설정 파일을 잘못 편집하여 발생하는 경우가 많습니다.

 

이를 해결하기 위해서는 PHP-FPM 설정 파일을 수정해야 합니다.

PHP-FPM 설정 파일은 php.fpm.d 디렉토리의 www.conf 파일명으로 존재합니다. 서버 설정에 따라 www.conf 파일의 이름이 다를 수 있습니다.

(/etc/php5/fpm/pool.d/ 또는 /etc/php/7.0/fpm/pool.d/ 또는 /etc/php-fpm.d/ 에 위치하고 있습니다.)

vim 등의 텍스트 편집기를 사용하여 파일을 열어주세요.

[root@localhost ~]# vim /etc/php-fpm.d/www.conf

 

파일이 열리면 대략 다음과 같은 내용으로 구성되어 있을 것입니다.

[default]
user = nginx
group = nginx
listen = /var/run/php-fpm.sock
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
;listen.allowed_clients = 127.0.0.1
;process.priority = -19 
pm = dynamic
pm.max_children = 5 
pm.start_servers = 2 
pm.min_spare_servers = 1 
pm.max_spare_servers = 3 
;pm.process_idle_timeout = 10s;
;pm.max_requests = 500 
;request_terminate_timeout = 0 
;rlimit_files = 1024
;rlimit_core = 0 
security.limit_extensions = .php .php3 .php4 .php5 .php7 .html .htm

여기서 수정해야 될 부분은 다음과 같습니다.

  • listen.owner
  • listen.group
  • listen.mode

 

먼저 다음 내용을 찾습니다.

listen.owner = nobody
listen.group = nobody
listen.mode = 0666

 

이제 아래와 같이 수정합니다.

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

 

만약 nginx가 아닌 사용자로 웹 서버가 실행 중이라면 listen.ownerlisten.group 부분을 다른 사용자로 수정해야 합니다.

PHP 소켓 파일의 권한을 기타(Other) 사용자가 참조하면서 발생하는 문제로 인해 PHP 최신 버전을 사용할 경우 위 에러 메세지가 발생할 수 있습니다.

listen.mode에서 기타 사용자 권한이 주어졌다면 보안상 취약하게 되므로 기타 사용자의 읽기 및 쓰기 권한을 지정하지 않도록 해야 합니다.

 

모든 설정이 완료되었다면 PHP-FPM 서비스를 재시작해줍니다. PHP의 버전에 따라 실행 방법이 달라질 수 있습니다.

[root@localhost]# service php-fpm restart
또는
[root@localhost]# service php5-fpm restart
또는
[root@localhost]# service php7.0-fpm restart

 

이제 다시 해당 웹페이지에 접속하여 문제가 발생하지 않는지 확인할 수 있습니다.

이 글에 대해 어떻게 생각하시나요?
유용한 포스트였나요? 여러분의 의견을 하단의 Vote와 댓글로 남겨주세요 🙂
유용합니다!
아쉽습니다.

여러분의 의견을 댓글로 남겨주세요.

avatar
error: s