nginx + php7.0-fpm 502 BAD Gateway
nginx는 Apache2에 비해서 빠르고 더 많은 트ㄹ픽을 처리할 수 있는 HTTP 처리 능력을 가진 웹서버 데몬입니다.
아울러 PHP와 같이 구동되는 웹 어플리케이션을 사용할 떄는, PHP-fpm을 사용하여 더 빠른 PHP 처리를 이끌어 낼 수 있지요.
하지만, 간혹 nginx + php-fpm 조합을 활용하여 웹 어플리케이션을 구동할 경우, 특정한 상황의의 경우 502 Bad gateway 에러를 내뿜는 경우를 확인할 수 있습니다.
특정상황
- PHP-fpm으로 처리 해야 되는 자료 중에서 굉장히 크기가 큰 요청을 처리하는 경우
- 서버 반응속도가 느려 PHP-fpm으로 가는 도중 서버 요청에 긴 시간을 요구하는 경우(php 요청이 timeout이 발생하는 것)
문제점
nginx + php-fpm 간혹 502 Bad gateway error를 보여줌
서버에서 nignx / php-fpm 은 정상적으로 작동되는 됨. php-fpm을 restart 하면 다시 사이트가 오류없이 잘작동되는 것을 알수 있다.
해결책 1: nginx HTTP 부분에서 fastcgi 버퍼 사이즈와 timeout 시간 변경
이 해결방법은 가장 대중적인 해결 방법으로써, nginx가 php-fpm으로 PHP 처리 요청을 보냈을 때, 버퍼의 크기를 늘려 처리 용량을 확대해주고 timeout이 처리되는 시간을 늘려주는 방법
nginx의 HTTP (최근 버전의 nginx에서는 /etc/nginx/sites-available/해당사이트) 안의 PHP소켓 관련 설정에서, 아래와 같은 설정을 추가
server { (... 중략 ...) location ~ \.php$ { # With php7-fpm: fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 아래부터 버그 해결을 위해 추가해 주실 옵션입니다. # 502 에러를 없애기 위한 proxy 버퍼 관련 설정입니다. proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; # 502 에러를 없애기 위한 fastcgi 버퍼 관련 설정입니다. fastcgi_buffering on; fastcgi_buffer_size 16k; fastcgi_buffers 16 16k; # 최대 timeout 설정입니다. fastcgi_connect_timeout 600s; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s; # 이 아래 설정은 PHP 성능 향상을 위한 옵션입니다. 추가해 주시면 좋습니다. sendfile on; tcp_nopush off; keepalive_requests 0; (... 이하 생략 ...)
설정후 nginx와 php7.0-fpm을 restart(또는 reload)해주면 된다.
아마 이것으로 대부분의 502 에러는 해결이 된다.
해결책 2 : nginx의 설정 파일과 php-fpm 설정 파일의 소켓 일치시키기
간혹 nginx 의 설정안에서의 ‘fastcgi-pass’ 경로와, php-fpm 설정 파일의 listen 경로가 다른 경우. 502 Bad gateway error 가 나타는 경우가 있다고도 합니다.
이런 경우네느 PHP을 불러오는 대다수의 경우의 에러가 발생하는 경우가 많습니다.
먼저 nginx 설정 파일에서 PHP를 처리하는 부분의,
fastcgi-pass 값을 확인하여 PHP-fpm sock 파일이 정상적으로 위치해 있는지 확인합니다.
(없는 경우에는, sock 파일을 찾아서 적당한 경로로 입력해 주어야 합니다. 많은 경우에는 /var/ 디렉토리 안에서 php 관련 폴더 안에 위치하고 있습니다.)
저는 502 Bad gateway error 문제는해결하기 위해서 구글링하다가 아래 분의 사이트를 참고하고 해결하였습니다 다음에도 이런 경우에 해결방법 1에서 해결되지 못하면 또 다른 방법을 찾아서 실행시켜보고 확인하고 추가적으로 정보를 익히고 적어놓으려고합니다~
참고한 사이트 : 곰곰이오
감사합니다 🙂