Maison Opération et maintenance Nginx Interpréter les principes de mise en œuvre sous-jacents du mécanisme de développement et d'extension de modules de Nginx

Interpréter les principes de mise en œuvre sous-jacents du mécanisme de développement et d'extension de modules de Nginx

Aug 05, 2023 am 08:24 AM
nginx模块开发 扩展机制实现原理 nginx底层实现原理

Interprétation des principes de mise en œuvre sous-jacents du mécanisme de développement et d'extension de modules de Nginx

Nginx est un serveur Web haute performance et un serveur proxy inverse très populaire. Son mécanisme de développement et d'extension de modules permet aux utilisateurs d'étendre facilement les fonctions de Nginx. Cet article analysera les principes de mise en œuvre sous-jacents du mécanisme de développement et d'extension de modules de Nginx et donnera quelques exemples de code.

  1. Structure du module Nginx
    Un module Nginx standard est une bibliothèque de liens dynamiques, qui contient une série de fonctions de rappel qui seront appelées à des moments correspondants pendant l'exécution de Nginx. Un exemple de structure d'un module Nginx est le suivant :
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>

static ngx_int_t ngx_http_example_handler(ngx_http_request_t *r);

static ngx_http_module_t ngx_http_example_module_ctx = {
    NULL,                          /* preconfiguration */
    NULL,                          /* postconfiguration */

    NULL,                          /* create main configuration */
    NULL,                          /* init main configuration */

    NULL,                          /* create server configuration */
    NULL,                          /* merge server configuration */

    NULL,                          /* create location configuration */
    NULL                           /* merge location configuration */
};

ngx_module_t ngx_http_example_module = {
    NGX_MODULE_V1,
    &ngx_http_example_module_ctx,  /* module context */
    NULL,                          /* module directives */
    NGX_HTTP_MODULE,               /* module type */
    NULL,                          /* init master */
    NULL,                          /* init module */
    NULL,                          /* init process */
    NULL,                          /* init thread */
    NULL,                          /* exit thread */
    NULL,                          /* exit process */
    NULL,                          /* exit master */
    NGX_MODULE_V1_PADDING
};

static ngx_command_t ngx_http_example_commands[] = {
    { ngx_string("example"),
      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
      ngx_http_example_command,
      NGX_HTTP_LOC_CONF_OFFSET,
      0,
      NULL },
    
    ngx_null_command
};

static ngx_http_module_t ngx_http_example_module_ctx = {
    NULL,                          /* preconfiguration */
    NULL,                          /* postconfiguration */

    NULL,                          /* create main configuration */
    NULL,                          /* init main configuration */

    NULL,                          /* create server configuration */
    NULL,                          /* merge server configuration */

    NULL,                          /* create location configuration */
    NULL                           /* merge location configuration */
};

ngx_module_t ngx_http_example_module = {
    NGX_MODULE_V1,
    &ngx_http_example_module_ctx,  /* module context */
    ngx_http_example_commands,     /* module directives */
    NGX_HTTP_MODULE,               /* module type */
    NULL,                          /* init master */
    NULL,                          /* init module */
    NULL,                          /* init process */
    NULL,                          /* init thread */
    NULL,                          /* exit thread */
    NULL,                          /* exit process */
    NULL,                          /* exit master */
    NGX_MODULE_V1_PADDING
};
Copier après la connexion

Dans le code ci-dessus, nous pouvons voir que la structure ngx_module_t définit un module Nginx et spécifie le contexte du module et la fonction de rappel spécifiée. La structure ngx_http_module_t est utilisée pour la définition des modules HTTP.

  1. Fonction de rappel principale du module Nginx
    La fonction de rappel principale du module Nginx pointe vers la fonction correspondante via le pointeur dans la structure ngx_http_module_t. Voici quelques fonctions de rappel de base et exemples de code couramment utilisés :
static ngx_int_t ngx_http_example_handler(ngx_http_request_t *r)
{
    ngx_int_t rc;
    ngx_buf_t *b;
    ngx_chain_t out;

    /* 创建一个输出缓冲区 */
    b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
    if (b == NULL) {
        return NGX_HTTP_INTERNAL_SERVER_ERROR;
    }
    out.buf = b;
    out.next = NULL;

    /* 设置输出缓冲区的内容 */
    b->pos = (u_char *) "Hello, Nginx!";
    b->last = b->pos + sizeof("Hello, Nginx!") - 1;
    b->memory = 1;
    b->last_buf = 1;

    /* 设置响应头部 */
    r->headers_out.status = NGX_HTTP_OK;
    r->headers_out.content_length_n = sizeof("Hello, Nginx!") - 1;
    rc = ngx_http_send_header(r);

    /* 发送响应内容 */
    if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
        return rc;
    }
    return ngx_http_output_filter(r, &out);
}

static ngx_int_t ngx_http_example_init(ngx_conf_t *cf)
{
    /* 获取http模块的ngx_http_core_module上下文 */
    ngx_http_core_main_conf_t *cmcf;
    cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);

    /* 在ngx_http_core_module的处理请求的回调函数数组handlers中加入自定义回调函数 */
    ngx_http_handler_pt *h;
    h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
    if (h == NULL) {
        return NGX_ERROR;
    }
    *h = ngx_http_example_handler;

    return NGX_OK;
}
Copier après la connexion

