운영 및 유지보수 엔진스 nginx에서 오류 502를 보고하면 어떻게 해야 합니까? 솔루션 공유

nginx에서 오류 502를 보고하면 어떻게 해야 합니까? 솔루션 공유

Mar 04, 2022 pm 04:07 PM
nginx

nginx에서 오류 502를 보고하면 어떻게 해야 하나요? 이 기사에서는 nginx 오류 502에 대한 해결책에 대해 설명합니다. 모든 사람에게 도움이 되기를 바랍니다!

nginx에서 오류 502를 보고하면 어떻게 해야 합니까? 솔루션 공유

http 요청 프로세스: 일반적인 상황에서 동적 요청을 제출할 때 nginx는 요청을 php-fpm으로 직접 전송하고 php-fpm은 관련 요청을 처리하기 위해 php-cgi 프로세스를 할당한 다음 반환합니다. , 그리고 마지막으로 nginx는 결과를 클라이언트 브라우저에 다시 제공합니다.

Nginx 502 잘못된 게이트웨이 오류는 FastCGI의 문제입니다

Solution

502 문제가 발생하면 다음 두 단계를 우선적으로 수행하여 문제를 해결할 수 있습니다.

1. 현재 PHP FastCGI 프로세스 수가 충분한지 확인하세요(max_children 값).

netstat -anpo | grep "php-cgi"| wc -l
로그인 후 복사

사용된 실제 "FastCGI 프로세스 수"가 미리 설정된 "FastCGI 프로세스 수"에 가까우면 " FastCGI 프로세스 수"로는 충분하지 않으며 늘려야 합니다.

2. 일부 PHP 프로그램의 실행 시간이 Nginx의 대기 시간을 초과합니다(php 메모리 부족).

nginx.conf 구성 파일에서 FastCGI 시간 초과 시간을 늘립니다. 예: php의

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
로그인 후 복사

.ini memory_limit=64M, nginx를 다시 시작하세요. memory_limit=64M,重启nginx。

如果这样修改了还解决不了问题,可以参考下面这些方案:

3、max-children和max-requests

一台服务器上运行着nginx php(fpm) xcache,访问量日均 300W pv左右

最近经常会出现这样的情况: php页面打开很慢,cpu使用率突然降至很低,系统负载突然升至很高,查看网卡的流量,也会发现突然降到了很低。这种情况只持续数秒钟就恢复了

检查php-fpm的日志文件发现了一些线索:

    Sep3008:32:23.289973[NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200,cur:51200
    Sep3008:32:23.290212[NOTICE] fpm_sockets_init_main(), line 371:using inherited socket fd=10,“127.0.0.1:9000″
    Sep3008:32:23.290342[NOTICE] fpm_event_init_main(), line 109: libevent:using epoll
    Sep3008:32:23.296426[NOTICE] fpm_init(), line 47: fpm is running, pid 30587
로그인 후 복사

在这几句的前面,是1000多行的关闭children和开启children的日志

原来,php-fpm有一个参数 max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间被关闭。

在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)

增加children的数量,并且将 max_requests 设置未 0 或者一个比较大的值:

打开 /usr/local/php/etc/php-fpm.conf

调大以下两个参数(根据服务器实际情况,过大也不行)

    <valuename=”max_children”>5120</value>
    <valuename=”max_requests”>600</value>
로그인 후 복사

然后重启php-fpm。

5、增加缓冲区容量大小

将nginx的error log打开,发现“pstream sent too big header while reading response header from upstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。

6、request_terminate_timeout

如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:request_terminate_timeout

这个值是max_execution_time

이 수정 후에도 문제가 해결되지 않으면 다음 해결 방법을 참조할 수 있습니다.

3, max-children 및 max-requests

nginx php (fpm) xcache가 평균적으로 서버에서 실행 중입니다. 일일 방문량 300W pv 정도

최근 이런 상황이 자주 발생합니다. PHP 페이지가 매우 느리게 열리고, CPU 사용량이 갑자기 매우 낮은 수준으로 떨어지며, 시스템 부하가 갑자기 매우 높은 수준으로 올라가고, 네트워크 카드의 트래픽이 갑자기 매우 낮은 수준으로 떨어지는 것을 발견할 수도 있습니다. 이 상황은 몇 초만 지속되었다가 회복되었습니다

php-fpm의 로그 파일을 확인하고 몇 가지 단서를 찾았습니다:

netstat -anpo | grep “php-cgi” | wc -l
로그인 후 복사
로그인 후 복사

이 문장 앞에는 하위 항목 닫기 및 하위 항목 열기에 대한 로그가 1,000줄 이상 있습니다

It php-fpm에는 종료되기 전에 각 하위 항목이 처리할 수 있는 최대 요청 수를 지정하는 max_requests 매개변수가 있습니다. PHP는 각 하위 항목에 대한 요청을 폴링하기 때문에 트래픽이 많은 경우 각 하위 항목은 max_requests에 도달하는 데 거의 동일한 시간이 걸리며 이로 인해 기본적으로 모든 하위 항목이 동시에 닫힙니다.

