오늘 프로그램이 Excel 내보내기 작업을 실행할 때 nginx 시간 초과 메시지가 나타났습니다.
nginx 504 Gateway Time-out
문제 해결 과정:
작업 보기 해당 내용은 20,000개 정보의 데이터량으로 확인되었습니다. 각 정보는 50개의 필드로 구성되어 있습니다.
실행 시간이 약 10분 정도 걸려서 타임아웃이 발생했습니다
분석 :
Nginx 504 Gateway Time-out은 요청한 게이트웨이가 요청되지 않았다는 의미입니다. 간단히 말하면 실행 가능한 PHP-CGI가 요청되지 않았음을 의미합니다.
일반적으로 다음과 같습니다. 이런 문제가 발생할 수 있습니다:
1. 프로그램이 많은 양의 데이터를 처리 중이거나 무한 루프 등의 문제가 있습니다
2. 어떤 이유로 데이터베이스를 생성할 수 없는 연결이 있습니다. 시간 초과 실패 메커니즘이 없어 연결이 계속 생성됩니다
3. 프로그램에 일부 http 요청이 있고 이러한 요청의 실행 시간이 너무 길어서 시간 초과가 발생합니다
nginx 관련 구성을 확인하세요. 및 php의 특정 시간 초과 매개변수를 각각 확인하세요
nginx 구성 파일 찾기
<span>#修改Nginx配置: fastcgi_connect_timeout 1200s;#原设置为300s fastcgi_send_timeout 1200s;<span>#原设置为300s</span>fastcgi_read_timeout 1200s;<span>#原设置为300s</span>fastcgi_buffer_size 64k; fastcgi_buffers </span><span>4</span><span> 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k;</span>
여기서 가장 중요한 설정은 처음 세 가지, 즉
입니다.<span>fastcgi_connect_timeout #同 FastCGI 服务器的连接超时时间,默认值60秒,它不能超过75秒;<br>fastcgi_send_timeout #Nginx 进程向 FastCGI 进程发送 request ,整个过程的超时时间,默认值60秒;<br>fastcgi_read_timeout #FastCGI 进程向 Nginx 进程发送 response ,整个过程的超时时间,默认值60秒;<br></span>
php 구성 파일
<span>php.ini<br></span><span>max_execution_time = 300s;PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。<br>php-fpm<br>request_terminate_timeout = 0; #设置单个请求的超时中止时间.设置为0 即一直执行下去直到程序结束 不会超时 </span>
위 설정을 수정한 후 다시 실행해 보니 504 시간 초과 프롬프트가 없는 것을 확인했는데, 하지만 페이지가 비어 있었고 파일을 내보낼 수 없었습니다. 실행 중 PHP 시간 초과가 발생해야 합니다
PHP 코드를 확인할 방법이 없으며 실행 시간 설정도 찾을 수 없습니다: set_time_limit
Baidu가 실행 시간을 찾았습니다. PHP 함수의 다음 내용:
set_time_limit
이 함수는 페이지의 가장 긴 실행 시간을 구성하는 데 사용됩니다. 기본값은 30초이며, php.ini의 max_execution_time 변수에 설정되어 있습니다. 0으로 설정하면 최대 시간이 제한되지 않습니다.
이 함수가 실행되면 계산이 시작됩니다. 예를 들어 기본값이 30초이고 이 함수가 실행되기 전 25초가 실행되었다가 이 함수를 사용하여 20초로 변경했다면 해당 페이지의 최대 실행 시간은 45초가 된다.
마지막으로 php 함수에 다음 줄을 추가했습니다.
set_time_limit(0);
다시 실행해 보니 결과는 괜찮습니다.
이상에서는 504 게이트웨이 타임아웃 내용을 포함하여 nginx 504 게이트웨이 타임아웃에 대해 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.