Можно ли писать код в forking Nginx

«Можно ли писать код в forking Nginx» — вопрос из категории Devops, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. Nginx поддерживает модули, которые можно разрабатывать на C. Однако, это требует глубокого понимания работы Nginx и его API. Пример простого модуля:

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

static ngx_int_t ngx_http_hello_handler(ngx_http_request_t *r) {
    ngx_buf_t *b;
    ngx_chain_t out;

    b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
    out.buf = b;
    out.next = NULL;

    b->pos = (u_char *) "Hello World";
    b->last = b->pos + sizeof("Hello World") - 1;
    b->memory = 1;
    b->last_buf = 1;

    r->headers_out.status = NGX_HTTP_OK;
    r->headers_out.content_length_n = sizeof("Hello World") - 1;

    ngx_http_send_header(r);
    return ngx_http_output_filter(r, &out);
}

Для работы с форком Nginx нужно:

  1. Клонировать репозиторий
  2. Создать свой модуль
  3. Пересобрать Nginx с ним

Важно учитывать лицензию оригинального Nginx (BSD-подобная) и соблюдать её при форкинге.