>백엔드 개발 >PHP 튜토리얼 >한 번 기억하세요 nginx 504 게이트웨이 시간 초과 504 시간 초과 nginx 504 게이트웨이 504 게이트웨이

한 번 기억하세요 nginx 504 게이트웨이 시간 초과 504 시간 초과 nginx 504 게이트웨이 504 게이트웨이

WBOY
WBOY원래의
2016-07-29 08:55:191807검색

오늘 프로그램이 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 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.