Latest update - 9239
This commit is contained in:
@@ -477,3 +477,4 @@ f8134640e8615448205785cf00b0bc810489b495 release-1.25.1
|
||||
1d839f05409d1a50d0f15a2bf36547001f99ae40 release-1.25.2
|
||||
294a3d07234f8f65d7b0e0b0e2c5b05c12c5da0a release-1.25.3
|
||||
173a0a7dbce569adbb70257c6ec4f0f6bc585009 release-1.25.4
|
||||
8618e4d900cc71082fbe7dc72af087937d64faf5 release-1.25.5
|
||||
@@ -5,6 +5,83 @@
|
||||
<change_log title="nginx">
|
||||
|
||||
|
||||
<changes ver="1.25.5" date="2024-04-16">
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
виртуальные сервера в модуле stream.
|
||||
</para>
|
||||
<para lang="en">
|
||||
virtual servers in the stream module.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
модуль ngx_stream_pass_module.
|
||||
</para>
|
||||
<para lang="en">
|
||||
the ngx_stream_pass_module.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
параметры deferred, accept_filter и setfib директивы listen в модуле stream.
|
||||
</para>
|
||||
<para lang="en">
|
||||
the "deferred", "accept_filter", and "setfib" parameters of the "listen"
|
||||
directive in the stream module.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
определение размера строки кеша процессора для некоторых архитектур.<br/>
|
||||
Спасибо Piotr Sikora.
|
||||
</para>
|
||||
<para lang="en">
|
||||
cache line size detection for some architectures.<br/>
|
||||
Thanks to Piotr Sikora.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
поддержка Homebrew на Apple Silicon.<br/>
|
||||
Спасибо Piotr Sikora.
|
||||
</para>
|
||||
<para lang="en">
|
||||
support for Homebrew on Apple Silicon.<br/>
|
||||
Thanks to Piotr Sikora.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
улучшения и исправления кросс-компиляции для Windows.<br/>
|
||||
Спасибо Piotr Sikora.
|
||||
</para>
|
||||
<para lang="en">
|
||||
Windows cross-compilation bugfixes and improvements.<br/>
|
||||
Thanks to Piotr Sikora.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
неожиданное закрытие соединения при использовании 0-RTT в QUIC.<br/>
|
||||
Спасибо Владимиру Хомутову.
|
||||
</para>
|
||||
<para lang="en">
|
||||
unexpected connection closure while using 0-RTT in QUIC.<br/>
|
||||
Thanks to Vladimir Khomutov.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
</changes>
|
||||
|
||||
|
||||
<changes ver="1.25.4" date="2024-02-14">
|
||||
|
||||
<change type="security">
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
#include <ngx_stream.h>
|
||||
|
||||
|
||||
#define NGX_STREAM_PASS_MAX_PASSES 10
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_addr_t *addr;
|
||||
ngx_stream_complex_value_t *addr_value;
|
||||
@@ -17,6 +20,8 @@ typedef struct {
|
||||
|
||||
|
||||
static void ngx_stream_pass_handler(ngx_stream_session_t *s);
|
||||
static ngx_int_t ngx_stream_pass_check_cycle(ngx_connection_t *c);
|
||||
static void ngx_stream_pass_cleanup(void *data);
|
||||
static ngx_int_t ngx_stream_pass_match(ngx_listening_t *ls, ngx_addr_t *addr);
|
||||
static void *ngx_stream_pass_create_srv_conf(ngx_conf_t *cf);
|
||||
static char *ngx_stream_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
|
||||
@@ -125,6 +130,10 @@ ngx_stream_pass_handler(ngx_stream_session_t *s)
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_STREAM, c->log, 0,
|
||||
"stream pass addr: \"%V\"", &addr->name);
|
||||
|
||||
if (ngx_stream_pass_check_cycle(c) != NGX_OK) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
ls = ngx_cycle->listening.elts;
|
||||
|
||||
for (i = 0; i < ngx_cycle->listening.nelts; i++) {
|
||||
@@ -163,6 +172,48 @@ failed:
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_stream_pass_check_cycle(ngx_connection_t *c)
|
||||
{
|
||||
ngx_uint_t *num;
|
||||
ngx_pool_cleanup_t *cln;
|
||||
|
||||
for (cln = c->pool->cleanup; cln; cln = cln->next) {
|
||||
if (cln->handler != ngx_stream_pass_cleanup) {
|
||||
continue;
|
||||
}
|
||||
|
||||
num = cln->data;
|
||||
|
||||
if (++(*num) > NGX_STREAM_PASS_MAX_PASSES) {
|
||||
ngx_log_error(NGX_LOG_ERR, c->log, 0, "stream pass cycle");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
cln = ngx_pool_cleanup_add(c->pool, sizeof(ngx_uint_t));
|
||||
if (cln == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
cln->handler = ngx_stream_pass_cleanup;
|
||||
|
||||
num = cln->data;
|
||||
*num = 1;
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ngx_stream_pass_cleanup(void *data)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_stream_pass_match(ngx_listening_t *ls, ngx_addr_t *addr)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user