Сформирован выпуск основной ветки nginx 1.19.7, в рамках которой продолжается развитие новых возможностей (в параллельно поддерживаемой стабильной ветке 1.18 вносятся только изменения, связанные с устранением серьёзных ошибок и уязвимостей).
Основные изменения:
В новой версии добавлена директива "js_header_filter", позволяющая задать JavaScript-функцию для фильтрации и изменения произвольных заголовков ответа:
js_import foo.js;
location / {
js_header_filter foo.filter;
proxy_passhttp://127.0.0.1:8081/;
}
foo.js:
function filter(r) {
var cookies = r.headersOut['Set-Cookie'];
var len = r.args.len ? Number(r.args.len) : 0;
r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len);
}
export default {filter};
Также добавлен метод ngx.fetch(), реализующий API Fetch, который предоставляет функциональность HTTP-клиента. Метод поддерживает обработку опций body, headers, buffer_size и max_response_body_size. В возвращаемом объекте Response поддерживаются методы arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type и url, а в объекте Header методы get(), getAll() и has().
function fetch(r) {
ngx.fetch('http://nginx.org/')
.then(reply => reply.text())
.then(body => r.return(200, body))
.catch(e => r.return(501, e.message));
}
Также можно отметить публикацию сервера приложений NGINX Unit 1.22, предлагающего решение для обеспечения запуска web-приложений на различных языках программирования (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js и Java). Под управлением NGINX Unit может одновременно выполняться несколько приложений на разных языках программирования, параметры запуска которых можно изменять динамически без необходимости правки файлов конфигурации и перезапуска. Код написан на языке Си и распространяется под лицензией Apache 2.0.
В новом выпуске NGINX Unit основное внимание было уделено повышению стабильности, расширению средств для тестирования и исправлению ошибок. В формируемых для Linux пакетах изменены пользователь и группа, под которыми запускается NGINX Unit. Вместо nobody:nobody процессы теперь выполняются под отдельным пользователем unit в группе unit. Обеспечена совместимость с API Stream объектов ServerRequest и ServerResponse из модуля Node.js. В опции "path" для Python-приложений разрешено указание нескольких каталогов.
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=54602
Основные изменения:
- При исчерпании рабочим процессом свободных соединений, nginx теперь закрывает не только keepalive-соединения, но и соединения в состоянии ожидания закрытия сокета ("lingering close").
- Код обработки соединений в HTTP/2 приближен к реализации HTTP/1.x. Поддержка отдельных настроек "http2_recv_timeout", "http2_idle_timeout" и "http2_max_requests" прекращена в пользу общих директив "keepalive_timeout" и "keepalive_requests".
- Удалены настройки "http2_max_field_size" и "http2_max_header_size", вместо которых следует использовать "large_client_header_buffers".
В новой версии добавлена директива "js_header_filter", позволяющая задать JavaScript-функцию для фильтрации и изменения произвольных заголовков ответа:
js_import foo.js;
location / {
js_header_filter foo.filter;
proxy_passhttp://127.0.0.1:8081/;
}
foo.js:
function filter(r) {
var cookies = r.headersOut['Set-Cookie'];
var len = r.args.len ? Number(r.args.len) : 0;
r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len);
}
export default {filter};
Также добавлен метод ngx.fetch(), реализующий API Fetch, который предоставляет функциональность HTTP-клиента. Метод поддерживает обработку опций body, headers, buffer_size и max_response_body_size. В возвращаемом объекте Response поддерживаются методы arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type и url, а в объекте Header методы get(), getAll() и has().
function fetch(r) {
ngx.fetch('http://nginx.org/')
.then(reply => reply.text())
.then(body => r.return(200, body))
.catch(e => r.return(501, e.message));
}
Также можно отметить публикацию сервера приложений NGINX Unit 1.22, предлагающего решение для обеспечения запуска web-приложений на различных языках программирования (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js и Java). Под управлением NGINX Unit может одновременно выполняться несколько приложений на разных языках программирования, параметры запуска которых можно изменять динамически без необходимости правки файлов конфигурации и перезапуска. Код написан на языке Си и распространяется под лицензией Apache 2.0.
В новом выпуске NGINX Unit основное внимание было уделено повышению стабильности, расширению средств для тестирования и исправлению ошибок. В формируемых для Linux пакетах изменены пользователь и группа, под которыми запускается NGINX Unit. Вместо nobody:nobody процессы теперь выполняются под отдельным пользователем unit в группе unit. Обеспечена совместимость с API Stream объектов ServerRequest и ServerResponse из модуля Node.js. В опции "path" для Python-приложений разрешено указание нескольких каталогов.
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=54602