이 기간 동안 nginx는 처리를 위해 PHP 파일을 php-fpm으로 전송할 수 없으므로 CPU가 매우 낮은 수준으로 떨어지고(SQL 실행은 물론 PHP를 처리할 필요도 없음) 부하가 매우 높아집니다. 수준(자식 닫기 및 열기, nginx php-fpm 대기 중), 네트워크 카드 트래픽도 매우 낮은 수준으로 떨어졌습니다(nginx는 클라이언트에 전송할 데이터를 생성할 수 없음)🎜🎜자식 수를 늘리고 max_requests를 다음으로 설정하세요. 0보다 작거나 큰 값: 🎜🎜Open /usr/local/php/etc/php-fpm.conf🎜🎜다음 두 매개변수를 추가합니다(서버의 실제 상황에 따라 다름) 크면 작동하지 않습니다)🎜rrreee🎜그런 다음 php-fpm을 다시 시작하세요. 🎜🎜🎜5. 버퍼 용량 늘리기 🎜🎜🎜nginx 오류 로그를 열고 "업스트림에서 응답 헤더를 읽는 동안 pstream이 너무 큰 헤더를 보냈습니다."와 같은 오류 메시지를 찾습니다. 정보를 확인한 결과, nginx 버퍼에 버그가 있는 것으로 나타났습니다. 당사 웹사이트의 페이지 소비에 사용되는 버퍼가 너무 클 수 있다는 것입니다. 외국인이 작성한 수정 방법을 참고하면 버퍼 용량 설정이 늘어나 502 문제가 완전히 해결되었습니다. 나중에 시스템 관리자는 매개변수를 조정하고 클라이언트 헤드 버퍼와 fastcgi 버퍼 크기라는 두 가지 설정 매개변수만 유지했습니다. 🎜🎜🎜6. request_terminate_timeout🎜🎜🎜 502가 주로 정적 페이지 작업에서 발생하지 않고 일부 게시물이나 데이터베이스 작업 중에 발생하는 경우 php-fpm.conf 설정 중 하나를 확인할 수 있습니다: request_terminate_timeout 🎜🎜이 값은 fast-cgi의 실행 스크립트 시간인 max_execution_time입니다. 🎜🎜0s가 종료되었습니다. 즉, 무기한 계속된다는 의미입니다. (드레싱할 때 잘 보지 않고 숫자를 바꿨어요) 🎜🎜 fastcgi 최적화 시 이 값을 5초 동안 바꿔서 효과를 볼 수도 있습니다. 🎜🎜php-cgi 프로세스 수가 부족하거나, php 실행 시간이 길거나, php-cgi 프로세스가 종료되면 502 오류가 발생합니다. 🎜🎜🎜확장 지식: 🎜🎜🎜Nginx 502 Bad Gateway는 요청한 PHP-CGI가 실행되었으나 어떤 이유로(보통 리소스 읽기 문제) 인해 실행되지 않고 PHP-CGI 프로세스가 종료되었음을 의미합니다. 일반적으로 Nginx 502 Bad Gateway는 php-fpm.conf 설정과 관련이 있는 것으로 보입니다. 🎜🎜 php-fpm.conf에는 두 개의 중요한 매개변수가 있습니다. 하나는 max_children이고 다른 하나는 request_terminate_timeout이지만 이 값은 보편적이지 않으며 직접 계산해야 합니다. 설치 및 사용 중 502 문제가 발생하는 경우는 대개 기본 php-cgi 프로세스가 5이기 때문입니다. php-cgi 프로세스가 부족하여 발생할 수도 있습니다. /usr/local/php/etc/php-를 수정해야 합니다. fpm.conf max_children 값을 적절하게 늘리십시오. 🎜🎜 계산 방법은 다음과 같습니다. 🎜

如果你服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将 request_terminate_timeout设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。而如果你做不到这一点,也就 是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI假死那么就建议你给 request_terminate_timeout赋一个值,这个值可以根据服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分 钟都可以。而max_children这个值又是怎么计算出来的呢?这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。 设置max_children也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右

按照官方的答案,排查了相关的可能,并结合了网友的答案,得出了下面的解决办法。

1、查看php fastcgi的进程数(max_children值)

netstat -anpo | grep “php-cgi” | wc -l
로그인 후 복사
로그인 후 복사

5(假如显示5)

2、查看当前进程

 top观察fastcgi进程数,假如使用的进程数等于或高于5个,说明需要增加(根据你机器实际状况而定)

 3、调整/usr/local/php/etc/php-fpm.conf 的相关设置

 <value name=”max_children”>10</value><value name=”request_terminate_timeout”>60s</value>max_children最多10个进程,按照每个进程20MB内存,最多200MB。request_terminate_timeout执行的时间为60秒,也就是1分钟。

推荐教程:nginx教程

