nginx 다 중 프로 세 스 모델 설정 열 로드

선언:
       서버 프로그램 은 보통 해당 프로필 을 통 해 서버 의 작업 을 제어 합 니 다.많은 경우 설정 파일 이 자주 수정 되 고 효력 이 발생 할 때 저 희 는 프로그램 을 다시 시작 하지 않 고 서버 의 정상 적 인 서비스 에 영향 을 주지 않 기 를 바 랍 니 다.그래서 이른바 설정 파일 '핫 로드' 는 매우 중요 한 기능 이 되 었 다. 이런 부분 에서 nginx 는 우리 에 게 좋 은 모범 을 보 여 주 었 기 때문에 우리 가 배우 고 참고 할 만하 다.
 
분석:
       nginx 의 정상 적 인 서 비 스 를 할 때, 우 리 는 nginx 의 프로그램 디 렉 터 리 에서 실행 합 니 다. / nginx – sreload 를 실행 하여 설정 파일 을 다시 불 러 옵 니 다. -s 의 역할 은 master 프로 세 스에 신 호 를 보 내 는 것 입 니 다. reload 기능 외 에 stop, reopen 등 을 사용 하여 구체 적 으로 - h 를 통 해 볼 수 있 습 니 다.
 
. / nginx – s reload 를 실행 한 후, ngxs 를 통 해signal 은 "reload" 문자열 을 저장 하고 ngx 를 통 해signal_process 는 현재 실행 중인 nginxmaster 프로 세 스에 신 호 를 보 냅 니 다.코드 는 다음 과 같 습 니 다:
if (ngx_signal) {
       return  ngx_signal_process(cycle, ngx_signal);
}
코드 를 읽 으 면 현재 실행 중인 nginx 프로 세 스에 신 호 를 보 냅 니 다. 사실은 nginx 를 다시 시작 하 는 것 입 니 다. 그러나 이 nginx 는 server 로 시작 되 지 않 습 니 다. 신 호 를 보 낸 후에 종 료 됩 니 다.그래서 nginx 에 대한 일부 통 제 는 우리 가 kill 을 사용 하지 않 아 도 됩 니 다. nginx 는 우 리 를 도와 포장 을 해 주 었 고 우리 가 사용 할 때 도 편리 합 니 다.
구체 적 으로 nginx 는 어떻게 우 리 를 도와 신 호 를 보 냅 니까?사실은 간단 합 니 다. nginx 에 pid 파일 이 있 습 니 다. 그 안에 현재 실행 중인 nginxmaster 프로 세 스 의 pid 가 기록 되 어 있 기 때문에 프로그램 은 이 파일 을 통 해 프로 세 스 의 pid 를 얻 고 신호 문자열 에 대응 하 는 signo 를 얻 습 니 다. 마지막 으로 kill 을 사용 하여 신 호 를 보 냅 니 다.
Nginx 초기 화 단계 ngx 통과init_signals 함수 로 신호 조작 을 초기 화 합 니 다.재 ngxprocess. c 에서 signals 배열 을 정의 합 니 다.
typedef struct {

    int    signo;                  //    

    char  *signame;               //          

    char  *name;                 // nginx    

    void (*handler)(int signo);  //       

} ngx_signal_t;

 

 
'reload' 는 사실 SIGHUP 신호 의 패키지 입 니 다. 즉, 우 리 는 kill 을 통 해 nginx 에 SIGHUP 신 호 를 보 내 서 reload 작업 을 완성 할 수 있 습 니 다.
여기 서 우 리 는 신호 처리 함수 에 중점 을 두 고 있다: ngxsignal_handler。
그래서 우리 가 nginx – s reload 를 실행 할 때, ngxsignal_handler 가 실행 할 겁 니 다.
재 ngxsignal_handler 중, ngxprocess 는 현재 프로 세 스 의 유형 을 표시 합 니 다. 신호 처리 시 서로 다른 프로 세 스 에 대해 처리 가 다 릅 니 다. 여 기 는 switch case 를 통 해 구분 합 니 다.우 리 는 주로 masterprocess, 즉 NGX 에 관심 을 가진다.PROCESS_MASTER 타 입.코드 는 다음 과 같 습 니 다:
casengx_signal_value(NGX_RECONFIGURE_SIGNAL):

    ngx_reconfigure = 1;

    action = ", reconfiguring";

break;

 
현재 프로 세 스 의 전역 변수 ngxreconfigure 가 1 로 설정 되 었 습 니 다. 이렇게 ngxmaster_process_cycle 의 for 순환 에서 ngx 검출reconfigure = = 1, 설정 을 다시 불 러 오 는 작업 을 시작 합 니 다.
         후속 동작 이 뚜렷 하 다.통과 ngxstart_worker_processes 는 새 프로 세 스 를 열 고 이전 프로 세 스 는 ngx 를 통 해signal_worker_processes, '우아 하 다' 는 신 호 를 보 내 는 닫 기 입 니 다. 우아 한 닫 기 란 현재 요청 을 진정 으로 처리 하 는 프로 세 스 가 처리 한 후에 종료 하 는 것 을 말 합 니 다. 또한 현재 프로 세 스 는 listen 을 멈 추고 새로운 요청 을 수락 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기