Nginx 반환 응답 코드 411
최근 만 료 를 앞 둔 가상 머 신 이전 에는 가상 머 신 위 에서 Nginx 를 뛰 어 다 니 며 대외 서 비 스 를 제공 하고 있다.새로운 가상 컴퓨터 로 전환 한 후, 업 체 에서 이미지 업로드 에 실 패 했 음 을 반 영 했 고, Nginx 는 응답 코드 411 을 되 돌려 주 었 습 니 다.
이런 문 제 는 처음 인 데 인터넷 에서 검색 해 보 니 낮은 버 전의 Nginx 에 문제 가 있 었 다.새 가상 머 신 에 있 는 Nginx 는 yum 소스 를 통 해 설치 되 어 있 으 며 버 전 은 1.0.15 입 니 다. 이 버 전의 Nginx 는 POST 방식 으로 파일 을 업로드 할 때 이 문 제 를 발생 시 켜 클 라 이언 트 에 응답 코드 411 을 되 돌려 줍 니 다.
해결 방안
OK, Nginx 버 전이 너무 낮 아서 생 긴 것 을 알 면 해결 방안 은 Nginx 를 업그레이드 하 는 것 입 니 다.어떻게 온라인 서비스의 부 드 러 운 업그레이드 Nginx 에 영향 을 주지 않 습 니까?
평활 업그레이드 Nginx
소스 코드 컴 파일
Nginx 홈 페이지 에서 최신 안정 판 다운로드:
wget http://nginx.org/download/nginx-1.8.0.tar.gz
압축 을 풀 고 원본 디 렉 터 리 에 들 어가 기:
tar zxf nginx-1.8.0.tar.gz
cd nginx-1.8.0
이전 버 전의 Nginx 컴 파일 설정 보기:
nginx -V
상기 명령 출력의 설정 파 라미 터 를 복사 하여. / configure 뒤에 추가 하고 prefix 파 라미 터 를 다른 디 렉 터 리 로 수정 합 니 다.
./configure --prefix=/home/ubuntu/nginx
위의 명령 을 실행 하면 다음 과 같은 오류 정 보 를 볼 수 있 습 니 다. rewrite 모듈 에 PCRE 라 이브 러 리 가 필요 합 니 다.
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre= option.
PCRE 공식 FTP 서버 에 PCRE 를 다운로드 하고 압축 풀기:
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
tar zxf pcre-8.36.tar.gz
Nginx 의 원본 디 렉 터 리 에서 설정 명령 을 다시 실행 합 니 다. 이번 에는 -- with - pcre 옵션 을 추가 합 니 다.
./configure --prefix=/home/ubuntu/nginx --with-pcre=/home/ubuntu/pcre-8.36
의존 라 이브 러 리 가 부족 하 다 면 라 이브 러 리 를 설치 하 십시오.
# on ubuntu/debian system
sudo apt-get install libssl-dev libxml2-dev libxslt-dev libgd-dev libgeoip-dev
설정 이 잘못 되 지 않 은 후에 make 명령 을 실행 합 니 다.이로써 컴 파일 된 nginx 는 현재 디 렉 터 리 의 하위 디 렉 터 리 obbs 에 파일 을 실행 할 수 있 습 니 다.
부 드 러 운 업그레이드
sudo mv /usr/sbin/nginx /usr/sbin/nginx.old
sudo cp objs/nginx /usr/sbin/nginx
sudo /usr/sbin/nginx -t
테스트 가 정확 하면 다음 작업 에 들 어 갈 수 있 습 니 다.
ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
root 9962 1 0 2014 ? 00:00:00 nginx: master process /usr/sbin/nginx
ubuntu 31321 9962 0 Apr23 ? 00:04:58 nginx: worker process
ubuntu 31322 9962 0 Apr23 ? 00:05:20 nginx: worker process
ubuntu 31323 9962 0 Apr23 ? 00:05:46 nginx: worker process
ubuntu 31324 9962 0 Apr23 ? 00:00:18 nginx: worker process
ubuntu@me:~/nginx-1.8.0$ sudo kill -USR2 9962
ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
root 9962 1 0 2014 ? 00:00:00 nginx: master process /usr/sbin/nginx
root 29149 9962 0 04:47 ? 00:00:00 nginx: master process /usr/sbin/nginx
ubuntu 29150 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29151 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29152 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29153 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 31321 9962 0 Apr23 ? 00:04:58 nginx: worker process
ubuntu 31322 9962 0 Apr23 ? 00:05:20 nginx: worker process
ubuntu 31323 9962 0 Apr23 ? 00:05:46 nginx: worker process
ubuntu 31324 9962 0 Apr23 ? 00:00:18 nginx: worker process
USR 2 신 호 를 보 낸 후 새로운 nginx master 프로 세 스 와 worker 프로 세 스 가 실 행 됩 니 다.이때 새 nginx 와 낡은 nginx 는 동시에 일 을 합 니 다.
ubuntu@me:~/nginx-1.8.0$ sudo kill -WINCH 9962
ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
root 9962 1 0 2014 ? 00:00:00 nginx: master process /usr/sbin/nginx
root 29149 9962 0 04:47 ? 00:00:00 nginx: master process /usr/sbin/nginx
ubuntu 29150 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29151 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29152 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29153 29149 0 04:47 ? 00:00:00 nginx: worker process
이 때 구 nginx 의 worker 프로 세 스 가 종료 되 었 습 니 다. 새로운 요청 을 처리 하지 않 고 새로운 nginx 가 처리 하 는 것 을 볼 수 있 습 니 다.
ubuntu@me:~/nginx-1.8.0$ sudo kill -QUIT 9962
ubuntu@me:~/nginx-1.8.0$ ps -ef | grep nginx
root 29149 1 0 04:47 ? 00:00:00 nginx: master process /usr/sbin/nginx
ubuntu 29150 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29151 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29152 29149 0 04:47 ? 00:00:00 nginx: worker process
ubuntu 29153 29149 0 04:47 ? 00:00:00 nginx: worker process
자, 이로써 구 nginx 메 인 프로 세 스 도 종료 되 었 습 니 다.우 리 는 이미 새 nginx. 버 전 반환
위의 부 드 러 운 업 그 레이 드 를 수행 하 는 과정 에서 후회 하고 되 돌아 가 려 면 어떻게 해 야 합 니까?
위의 업그레이드 절차 에 따라 필 자 는 ubuntu 시스템 에서 Nginx 를 1.8 버 전 으로 업그레이드 하 는 데 성공 했다.하지만 회사 가상 머 신 CentOS 6.4 에서 업그레이드 작업 을 수행 하 는 데 는 성공 하지 못 했다.문 제 는 세 번 째 단 계 를 실행 할 때 Nginx 설정 을 검사 하 는 데 실 패 했 습 니 다. nginx. pm 파일 버 전 번호 가 일치 하지 않 음 을 알려 줍 니 다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.