nginx-자신의 HTTP 모듈 을 nginx 에 컴 파일 하 는 방법

지난 블 로 그 는 nginx 와 관련 된 데이터 구 조 를 설명 했다.
이 편 은 주로 자신의 모듈 을 nginx 에 컴 파일 하 는 방법 을 인계 합 니 다.
4.567917.자주 사용 하 는 간단 한 방법:1)먼저 소스 코드 파일 을 모두 디 렉 터 리 아래 에 확대 한 다음 디 렉 터 리 를 바 꾸 는 데 config 를 작성 하여 Nginx 에 이 모듈 을 어떻게 컴 파일 하 는 지 알려 줍 니 다.이 파일 이름 은 config 여야 합 니 다
  • configure 스 크 립 트 가 실 행 될 때 인자-add-module=PATH(위 소스,config 의 저장 디 렉 터 리)를 추가 합 니 다
  • 4.567917.정상 적 인 설치 절 차 를 실행 하 는 것 은 Nginx 의 컴 파일 작업 을 완성 하 는 것 이다
    ps:configure 스 크 립 트 를 수정 하여 실 행 된 obj/Makefile 과 obj/ngxmodule.c 파일.
      이후 에 해설 을 진행 하 다
    -------------------------------------------------------------------------------------------
    2.config 의 쓰기:
        사실 config 는 셸 스 크 립 트 입 니 다.HTTP 모듈 만 개발 하려 면 3 개의 변 수 를 정의 해 야 합 니 다.
        1.ngx_addon_name:configure 가 실 행 될 때 만 사용 합 니 다.일반적으로 모듈 이름 으로 설정 합 니 다.
        2.HTTP_MODULES:모든 HTTP 모듈 이름 을 저장 하고 스페이스 바 를 연결 합 니 다.다시 설정 할 때 덮어 쓰 지 말고 추가 만 하면 됩 니 다.
        예:&HTTPMODULES ngx_http_my_test_module
        3.NGC_ADDON_SRCS:모듈 의 원본 코드 를 지정 하 는 데 사 용 됩 니 다.스페이스 바 가 연결 되 어 있 습 니 다.
        ps:설치 시&ngx 사용 가능addon_dir 변 수 는 configure 가 실 행 될 때의--add-module=PATH 와 같 습 니 다.
        예:
        ngx_addon_name=ngx_http_mytest_module
        HTTP_MODULES="$HTTP_MODULES ngx_http_mytest_modue"
        NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_mytest_module.c"
    다음은 요점 을 설명 합 니 다.
        위의 3 개 변 수 는 config 에서 사용자 정의 할 수 있 는 유일한 부분 이 아 닙 니 다.HTTP 필터 모듈 을 개발 하려 면 HTTP 를 사용 해 야 합 니 다.FILTER_HTTP 대신 MODULESMODULES
        $CORE_MODULES:핵심 모듈.
        $EVENT_MODULES:이벤트 모듈
        $HTTP_MODULES:HTTP 모듈
        $HTTP_FILTER_MODULES:HTTP 필터 모듈
        $HTTP_HEADERS_FILTER_MODULES:HTTP 헤드 필터 모듈.
        등.NGX_ADDON_DEPS:모듈 의존 경 로 를 지정 합 니 다.
    -------------------------------------------------------------------------------------------
    3.configure 스 크 립 트 를 이용 하여 제 정 된 모듈 을 nginx 에 추가 합 니 다.
        우선 nginx 는 configure 를 통 해 프로그램 을 생 성 합 니 다.
        configure 에서
        .auto/modules
        .auto/make
        이 두 줄 코드 는 제3자 모듈 이 nginx 에 가입 하 는 것 을 말한다.
        
     1)configure 는 config 파일 을 어떻게 사용 하여 nginx 에 가입 합 니까?
        --add-module=*)    NGX_ADDONS="$NGX_ADDONS $value" ;;
      
       configure 명령 이 auto/modules 스 크 립 트 에 실 행 될 때 ngx 생 성modules.c 파일 에 제 정 된 제3자 모듈 을 추가 합 니 다.
    다음은 부분 소스 코드 입 니 다.
    if test -n "$NGX_ADDONS";then
        
        echo configuring addtional  modules
        
        for ngx_addon_dir in $NGX_ADDONS
        do
            echo "adding module in $ngx_addon_dir"
            
            if test -f $ngx_addon_dir/config; then
                .$ngx_addon_dir/config
                
                echo "+ $nginx_addon_name was configured"
            
            else
                echo "    "
                exit 1
             fi
        done
    fi

    config 파일 을 옮 겨 다 니 면ngxmodules.c 에서 ngx 정의module_t *ngx_modules[]배열,요청 을 처리 할 때 순환 방문 배열 을 통 해 어떤 모듈 로 처리 해 야 하 는 지 확인 합 니 다.
    마지막 으로 auto/make 가 관련 모듈 을 nginx 에 컴 파일 하 는 것 입 니 다.
    -------------------------------------------------------------------------------------------
    4.Makefile 파일 직접 수정
     우리 가 다시 결정 해 야 할 ngx 에 적용module* ngx_modules[]배열 의 각 모듈 의 순서 나 소스 코드 를 컴 파일 할 때 독특한 컴 파일 옵션 을 추가 해 야 합 니 다.configure 를 실행 한 후 obbs/ngx 를 실행 할 수 있 습 니 다.modules.c 와 obbs/Makefile 파일 을 직접 수정 합 니 다.
    우선,우리 가 ngx 를 수정 해 야 할 때modules.c 시 코드 를 한 줄 더 추가 해 야 합 니 다.
        extern ngx_module_t ngx_http_mytypes_module;
    그리고 주동 적 으로 ngxmodules 배열 중
    ngx_modules_t *ngx_modules[] = {
        ...
        &ngx_http_upstream_ip_hash_module,
        &ngx_http_mytest_module,
        $ngx_http_write_filter_module,
        ...
        NULL
    };

    우리 모듈 이 가입 하 는 순서 가 매우 중요 합 니 다.왜냐하면 nginx 에서 모듈 호출 순 서 는 정렬 에 필요 하기 때 문 입 니 다.
    마지막 으로 Makefile 을 수정 하 는 것 입 니 다.
    obj/addon/httpmodule/ngx_http_mytest_modules.0:$(ADDON_DEPS)\
        ../sample/httpmodule/ngx_http_mytest_modules.c
        $(CC) -c $(CFLAGS) $(ALL_INCS) \
               -o objs/addon/httpmdoule/ngx_http_mytest_module.o\
               ../sample/httpmodule//ngx_http_mytest_module.c

    그리고 대상 파일 을 Nginx 에 연결 합 니 다.
    objs/nginx:   objs/src/core/nginx.o
    ...
        objs/addon/httpmodule/ngx_http_mytest_module.o\
        objs/ngx_modules.o
        
        $(LINK) -o objs/nginx\
        objs/src/core/nginx.o\
        ...
        objs/addon/httpmodule/ngx_http_mytest_module.o\
        objs/ngx_modules.o\
        -lpthread -lcrypt -lpcre -lcrypto -lcrypto -lz

    이것 은 파일 을 수정 하 는 것 이기 때문에 정확 하지 않 은 수정 은 nginx 에 오류 가 발생 할 수 있 으 므 로 조심 하 십시오.

    좋은 웹페이지 즐겨찾기