>운영 및 유지보수 >엔진스 >Nginx의 동적 모듈 로딩 구성을 구현하는 방법

Nginx의 동적 모듈 로딩 구성을 구현하는 방법

WBOY
WBOY원래의
2023-11-08 14:23:121734검색

Nginx의 동적 모듈 로딩 구성을 구현하는 방법

Nginx는 고성능 웹 서버이자 역방향 프록시 소프트웨어입니다. 최근 출시된 Nginx 버전 1.9.11 이상에서는 동적 모듈 로딩을 지원합니다. 이 새로운 기능을 통해 사용자는 Nginx를 다시 컴파일하고 다시 설치하지 않고도 새로운 동적 모듈을 추가하여 기능을 확장하고 사용자 정의할 수 있습니다. 이 기사에서는 Nginx에서 동적 모듈 로딩 구성을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

Nginx 동적 모듈 로딩의 원칙은 새로운 컴파일 모드("--add-dynamic-module=module_path")를 통해 동적 모듈에 대한 지원을 켜는 것입니다. 이 컴파일 모드를 사용하면 컴파일에서 동적 링크 라이브러리(.so) 파일이 생성됩니다. 이 동적 링크 라이브러리는 Nginx가 시작되고 실행될 때 동적으로 로드 및 언로드될 수 있습니다. 정적 모듈과 비교하여 동적 모듈은 유연성이 더 좋습니다.

구체적인 구현 방법은 다음과 같습니다.

1. 동적 모듈 소스 코드 작성

헤더 헤더 추가 구현을 예로 들면, 헤더 헤더는 웹 애플리케이션 자체에서 요청 및 응답의 헤더를 참조합니다. Header 헤더 추가 기능은 제공하지 않으나, Custom 모듈을 통해 구현할 수 있습니다. 다음 코드는 헤더 헤더를 추가하는 간단한 예입니다.

#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>

static ngx_int_t ngx_http_add_header_handler(ngx_http_request_t *r) {
    ngx_table_elt_t *h;
    h = ngx_list_push(&r->headers_out.headers);
    h->hash = 1;
    ngx_str_set(&h->key, "MyHeader");
    ngx_str_set(&h->value, "Hello Nginx!");
    r->headers_out.content_length_n = sizeof("Hello Nginx!") - 1;
    ngx_http_clear_content_length(r);
    ngx_http_header_filter(r);
    ngx_http_send_header(r);
    return NGX_OK;
}

static ngx_int_t ngx_http_add_header_init(ngx_conf_t *cf) {
    ngx_http_handler_pt *h;
    ngx_http_core_main_conf_t *cmcf;
    cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
    h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
    if(h == NULL) {
        return NGX_ERROR;
    }
    *h = ngx_http_add_header_handler;
    return NGX_OK;
}

static ngx_http_module_t ngx_http_add_header_module_ctx = {
    NULL, ngx_http_add_header_init, NULL, NULL, NULL, NULL, NULL, NULL
};

ngx_module_t ngx_http_add_header_module = {
    NGX_MODULE_V1, &ngx_http_add_header_module_ctx, NULL, NGX_HTTP_MODULE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NGX_MODULE_V1_PADDING
};

이 코드는 Nginx 사용자 정의 모듈 ngx_http_add_header_module을 구현합니다. 이 사용자 정의 모듈에는 ngx_http_add_header_handler 및 ngx_http_add_header_init라는 두 가지 기능이 있습니다. 전자는 헤더 헤더를 추가하는 특정 논리를 구현하는 데 사용됩니다. , 후자는 모듈을 초기화하는 데 사용됩니다. 각 모듈은 모듈 컨텍스트 ngx_http_add_header_module_ctx와 모듈의 버전 번호, 컨텍스트 및 기타 정보를 포함하는 ngx_module_t 구조 변수 ngx_http_add_header_module을 정의해야 합니다.

2. 동적 링크 라이브러리를 컴파일하고 생성합니다.

다음 명령을 사용하여 동적 링크 라이브러리를 생성하는 코드를 컴파일합니다.

./configure --prefix=/usr/local/nginx --add-dynamic-module=./src/http/modules/my_module && make && make install

위 명령을 실행하면 Nginx의 HTTP 모듈 아래에 my_module 디렉터리가 생성됩니다. 동적 모듈 파일과 일부 필요한 소스 코드 및 헤더 파일을 빌드하는 데 사용되는 Makefile은 objs/ 디렉터리에 있습니다.

3. 동적 모듈 로드

Nginx 구성 파일 nginx.conf에 다음 코드를 추가하여 동적 링크 라이브러리를 로드합니다.

load_module modules/ngx_http_add_header_module.so;

http {
    server {
        listen 80;
        server_name myweb.com;
        location / {
            add_header MyHeader "Hello Nginx!";
            root /var/www/html;
        }
    }
}

http 모듈 아래의 load_module 명령을 통해 ngx_http_add_header_module.so 동적 링크 라이브러리 파일을 로드합니다. 그런 다음 서버 블록을 정의하고 서버 블록에 위치 구성 항목을 지정하여 헤더 헤더를 추가합니다.

4. Nginx 다시 로드

다음 명령을 실행하여 Nginx 서버를 다시 로드하세요.

nginx -s reload

이 명령은 구성을 다시 로드하고, Nginx를 다시 시작하고, Nginx 및 기타 작업을 종료할 수 있습니다.

이제 Nginx에서 동적 모듈 로딩 구성을 구현하는 프로세스가 완료되었습니다.

요약:

위의 소개를 통해 Nginx 1.9.11 이상 버전의 동적 모듈 로딩 구현 방법을 간략하게 이해할 수 있습니다. 구현 과정에서는 동적 모듈 소스 코드 작성, 동적 링크 라이브러리 컴파일 및 생성, 모듈 라이브러리 로드, Nginx 다시 로드를 순서대로 수행해야 합니다. 동적 모듈을 사용하면 사용자는 출시 후 단계에서 특정 기능을 개발할 수 있어 제품 출시가 더 빠르고 유연해집니다.

위 내용은 Nginx의 동적 모듈 로딩 구성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.