Dans l'exemple de code ci-dessus, la fonction ngx_http_example_handler est la fonction qui gère réellement les requêtes HTTP. De plus, la fonction ngx_http_example_init est utilisée pour ajouter ngx_http_example_handler au tableau de fonctions de rappel de traitement des requêtes de Nginx.

  1. Compilation et chargement du module Nginx
    Lors de la compilation du module Nginx, vous devez ajouter le paramètre --add-module=/path/to/module/directory à la commande configure et transmettre le répertoire de code source du module à la commande configure scénario. Utilisez ensuite la commande make pour compiler Nginx.

Pour charger le module Nginx, vous pouvez utiliser la directive load_module dans le fichier de configuration Nginx pour spécifier le chemin du module. Par exemple :

load_module /path/to/module.so;
Copier après la connexion
  1. Résumé
    À travers cet article, nous comprenons les principes sous-jacents de mise en œuvre du développement de modules Nginx et du mécanisme d'extension, et donnons quelques exemples de code. J'espère que les lecteurs pourront avoir une compréhension plus approfondie du développement et de l'expansion des modules Nginx et ajouter plus de fonctions à leurs projets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment configurer Nginx pour les incluses côté serveur (SSI)? Comment configurer Nginx pour les incluses côté serveur (SSI)? Mar 17, 2025 pm 05:06 PM

L'article discute de la configuration de Nginx pour les incluses côté serveur (SSI), des implications de performances, de l'utilisation de SSI pour le contenu dynamique et de dépannage des problèmes SSI communs dans nginx.Word Count: 159

Comment implémenter l'authentification HTTP (Auth Basic, Digest Auth) dans Nginx? Comment implémenter l'authentification HTTP (Auth Basic, Digest Auth) dans Nginx? Mar 17, 2025 pm 05:03 PM

L'article examine la mise en œuvre de l'authentification HTTP dans NGINX à l'aide de méthodes de base et de digestion, de détail des étapes de configuration et des implications de sécurité. Il couvre également l'utilisation de royaumes d'authentification pour la gestion des utilisateurs et suggère de combiner la méthamphétamine d'authentification

Comment surveiller les performances Nginx et l'utilisation des ressources? Comment surveiller les performances Nginx et l'utilisation des ressources? Mar 17, 2025 pm 05:08 PM

L'article traite de la surveillance et de l'optimisation des performances de Nginx, en se concentrant sur l'utilisation d'outils comme la page d'état de Nginx, la surveillance au niveau du système et les solutions tierces comme Prometheus et Grafana. Il met l'accent sur les meilleures pratiques pour les performances Optimiza

Comment configurer Nginx pour la réécriture et la redirection de l'URL? Comment configurer Nginx pour la réécriture et la redirection de l'URL? Mar 17, 2025 pm 05:02 PM

L'article discute de la configuration de Nginx pour la réécriture et la redirection de l'URL, les étapes de détail et les meilleures pratiques. Il traite des erreurs courantes et des méthodes de test pour assurer une gestion efficace des URL.

Quels sont les meilleurs outils pour surveiller Nginx? Quels sont les meilleurs outils pour surveiller Nginx? Mar 17, 2025 pm 05:09 PM

L'article traite des meilleurs outils de surveillance NGINX tels que Datadog, New Relic et Nginx Amplify, en se concentrant sur leurs fonctionnalités pour une surveillance, une alerte et des mesures détaillées en temps réel pour améliorer les performances du serveur.

Comment Nginx gère-t-il le traitement des demandes et les processus de travail? Comment Nginx gère-t-il le traitement des demandes et les processus de travail? Mar 14, 2025 pm 04:13 PM

Nginx utilise un modèle de maître-travailleur pour gérer efficacement les demandes. Les processus de travail gèrent des milliers de connexions en utilisant des E / S non bloquantes axées sur les événements. L'optimisation des performances implique d'ajuster les processus, les connexions et les établissements de configuration

Ticage de performances Nginx: Optimisation de la vitesse et de la faible latence Ticage de performances Nginx: Optimisation de la vitesse et de la faible latence Apr 05, 2025 am 12:08 AM

Le réglage des performances de Nginx peut être obtenu en ajustant le nombre de processus de travail, la taille du pool de connexion, l'activation des protocoles de compression GZIP et HTTP / 2 et en utilisant l'équilibrage du cache et de la charge. 1. Ajustez le nombre de processus de travail et la taille du pool de connexion: Worker_ProcessesAuto; Événements {Worker_Connections1024;}. 2. Activer la compression GZIP et le protocole http / 2: http {gzipon; serveur {écouter443sslhttp2;}}. 3. Utilisez l'optimisation du cache: http {proxy_cache_path / path / to / cachelevels = 1: 2k

Quelles sont les meilleures stratégies pour gérer les certificats SSL / TLS sur Nginx? Quelles sont les meilleures stratégies pour gérer les certificats SSL / TLS sur Nginx? Mar 11, 2025 pm 05:13 PM

Cet article détaille les meilleures pratiques pour gérer les certificats SSL / TLS sur Nginx. Il met l'accent sur l'automatisation via des outils comme CERTBOT et les services cloud, une configuration appropriée (y compris des chiffres solides), une surveillance régulière de l'expiration et de la vulnérabilité

See all articles