위 내용은 nginx에서 오류 502를 보고하면 어떻게 해야 합니까? 솔루션 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

nginx가 시작되었는지 확인하는 방법 nginx가 시작되었는지 확인하는 방법 Apr 14, 2025 pm 01:03 PM

nginx가 시작되었는지 확인하는 방법 : 1. 명령 줄을 사용하십시오 : SystemCTL 상태 nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. 포트 80이 열려 있는지 확인하십시오. 3. 시스템 로그에서 nginx 시작 메시지를 확인하십시오. 4. Nagios, Zabbix 및 Icinga와 같은 타사 도구를 사용하십시오.

Linux에서 Nginx를 시작하는 방법 Linux에서 Nginx를 시작하는 방법 Apr 14, 2025 pm 12:51 PM

Linux에서 Nginx를 시작하는 단계 : Nginx가 설치되어 있는지 확인하십시오. systemctl start nginx를 사용하여 nginx 서비스를 시작하십시오. SystemCTL을 사용하여 NGINX를 사용하여 시스템 시작시 NGINX의 자동 시작을 활성화하십시오. SystemCTL 상태 nginx를 사용하여 시작이 성공했는지 확인하십시오. 기본 환영 페이지를 보려면 웹 브라우저의 http : // localhost를 방문하십시오.

nginx가 시작되었는지 확인하는 방법은 무엇입니까? nginx가 시작되었는지 확인하는 방법은 무엇입니까? Apr 14, 2025 pm 12:48 PM

Linux에서는 다음 명령을 사용하여 nginx가 시작되었는지 확인하십시오. SystemCTL 상태 Nginx 판사 명령 출력에 따라 : "active : running"이 표시되면 Nginx가 시작됩니다. "Active : 비활성 (죽음)"이 표시되면 Nginx가 중지됩니다.

Windows에서 nginx를 구성하는 방법 Windows에서 nginx를 구성하는 방법 Apr 14, 2025 pm 12:57 PM

Windows에서 Nginx를 구성하는 방법은 무엇입니까? nginx를 설치하고 가상 호스트 구성을 만듭니다. 기본 구성 파일을 수정하고 가상 호스트 구성을 포함하십시오. 시작 또는 새로 고침 Nginx. 구성을 테스트하고 웹 사이트를보십시오. SSL을 선택적으로 활성화하고 SSL 인증서를 구성하십시오. 포트 80 및 443 트래픽을 허용하도록 방화벽을 선택적으로 설정하십시오.

Nginx403을 해결하는 방법 Nginx403을 해결하는 방법 Apr 14, 2025 am 10:33 AM

Nginx 403 금지 된 오류를 수정하는 방법은 무엇입니까? 파일 또는 디렉토리 권한을 확인합니다. 2. 확인 파일을 확인하십시오. 3. nginx 구성 파일 확인; 4. nginx를 다시 시작하십시오. 다른 가능한 원인으로는 방화벽 규칙, Selinux 설정 또는 응용 프로그램 문제가 있습니다.

nginx 서버를 시작하는 방법 nginx 서버를 시작하는 방법 Apr 14, 2025 pm 12:27 PM

Nginx 서버를 시작하려면 다른 운영 체제에 따라 다른 단계가 필요합니다. Linux/Unix System : Nginx 패키지 설치 (예 : APT-Get 또는 Yum 사용). SystemCTL을 사용하여 nginx 서비스를 시작하십시오 (예 : Sudo SystemCtl start nginx). Windows 시스템 : Windows 바이너리 파일을 다운로드하여 설치합니다. nginx.exe 실행 파일을 사용하여 nginx를 시작하십시오 (예 : nginx.exe -c conf \ nginx.conf). 어떤 운영 체제를 사용하든 서버 IP에 액세스 할 수 있습니다.

Nginx 크로스 도메인의 문제를 해결하는 방법 Nginx 크로스 도메인의 문제를 해결하는 방법 Apr 14, 2025 am 10:15 AM

Nginx 크로스 도메인 문제를 해결하는 두 가지 방법이 있습니다. 크로스 도메인 응답 헤더 수정 : 교차 도메인 요청을 허용하고 허용 된 메소드 및 헤더를 지정하고 캐시 시간을 설정하는 지시문을 추가하십시오. CORS 모듈 사용 : 모듈을 활성화하고 CORS 규칙을 구성하여 크로스 도메인 요청, 메소드, 헤더 및 캐시 시간을 허용합니다.

Nginx의 실행 상태를 확인하는 방법 Nginx의 실행 상태를 확인하는 방법 Apr 14, 2025 am 11:48 AM

nginx의 실행 상태를 보는 방법은 다음과 같습니다. PS 명령을 사용하여 프로세스 상태를보십시오. nginx 구성 파일 /etc/nginx/nginx.conf를 봅니다. Nginx 상태 모듈을 사용하여 상태 끝점을 활성화하십시오. Prometheus, Zabbix 또는 Nagios와 같은 모니터링 도구를 사용하십시오.

See all articles