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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

NginXunit은 여러 프로그래밍 언어를 지원하고 동적 구성, 제로 다운 타임 업데이트 및 내장로드 밸런싱과 같은 기능을 제공하는 오픈 소스 응용 프로그램 서버입니다. 1. 동적 구성 : 다시 시작하지 않고 구성을 수정할 수 있습니다. 2. 다국어 지원 : Python, Go, Java, PHP 등과 호환됩니다. 3. 제로 다운 타임 업데이트 : 서비스를 중단하지 않는 응용 프로그램 업데이트를 지원합니다. 4. 내장로드 밸런싱 : 요청을 여러 응용 프로그램 인스턴스에 배포 할 수 있습니다.

NginxUnit은 다국어 프로젝트 및 동적 구성 요구 사항에 적합한 Apachetomcat, Gunicorn 및 Node.js 내장 HTTP 서버보다 낫습니다. 1) 여러 프로그래밍 언어를 지원하고, 2) 동적 구성 재 장전을 제공합니다. 3) 확장 성과 신뢰성이 높은 프로젝트에 적합한 내장로드 밸런싱 기능.

NginxUnit은 모듈 식 아키텍처 및 동적 재구성 기능으로 응용 프로그램 성능 및 관리 가능성을 향상시킵니다. 1) 모듈 식 설계에는 마스터 프로세스, 라우터 및 응용 프로그램 프로세스가 포함되어 효율적인 관리 및 확장을 지원합니다. 2) 동적 재구성을 통해 CI/CD 환경에 적합한 런타임시 구성을 완벽하게 업데이트 할 수 있습니다. 3) 다국어 지원은 언어 런타임의 동적로드를 통해 구현되어 개발 유연성을 향상시킵니다. 4) 고성능은 이벤트 중심 모델과 비동기 I/O를 통해 달성되며 높은 동시성에서도 효율적으로 유지됩니다. 5) 응용 프로그램 프로세스를 분리하고 응용 프로그램 간의 상호 영향을 줄임으로써 보안이 향상됩니다.

NginxUnit을 사용하여 여러 언어로 응용 프로그램을 배포하고 관리 할 수 있습니다. 1) nginxunit을 설치하십시오. 2) Python 및 PHP와 같은 다른 유형의 응용 프로그램을 실행하도록 구성하십시오. 3) 응용 프로그램 관리에 동적 구성 기능을 사용하십시오. 이러한 단계를 통해 응용 프로그램을 효율적으로 배포하고 관리하고 프로젝트 효율성을 향상시킬 수 있습니다.

Nginx는 높은 동시 연결을 처리하는 데 더 적합한 반면 Apache는 복잡한 구성 및 모듈 확장이 필요한 시나리오에 더 적합합니다. 1.NGINX는 고성능 및 낮은 자원 소비로 유명하며 높은 동시성에 적합합니다. 2. Aapache는 안정성과 풍부한 모듈 확장으로 유명하며 복잡한 구성 요구에 적합합니다.

NginxUnit은 동적 구성 및 고성능 아키텍처로 응용 프로그램 유연성 및 성능을 향상시킵니다. 1. 동적 구성을 사용하면 서버를 다시 시작하지 않고 응용 프로그램 구성을 조정할 수 있습니다. 2. 고성능은 이벤트 중심 및 비 블로킹 아키텍처 및 다중 프로세스 모델에 반영되며 동시 연결을 효율적으로 처리하고 멀티 코어 CPU를 활용할 수 있습니다.

Nginx와 Apache는 성능, 확장 성 및 효율성 측면에서 고유 한 장점과 단점을 가진 강력한 웹 서버입니다. 1) NGINX는 정적 컨텐츠를 처리하고 역전 프록시를 처리 할 때 잘 수행되며 동시 동시성 시나리오에 적합합니다. 2) Apache는 동적 컨텐츠를 처리 할 때 더 나은 성능을 발휘하며 풍부한 모듈 지원이 필요한 프로젝트에 적합합니다. 서버 선택은 프로젝트 요구 사항 및 시나리오에 따라 결정해야합니다.

Nginx는 높은 동시 요청을 처리하는 데 적합한 반면 Apache는 복잡한 구성 및 기능 확장이 필요한 시나리오에 적합합니다. 1.NGINX는 이벤트 중심의 비 블로킹 아키텍처를 채택하며, 대결 환경에 적합합니다. 2. Apache는 프로세스 또는 스레드 모델을 채택하여 복잡한 구성 요구에 적합한 풍부한 모듈 생태계를 제공합니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

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

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
