Nginx와 PHP-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 = nobody listen.group = nobody listen.mode = 0666
이제 아래와 같이 수정합니다.
listen.owner = nginx listen.group = nginx listen.mode = 0660
만약 nginx가 아닌 사용자로 웹 서버가 실행 중이라면 listen.owner
과 listen.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
이제 다시 해당 웹페이지에 접속하여 문제가 발생하지 않는지 확인할 수 있습니다.
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…
View Comments
와 감사합니다ㅠㅠ