대용량 메모리는 다음 매개변수를 늘려 502 오류를 효과적으로 줄일 수 있습니다.
php-fpm
nginx의 주요 수정 매개변수
fastcgi_connect_timeout 1800;
fastcgi_send_timeout 1800;
fastcgi_read_timeout 1800;
fastcgi_buffer _ 크기 1024k ;
다음은 기본 매개변수입니다
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;fastcgi_read_timeout 300;
fastcgi_buffers 4 _busy_buffers_size 128k ;fastcgi_temp_file_write_size 128k;
----------------------------------- -------------- ---------- -------------- ----
[ 기사 작성자: Wei Shaoqian, 재인쇄하려면 원본 링크를 표시하십시오: http:/ /mven.cn/nginx-502-504/ ]
1. 오류 메시지 설명:
Nginx 502 잘못된 게이트웨이를 의미합니다. 요청한 PHP-CGI가 실행되었지만 어떤 이유로(일반적으로 리소스 검색 문제 읽기) 실행이 완료되지 않아 PHP-CGI 프로세스가 종료되었습니다.
Nginx 504 게이트웨이 시간 초과는 요청한 게이트웨이가 요청되지 않았음을 의미합니다. 간단히 말하면 실행 가능한 PHP-CGI가 요청되지 않았음을 의미합니다.
2. 오류 메시지의 원인 분석:
일반적으로 말해서 Nginx 502 Bad Gateway는 이 두 가지 문제를 해결하는 데 실제로 종합적인 사고가 필요합니다. php-fpm.conf
설정과 관련이 있으며 Nginx 504 Gateway Time-out은 nginx.conf 설정과 관련이 있습니다.
php-fpm.conf에는 두 개의 중요한 매개변수가 있습니다. 하나는 "max_children"이고 다른 하나는 "request_terminate_timeout"이지만 이 값은 보편적이지 않으며 자체 계산이 필요합니다.
계산 방법은 다음과 같습니다.
서버 성능이 좋고 광대역 리소스가 충분하면 시스템이 없습니다. 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가 나타납니다. 처리가 매우 지체되는 php-cgi에 문제가 발생하면 게이트웨이 시간 초과 오류 및 502 잘못된 게이트웨이 오류가 나타납니다.
3. 임시 해결 방법:
요약하면 502 및 504 오류를 표시하는 Nginx의 임시 해결 방법은 다음과 같습니다.
1 php-fpm.conf의 관련 설정을 조정합니다.
<값 이름=”max_children”>32
<값 이름=”request_terminate_timeout”>30초
2. nginx.conf의 관련 설정을 조정합니다:
fastcgi_connect_timeout 600;fastcgi_send_timeout 600;
fastcgi_read_timeout 600 ;
fastcgi_buffer_size 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 🎜>
타이틀 3은 일시적으로만 문제를 해결할 수 있을 뿐이며, 그리고 웹 사이트의 트래픽이 정말 매우 큰 경우 Nginx+FastCGI는 순간적이거나 짧은 시간 동안만 높은 동시성을 처리할 수 있으므로 현재 유일한 궁극적인 해결책은 정기적으로 php-cgi를 원활하게 다시 시작하는 것입니다.
구체적인 구성은 다음과 같습니다.
1. 아주 간단한 스크립트를 작성합니다.
# vi /home/www/scripts/php-fpm.sh
내용은 다음과 같습니다.
#! /bin/bash# 이 스크립트는 */1에서 실행됩니다.
/usr/local/php/sbin/php-fpm reload
2. 예약된 작업에 대한 스크립트:
#crontab -e
내용은 다음과 같습니다.
*/1 * * * * /home/www/scripts/php-fpm.sh
참고: 문제를 해결하려면 PHP를 작성할 수도 있습니다. - 스크립트를 작성하지 않고 crontab에서 직접 다시 시작합니다.
원본 기사, 재인쇄 시 표시해 주세요: Wei Shaoqian [Zhao Bingliang]에서 재인쇄 – 서버 시스템 아키텍처
위 내용은 관련 내용을 포함하여 Nginx 프롬프트 502 및 504 오류에 대한 궁극적인 솔루션을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.