Nginx 504 문제 해결 --- tcptimestamps 로 인 한 연결 문제
고장 검사
첫 번 째 단 계 는 nginx 의 504 오류 로 그 를 조사 하고 오류 로 그 를 분석 하 며 규칙 적 인 지 여 부 를 보 는 것 입 니 다. 주로 통계 소스 IP, URL 입 니 다.
결론:
조사 결과 에 따 르 면 504 의 URL 이 나 오 면 두 세 개 이 고 소스 IP 가 불규칙 하 다. 이에 따라 개발 자 를 찾 아 요청 한 URL 에 문제 가 있 는 지 확인 하고 개발 자 와 의 포 지 셔 닝 을 통 해 URL 문 제 를 제 외 했 기 때문에 URL 과 IP 는 제외 하고 다음 단 계 를 진행한다.
두 번 째 단계
nginx 로그 에 로그 기록 필드 가 몇 개 추가 되 었 습 니 다.
$upstream_status
, $upstream_response_time
, $upstream_addr
세 필드 가 추가 되 었 습 니 다. 이 세 필드 를 통 해 백 엔 드 클 러 스 터 의 모든 서버 가 504 가 나 타 났 는 지, 아니면 부분 만 나 타 났 는 지, 그리고 각 대의 시간 초과 시간 이 얼마 인지 판단 하려 고 합 니 다.nginx. conf 설정 파일 의 로그 부분 에 이 세 필드 를 추가 한 후 nginx 를 불 러 오고 nginx 로 그 를 보면 모든 백 엔 드 클 러 스 터 에 504 문제 가 발생 했 습 니 다.
결론:
백 엔 드 클 러 스 터 서버 의 문제 인지 아 닌 지 초보 적 으로 추정 합 니 다.
세 번 째 단계
제 쪽 은 도 메 인 네 임 을 통 해 접근 하 는 백 엔 드 이기 때문에 문 제 를 더 확인 하기 위해 저 는 전단 클 러 스 터 의 한 대
/etc/hosts
에서 도 메 인 네 임 과 백 엔 드 의 실제 서버 를 연결 합 니 다. 전단 클 러 스 터 의 다른 서버 는 도 메 인 네 임 과 LVS 의 VIP 를 통 해 연결 합 니 다.결론:
조사 후의 결 과 는 백 엔 드 의 실제 서버 를 직접 연결 할 때 504 오류 가 발생 하지 않 고 다른 것 은 VIP 를 통 해 방문 하 는 것 은 504 오류 가 있 습 니 다. 두 번 째 단계 와 세 번 째 절 차 를 종합 하면 문제 가 두 곳 에 발생 해 야 한 다 는 것 을 확인 할 수 있 습 니 다.
이 단 계 는 문 제 를 배제 하기 위해 가방 을 잡 아 해결 할 수 밖 에 없 었 다. 사용 하 는 도 구 는
tcpdump
과 Wireshark
였 다.우선 전단 서버 에서 패 키 지 를 캡 처 하 는데 주로 목적 단 을 LVS VIP 로 캡 처 합 니 다.sudo /usr/sbin/tcpdump tcp -vv -i bond0 and dst host 1.1.1.2 -w ./myi.cap
LVS 서버 에서 가방 을 캡 처 하여 백 엔 드 클 러 스 터 에 있 는 서버 의 가방 을 캡 처 합 니 다.
sudo /usr/sbin/tcpdump tcp -vv and dst host 1.21.4.11 or dst host 1.21.4.12 or dst host 1.21.4.13 or dst host 1.21.4.14 -w ./user.cap
마지막 으로 잡 은 가방
wireshark
을 살 펴 보고 분석 했다.다섯 번 째 단계
스냅 백 을 통 해 LVS 가 백 엔 드 서버 에 직접 문제 가 있 을 수 있 음 을 확인 하고 다른 동료 에 게 물 어 보 니 3 층 에서 snat 를 한 것 으로 알려 졌 다.LVS 와 관련 된 것 으로 기억 되 는데 NAT 환경 에서 하나의 인자 가 가방 을 잃 어 버 릴 수 있 습 니 다.구 글 에서 마지막 으로 발견 한 것 은
net.ipv4.tcp_timestamps = 1
이 매개 변수 에 의 한 것 일 수 있 습 니 다.그래서 timestamps 를 닫 습 니 다.이 때문에 몇 개의 가방 이 거부 되 었 는 지 확인 하 십시오.
netstat -s |grep rejects
172 packets rejects in established connections because of timestamp
sudo vim /etc/sysctl.conf #
net.ipv4.tcp_timestamps = 0
###
sudo /sbin/sysctl -p
마지막 으로 관찰 일지 504 사라 지고 문제 해결.나 도 마침내 이 문제 에 부 딪 혔 다.그래도 해결 됐어.이 글 은 제 가 분석 하고 조사 하 는 과정 일 뿐 구체 적 인 메시지 같은 것 은 붙 이지 않 습 니 다. 왜냐하면 저 는 키 워드 를 낙서 하 는 것 이 귀 찮 기 때 문 입 니 다.
이 문 제 를 야기 하 는 상세 한 원 리 는 아래 의 참고 문장 이 이미 명확 하 게 말 했 으 니 나 는 말 하지 않 겠 다.
참고 문장
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nginx "502 Bad Gateway" 오류 해결두 단계: 1. 현재 PHP FastCGI 프로 세 스 수가 충분 한 지 확인 하기: netstat -anpo | grep "php-cgi" | wc -l 실제 사 용 된 'FastCGI 프로 세 스 수' 가 미리 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.