nginx 502 오류 원인 및 해결 방법
502 오류 정의: 게 이 트 웨 이 오류 입 니 다. 쉽게 말 하면 웹 서버 와 통신 에 실 패 했 습 니 다.
nginx 에 502 가 발생 한 데 는 여러 가지 이유 가 있 지만 대부분 자원 의 수량 이 부족 하 다 고 요약 할 수 있 습 니 다. 즉, 백 엔 드 PHP - fpm 처리 에 문제 가 있 습 니 다. nginx 는 정확 한 클 라 이언 트 요청 을 백 엔 드 의 pp - fpm 프로 세 스 에 보 냈 으 나 pp - fpm 프로 세 스 문제 로 인해 phop 코드 를 정확하게 분석 하지 못 하고 클 라 이언 트 에 502 오 류 를 되 돌려 주 었 습 니 다.
nginx + phop 에 502 bad gateway 가 나타 납 니 다. 일반적으로 이것 은 nginx 의 문제 가 아니 라 fastcgi 나 phop 의 문제 로 인해 발생 합 니 다. 흔히 볼 수 있 는 것 은 다음 과 같은 몇 가지 가 있 습 니 다.
1. nginx 오류 로 그 를 보 니 pstream 이 응답 을 읽 는 동안 너무 큰 헤 더 를 보 냈 습 니 다. headerfrom upstream 은 client head buffer, fastcgi buffer 를 검사 합 니 다. size 가 너무 작은 지 32K 로 설정 할 수 있 습 니 다.
1. php 프로그램 이 너무 오래 실행 되 고 시간 이 초과 되 었 습 니 다. nginx 와 fastcgi 의 각종 timeout 설정 을 검사 합 니 다. (nginx 의 경우 fastcgi_connect_timeout 300;fastcgi_send_timeout 300 :fastcgi_read_timeout300; keepalive_timeout ; php - fpm 의 request terminate timeout, php. ini 의 max execution time)
1. pp - fpm 에 max requests 인자 가 있 습 니 다. ,이 매개 변 수 는 모든 children 이 최대 몇 개의 요청 을 처리 하면 닫 힌 다 는 것 을 가리 키 고 있 습 니 다. 대량 처리 요청 에서 이 값 을 너무 작 게 설정 하면 children 의 잦 은 자살 과 구축 으로 많은 시간 을 낭비 할 수 있 습 니 다. 모든 children 이 이 럴 때 자살 하 는 경우 재건 축 전에 children 이 요청 에 응 하지 않 아 502 가 발생 합 니 다. 。이 값 을 크게 설정 하거나 0 [무한] 으로 설정 할 수 있 습 니 다.
만약 에 서버 의 병발 량 이 매우 크다 면 기 계 를 먼저 증가 한 다음 에 다음 과 같은 방식 으로 최적화 하면 더욱 좋 은 효 과 를 얻 을 수 있 습 니 다. 그러나 병발 이 크 지 않 지만 502 가 나타 나 면 보통 설정 문제, 스 크 립 트 시간 초과 문제 로 요약 할 수 있 습 니 다.
1. php - fpm 프로 세 스 가 부족 합 니 다.
netstat - napo | grep "php - fpm" | wc - l 을 사용 하여 현재 fastcgi 프로 세 스 개 수 를 보십시오. 만약 개수 가 conf 에서 설정 한 상한 선 에 가깝다 면 프로 세 스 수 를 높 여야 합 니 다.
그러나 끊임없이 높 일 수 는 없다. 서버 메모리 상황 에 따라 php - fpm 하위 프로 세 스 수 를 100 이상 으로 조정 할 수 있 고 4G 메모리 서버 에 200 이면 된다.
2. 리 눅 스 커 널 파일 개수 높이 기
이 명령 을 사용 할 수 있 습 니 다 (루트 계 정 이 어야 합 니 다)
echo 'ulimit -HSn 65536'>> /etc/profile
echo 'ulimit -HSn 65536'>> /etc/rc.local
source /etc/profile
3. 스 크 립 트 실행 시간 초과
스 크 립 트 가 어떤 이유 로 오랫동안 되 돌아 오지 않 기 를 기다 리 고 있어 서 새로운 요청 이 처리 되 지 않 으 면 다음 설정 을 적 절 히 줄 일 수 있 습 니 다.
nginx. conf 는 주로 다음 과 같 습 니 다.
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
php - fpm. conf 에 다음 과 같 습 니 다.
request_terminate_timeout =10s
4. 캐 시 설정 이 작 음
nginx. conf 로 설정 을 수정 하거나 추가 합 니 다.
proxy_buffer_size 64k;
proxy_buffers 512k;
proxy_busy_buffers_size 128k;
5. recv()failed (104: Connection reset by peer) while reading response header fromupstream
가능 한 원인 은 기관실 네트워크 가 가방 을 잃 어 버 리 거나 기관실 에 하드웨어 방화벽 이 있어 도 메 인 이름 에 접근 하 는 것 을 금지 합 니 다.
그러나 가장 중요 한 것 은 프로그램 에 시간 초과 설정 을 해 야 합 니 다. php - fpm 의 request terminate timeout 을 사용 하지 마 십시오.
request terminate timeout = 0 으로 설정 하 는 것 이 좋 습 니 다.
이 매개 변 수 는 phop 프로 세 스 를 직접 죽 이 고 phop 프로 세 스 를 다시 시작 하기 때문에 전단 nginx 는 104: Connection reset by peer 로 돌아 갑 니 다. 이 과정 은 매우 느 리 고 전체적인 느낌 은 사이트 가 매우 카드 로 느껴 집 니 다.
May 01 10:50:58.044162[WARNING] [pool www] child 4074, script'/usr/local/nginx/html/quancha/sameip/detail.php' execution timed out(15.129933 sec), terminating
May 01 10:50:58.045725 [WARNING] [pool www] child 4074 exited on signal 15SIGTERM after 90.227060 seconds from start
May 01 10:50:58.046818 [NOTICE] [pool www] child 4082 started
천만 가지 말 을 하 는데 가장 중요 한 것 은 프로그램 에서 시간 초 과 를 잘 제어 하 는 것 이다. gethostby name, curl, file get contents 등 함수 의 시간 초 과 를 설정 해 야 한다.
다른 하 나 는 이 물건 은 사이트 의 상호작용 성 을 증가 시 켰 지만 많이 사용 하면 반응 이 느 려 집 니 다. 만약 에 사이트 가 시간 을 초과 하고 많이 사용 하면 닫 을 수 있 습 니 다.
6. 자신 이 502 를 만 나 는 해결 방법:
php 와 Nginx 를 늘 리 는 backlog 수 를 조정 합 니 다.
PHP - FPM 고부 하 해결 방법 Posted on 2011/09/02
여 기 는 phop - fpm 의 최적화 방법 만 소개 하 였 으 나 일반적인 상황 에서 nginx 와 조합 하여 사용 할 때 그 중의 하 나 를 단독으로 최적화 하면 역할 이 특별히 크 지 않 고 nginx 를 최적화 시 켜 야 합 니 다. nginx 의 방법 도 참고 해 야 합 니 다.http://blog.haohtml.com/archives/6213.위의 최적화 전과 최적화 후의 그림 은 앞 뒤 차이 가 매우 크다 는 것 을 알 수 있다.
nginx 502 bad gateway 의 PHP - CGI (FASTCGI)
NGINX 502 BAD GATEWAY 의 오류 가 자주 발생 했 습 니 다. 인터넷 의 튜 토리 얼 을 보 았 지만 아직 완전히 해결 되 지 않 았 습 니 다. 현재 제 가 정리 한 502 BAD GATEWAY 를 해결 하 는 방식 은 다음 과 같 습 니 다.
1. 서버 의 성능 을 보고 php - fmp. conf 에 max children 의 값 을 추가 합 니 다.
max children 은 PHP - FPM Pool 의 가장 큰 하위 프로 세 스 입 니 다. 서버 메모리 에 따라 그 수 치 를 결정 합 니 다. 현재 설 정 된 PHP - FPM Pool 에 10G 메모 리 를 주 려 고 한다 고 가정 하면 보통 하나의 PHP 요청 이 메모리 10M - 40M 을 차지 합 니 다. 사이트 마다 PHP 요청 에 따라 메모리 25m 를 사용 합 니 다. 이렇게 max children = 10G / 25m = 409 를 사용 합 니 다. 따라서 이 값 은 상황 에 따라 계산 할 수 있 습 니 다.
max requests 는 모든 하위 프로 세 스 가 다시 태 어 나 기 전에 처리 하 는 요청 수 입 니 다. 기본 값 은 unlimited (기본 값 은 1024) 입 니 다. 작은 (예 를 들 어 500 정도) 를 설정 하면 메모리 유출 로 인 한 문 제 를 피 할 수 있 습 니 다.
Nginx 프 록 시 프로 세 스, 비 즈 니스 서버 요청 데 이 터 를 로 컬 파일 에 캐 시 한 다음 요청 클 라 이언 트 에 파일 데 이 터 를 전송 합 니 다. 높 은 병렬 클 라 이언 트 요청 은 서버 파일 핸들 의 병렬 열 림 제한 을 요구 합 니 다. ulimit 명령 (ulimit - n) 을 사용 하여 Linux 시스템 파일 핸들 의 병렬 제한 을 볼 수 있 습 니 다. 기본 값 은 1024 입 니 다. 65535 로 변경 할 수 있 습 니 다.(2 의 16 차방, 이것 은 시스템 포트 의 한계 입 니 다). 수정 방법 은 시스템 파일 / etc / security / limits. conf 를 수정 하고 다음 과 같은 정 보 를 추가 하 며 시스템 을 다시 시작 하 는 것 입 니 다.
soft nofile 65535
hard nofile 65535
그리고 Nginx 프로필 에서 파일 제한 및 연결 수 정 보 를 65535 로 변경 합 니 다.
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
2. reload 매개 변 수 를 사용 하여 정시 에 phop - fpm 를 다시 불 러 옵 니 다. 이 주요 원인 은 phop 스 크 립 트 의 실행 시간 이 너무 길 어서 발생 한 것 입 니 다. phop - fpm 를 다시 불 러 오 는 것 은 이 문 제 를 근절 할 수 있 습 니 다. phop - cgi 스 크 립 트 가 대량의 메모 리 를 차지 하여 502 오류 가 발생 하 는 것 을 어떻게 철저히 해결 하 는 지 더 연구 할 필요 가 있 습 니 다. 현재 이 방법 은 좋 은 방법 입 니 다.PHP 스 크 립 트 실행 에 영향 을 줍 니 다.
*/10* * * * /usr/local/php/sbin/php-fpm reload
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 최적화 설정 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
높 은 부하 사이트 에서 PHP - FPM 으로 FastCGI 를 관리 하면 다음 과 같은 기술 이 유용 할 수 있 습 니 다.)
가능 한 한 PHP 모듈 을 적 게 설치 하 는 것 이 가장 간단 하 다 (빠르다).
PHP FastCGI 하위 프로 세 스 수 를 100 이상 으로 조정 하면 4G 메모리 서버 에 200 개 를 입력 할 수 있 습 니 다. 제 1g 테스트 기 는 64 개 를 켜 는 것 이 가장 좋 습 니 다. 압력 테스트 를 통 해 최 적 치 를 얻 는 것 을 권장 합 니 다.
socket 으로 FastCGI 를 연결 하면 Liux 운영 체 제 는 / dev / shm 에 넣 을 수 있 습 니 다. php - fpm. cnf 에 / tmp / nginx. socket 을 설정 하면 socket 으로 FastCGI 를 연결 할 수 있 습 니 다. / dev / shm 는 메모리 파일 시스템 이 므 로 메모리 에 넣 으 면 빠 를 것 입 니 다. 이때 도 nginx 의 설정 을 수정 하여 일치 해 야 합 니 다.
location~ .*/.(php|php5)?$
{
# Nginx FastCGI TCP UnixSocket。TCP UnixSocket , Unix Socket TCP 。
fastcgi_pass unix:/tmp/php-cgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
# echo ‘ulimit -HSn 65536′>> /etc/profile
# echo ‘ulimit -HSn 65536 >> /etc/rc.local
# source /etc/profile
echo ‘ulimit -HSn 65536′ >> /etc/profile
echo ‘ulimit -HSn 65536′ >> /etc/rc.local
source /etc/profile
: /etc/rc.local, ulimit -SHn 51200
# vi /path/to/php-fpm.conf
Find “1024 ”
Change 1024 to 4096 or higher number.
Restart PHP-FPM.
# vi /path/to/php-fpm.conf
“1024 ”
1024 4096
PHP - FPM 을 다시 시작 합 니 다.
php 코드 가속 기 를 사용 합 니 다. 예 를 들 어 eAccelerator, XCache. Liux 플랫폼 에서
cache_dir
를 / dev / shm 로 가리 킬 수 있 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.