최근 빅데이터 처리 시 웹사이트에서 항상 504 Gateway Time-out이 나타나서 인터넷에서 몇 가지 정보를 찾아보았습니다
Nginx 502 Bad Gateway의 의미는 요청한 PHP입니다. -CGI 실행은 되었지만 어떤 이유(보통 리소스 읽기 문제)로 인해 완료되지 않고 PHP-CGI 프로세스가 종료되었습니다.
Nginx 504 게이트웨이 시간 초과는 요청한 게이트웨이가 요청되지 않았음을 의미합니다. 간단히 말하면 실행 가능한 PHP-CGI가 요청되지 않았음을 의미합니다.
이 두 가지 문제를 해결하려면 실제로 종합적인 사고가 필요합니다. 일반적으로 Nginx 502 Bad Gateway는 php-fpm.conf 설정과 관련이 있고 Nginx 504 Gateway Time-out은 nginx.conf 설정과 관련이 있습니다. 관련된.
올바른 설정은 서버 자체의 성능, 방문자 수 등 여러 요소를 고려해야 합니다.
제가 현재 사용하고 있는 서버를 예로 들면, CPU는 Pen4 1.5G, 메모리는 1GB, CENTOS 시스템인데 동시 접속자가 50명 정도 됩니다.
하지만 대부분의 온라인 사용자는 많은 정보 처리를 위해 PHP-CGI를 요청해야 하므로 nginx.conf를 다음과 같이 설정했습니다.
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300초;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
fastcgi_temp_file_write_size 256k; cgi_intercept_errors 켜짐
여기서 가장 중요한 설정은
fastcgi_connect_timeout 300s;
이는 PHP-CGI의 연결, 전송 및 읽기 시간을 300초로 규정합니다. 따라서 내 서버에서는 504 게이트웨이 시간 초과 오류가 거의 발생하지 않습니다. 가장 중요한 것은 502 잘못된 게이트웨이 및 504 게이트웨이 시간 초과로 직접 연결되는 php-fpm.conf 설정입니다.
php-fpm.conf의 몇 가지 중요한 매개변수를 자세히 살펴보겠습니다.
php-fpm.conf에는 두 개의 중요한 매개변수가 있는데, 하나는 "max_children"이고 다른 하나는 " request_terminate_timeout"
제가 설정한 두 가지 값 중 하나는 "40"이고 다른 하나는 "900"인데 이 값은 보편적이지 않아 직접 계산해야 합니다.
계산 방법은 다음과 같습니다.
서버 성능이 좋고 광대역 리소스가 충분하며 PHP 스크립트에 루프나 버그가 없으면 직접 설정할 수 있습니다. "request_terminate_timeout"을 0초로 설정합니다. 0의 의미는 PHP-CGI가 시간 제한 없이 계속 실행되도록 하는 것입니다. 그리고 이를 수행할 수 없는 경우, 즉 PHP-CGI에 버그가 있거나 대역폭이 충분하지 않거나 다른 이유로 인해 PHP-CGI가 일시 중지될 수 있는 경우 다음을 수행하는 것이 좋습니다. "request_terminate_timeout"을 할당하십시오. 서버 성능에 따라 설정할 수 있는 값입니다. 일반적으로 성능이 좋을수록 20분에서 30분 사이에서 더 높게 설정할 수 있습니다. 내 서버 PHP 스크립트는 오랜 시간 동안 실행해야 하기 때문에 일부는 10분 이상 걸릴 수 있으므로 PHP-CGI가 종료되어 502가 나타나지 않도록 900초로 설정했습니다. 잘못된 게이트웨이 오류입니다.
그리고 "max_children" 값은 어떻게 계산되나요? 원칙적으로 값이 클수록 php-cgi 프로세스가 더 빨리 처리되고 대기 중인 요청이 줄어듭니다. . "max_children" 설정도 서버 성능에 따라 설정해야 합니다. 일반적으로 서버의 각 php-cgi가 소비하는 메모리는 일반적인 상황에서 약 20M이므로 "max_children"을 40, 20M*로 설정했습니다. 40=800M은 피크 타임에 모든 PHP-CGI가 소비하는 메모리가 800M 이내임을 의미하며 이는 내 유효 메모리보다 1GB 낮습니다. 그리고 "max_children"이 5-10과 같이 더 작은 값으로 설정되면 php-cgi는 "매우 피곤"해지고 처리 속도가 매우 느려지며 대기 시간이 또한 더 길다. 요청이 오랫동안 처리되지 않으면 504 Gateway Time-out 오류가 나타납니다. 처리 중인 php-cgi에 문제가 발생하면 502 Bad Gateway 오류가 나타납니다.
fastcgi_read_timeout 300초;
위 내용은 nginx 시간 제한을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.