Nginx 반환 응답 코드 411

5843 단어
문제.
최근 만 료 를 앞 둔 가상 머 신 이전 에는 가상 머 신 위 에서 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 에 파일 을 실행 할 수 있 습 니 다.
부 드 러 운 업그레이드
  • 이전 버 전의 nginx 실행 가능 한 파일 백업:

    sudo mv /usr/sbin/nginx /usr/sbin/nginx.old
  • 컴 파일 된 nginx 실행 가능 한 파일 을 복사 합 니 다.

    sudo cp objs/nginx /usr/sbin/nginx
  • Nginx 설정 이 정확 한 지 테스트 합 니 다.

    sudo /usr/sbin/nginx -t
    테스트 가 정확 하면 다음 작업 에 들 어 갈 수 있 습 니 다.
  • 이전 버 전의 nginx 메 인 프로 세 스에 USR 2 신 호 를 보 냅 니 다.

    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 는 동시에 일 을 합 니 다.
  • 다음 에 구 버 전의 nginx 메 인 프로 세 스에 WINCH 신 호 를 보 냅 니 다.

    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 가 처리 하 는 것 을 볼 수 있 습 니 다.
  • 다음은 부 드 러 운 업그레이드 의 마지막 단계 입 니 다. 즉, 구 버 전의 nginx 메 인 프로 세 스에 QUIT 신 호 를 보 내 는 것 입 니 다.

    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.
  • 로 부 드 럽 게 업그레이드 하 는 데 성공 했다.
    버 전 반환
    위의 부 드 러 운 업 그 레이 드 를 수행 하 는 과정 에서 후회 하고 되 돌아 가 려 면 어떻게 해 야 합 니까?
  • 이전 버 전의 nginx 메 인 프로 세 스에 HUP 신호 보 내기
  • 새 버 전의 nginx 메 인 프로 세 스에 QUIT 신호 보 내기
  • 백업 에서 nginx 실행 가능 한 파일 복원
  • 업그레이드 중 문제 발생
    위의 업그레이드 절차 에 따라 필 자 는 ubuntu 시스템 에서 Nginx 를 1.8 버 전 으로 업그레이드 하 는 데 성공 했다.하지만 회사 가상 머 신 CentOS 6.4 에서 업그레이드 작업 을 수행 하 는 데 는 성공 하지 못 했다.문 제 는 세 번 째 단 계 를 실행 할 때 Nginx 설정 을 검사 하 는 데 실 패 했 습 니 다. nginx. pm 파일 버 전 번호 가 일치 하지 않 음 을 알려 줍 니 다.
    참고 자료
  • Nginx 가 411 오 류 를 되 돌려 줍 니 다
  • 좋은 웹페이지 즐겨찾기