문제해결

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

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


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

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

/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

 

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

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

View Comments

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

4주 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

4주 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

1개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago