diff --git a/reference-lib/package-lock.json b/reference-lib/package-lock.json index d01324d..676f80d 100644 --- a/reference-lib/package-lock.json +++ b/reference-lib/package-lock.json @@ -1,12 +1,12 @@ { "name": "@nginx/reference-lib", - "version": "1.1.41", + "version": "1.1.42", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@nginx/reference-lib", - "version": "1.1.41", + "version": "1.1.42", "license": "Apache-2.0", "devDependencies": { "@rollup/plugin-json": "^6.1.0", diff --git a/reference-lib/package.json b/reference-lib/package.json index e6943e5..608fa99 100644 --- a/reference-lib/package.json +++ b/reference-lib/package.json @@ -1,6 +1,6 @@ { "name": "@nginx/reference-lib", - "version": "1.1.41", + "version": "1.1.42", "description": "", "main": "dist/index.js", "type": "module", diff --git a/reference-lib/src/reference.json b/reference-lib/src/reference.json index 655aa2d..dbc6b70 100644 --- a/reference-lib/src/reference.json +++ b/reference-lib/src/reference.json @@ -379,8 +379,8 @@ "

[write=on|off]

\n" ], "isBlock": false, - "description_md": "Turns on the REST API interface in the surrounding location.\nAccess to this location should be\n[limited](https://nginx.org/en/docs/http/ngx_http_core_module.html#satisfy).\n\nThe `write` parameter determines whether the API\nis read-only or read-write.\nBy default, the API is read-only.\n\nAll API requests should contain a supported API version in the URI.\nIf the request URI equals the location prefix,\nthe list of supported API versions is returned.\nThe current API version is “`9`”.\n\nThe optional “`fields`” argument in the request line\nspecifies which fields of the requested objects will be output:\n```\nhttp://127.0.0.1/api/9/nginx?fields=version,build\n```", - "description_html": "

Turns on the REST API interface in the surrounding location.\nAccess to this location should be\nlimited.

\n\n

The write parameter determines whether the API\nis read-only or read-write.\nBy default, the API is read-only.

\n\n

All API requests should contain a supported API version in the URI.\nIf the request URI equals the location prefix,\nthe list of supported API versions is returned.\nThe current API version is “9”.

\n\n

The optional “fields” argument in the request line\nspecifies which fields of the requested objects will be output:

\n\n
http://127.0.0.1/api/9/nginx?fields=version,build\n
\n" + "description_md": "Turns on the REST API interface in the surrounding location.\nAccess to this location should be\n[limited](https://nginx.org/en/docs/http/ngx_http_core_module.html#satisfy).\n\nThe `write` parameter determines whether the API\nis read-only or read-write.\nBy default, the API is read-only.\n\nAll API requests should contain a supported API version in the URI.\nIf the request URI equals the location prefix,\nthe list of supported API versions is returned.\nThe current API version is “`10`”.\n\nThe optional “`fields`” argument in the request line\nspecifies which fields of the requested objects will be output:\n```\nhttp://127.0.0.1/api/10/nginx?fields=version,build\n```", + "description_html": "

Turns on the REST API interface in the surrounding location.\nAccess to this location should be\nlimited.

\n\n

The write parameter determines whether the API\nis read-only or read-write.\nBy default, the API is read-only.

\n\n

All API requests should contain a supported API version in the URI.\nIf the request URI equals the location prefix,\nthe list of supported API versions is returned.\nThe current API version is “10”.

\n\n

The optional “fields” argument in the request line\nspecifies which fields of the requested objects will be output:

\n\n
http://127.0.0.1/api/10/nginx?fields=version,build\n
\n" }, { "name": "status_zone", @@ -1025,8 +1025,8 @@ "

path

\n" ], "isBlock": false, - "description_md": "Defines a replacement for the specified location.\nFor example, with the following configuration\n```\nlocation /i/ {\n alias /data/w3/images/;\n}\n```\non request of\n“`/i/top.gif`”, the file\n`/data/w3/images/top.gif` will be sent.\n\nThe *`path`* value can contain variables,\nexcept `$document_root` and `$realpath_root`.\n\nIf `alias` is used inside a location defined\nwith a regular expression then such regular expression should\ncontain captures and `alias` should refer to\nthese captures (0.7.40), for example:\n```\nlocation ~ ^/users/(.+\\.(?:gif|jpe?g|png))$ {\n alias /data/w3/images/$1;\n}\n```\n\nWhen location matches the last part of the directive’s value:\n```\nlocation /images/ {\n alias /data/w3/images/;\n}\n```\nit is better to use the\n[`root`](https://nginx.org/en/docs/http/ngx_http_core_module.html#root)\ndirective instead:\n```\nlocation /images/ {\n root /data/w3;\n}\n```", - "description_html": "

Defines a replacement for the specified location.\nFor example, with the following configuration

\n\n
location /i/ {\n    alias /data/w3/images/;\n}\n
\n\n

on request of\n“/i/top.gif”, the file\n/data/w3/images/top.gif will be sent.

\n\n

The path value can contain variables,\nexcept $document_root and $realpath_root.

\n\n

If alias is used inside a location defined\nwith a regular expression then such regular expression should\ncontain captures and alias should refer to\nthese captures (0.7.40), for example:

\n\n
location ~ ^/users/(.+\\.(?:gif|jpe?g|png))$ {\n    alias /data/w3/images/$1;\n}\n
\n\n

When location matches the last part of the directive’s value:

\n\n
location /images/ {\n    alias /data/w3/images/;\n}\n
\n\n

it is better to use the\nroot\ndirective instead:

\n\n
location /images/ {\n    root /data/w3;\n}\n
\n" + "description_md": "Defines a replacement for the specified location.\nFor example, with the following configuration\n```\nlocation /i/ {\n alias /data/w3/images/;\n}\n```\non request of\n“`/i/top.gif`”, the file\n`/data/w3/images/top.gif` will be sent.\n\nThe *`path`* value can contain variables,\nexcept `$document_root` and `$realpath_root`.\n\nIf `alias` is used inside a location defined\nwith a regular expression then its value specifies\na complete file path (0.7.40).\nSuch path should typically refer to the captures contained\nwithin the regular expression:\n```\nlocation ~ ^/users/(.+\\.(?:gif|jpe?g|png))$ {\n alias /data/w3/images/$1;\n}\n```\n\nIf `alias` is used inside a predicate location\nthen its value specifies a complete file path.\n\nWhen location matches the last part of the directive’s value:\n```\nlocation /images/ {\n alias /data/w3/images/;\n}\n```\nit is better to use the\n[`root`](https://nginx.org/en/docs/http/ngx_http_core_module.html#root)\ndirective instead:\n```\nlocation /images/ {\n root /data/w3;\n}\n```", + "description_html": "

Defines a replacement for the specified location.\nFor example, with the following configuration

\n\n
location /i/ {\n    alias /data/w3/images/;\n}\n
\n\n

on request of\n“/i/top.gif”, the file\n/data/w3/images/top.gif will be sent.

\n\n

The path value can contain variables,\nexcept $document_root and $realpath_root.

\n\n

If alias is used inside a location defined\nwith a regular expression then its value specifies\na complete file path (0.7.40).\nSuch path should typically refer to the captures contained\nwithin the regular expression:

\n\n
location ~ ^/users/(.+\\.(?:gif|jpe?g|png))$ {\n    alias /data/w3/images/$1;\n}\n
\n\n

If alias is used inside a predicate location\nthen its value specifies a complete file path.

\n\n

When location matches the last part of the directive’s value:

\n\n
location /images/ {\n    alias /data/w3/images/;\n}\n
\n\n

it is better to use the\nroot\ndirective instead:

\n\n
location /images/ {\n    root /data/w3;\n}\n
\n" }, { "name": "auth_delay", @@ -1082,6 +1082,23 @@ "description_md": "Sets buffer size for reading client request body.\nIn case the request body is larger than the buffer,\nthe whole body or only its part is written to a\n[temporary file](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_temp_path).\nBy default, buffer size is equal to two memory pages.\nThis is 8K on x86, other 32-bit platforms, and x86-64.\nIt is usually 16K on other 64-bit platforms.", "description_html": "

Sets buffer size for reading client request body.\nIn case the request body is larger than the buffer,\nthe whole body or only its part is written to a\ntemporary file.\nBy default, buffer size is equal to two memory pages.\nThis is 8K on x86, other 32-bit platforms, and x86-64.\nIt is usually 16K on other 64-bit platforms.

\n" }, + { + "name": "client_body_early_read", + "default": "", + "contexts": [ + "http", + "server" + ], + "syntax_md": [ + "*`string`* ..." + ], + "syntax_html": [ + "

string …

\n" + ], + "isBlock": false, + "description_md": "Enables reading of the client request body immediately after the request\nheaders are received,\nusing the request body read settings from the `server` block.\nIf at least one value of the string parameters is not empty\nand is not equal to “0”, then nginx reads the request body early.\n\nThe directive is incompatible with modules\nthat use unbuffered request body processing, such as the\n[ngx_http_grpc_module](https://nginx.org/en/docs/http/ngx_http_grpc_module.html) module.\nThe directive is also incompatible with modules\nwhich write the request body to a file, such as\n[ngx_http_dav_module](https://nginx.org/en/docs/http/ngx_http_dav_module.html) module.\n\nThe [`client_body_in_file_only`](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_in_file_only) directive is ignored\nwhen the request body is read early.\n\nExample:\n```\nmap $http_content_type $is_json {\n application/json 1;\n}\n\nserver {\n listen 8000;\n\n client_body_early_read $is_json;\n\n client_max_body_size 256;\n client_body_buffer_size 256;\n\n return 200 $request_body;\n}\n```", + "description_html": "

Enables reading of the client request body immediately after the request\nheaders are received,\nusing the request body read settings from the server block.\nIf at least one value of the string parameters is not empty\nand is not equal to “0”, then nginx reads the request body early.

\n\n

The directive is incompatible with modules\nthat use unbuffered request body processing, such as the\nngx_http_grpc_module module.\nThe directive is also incompatible with modules\nwhich write the request body to a file, such as\nngx_http_dav_module module.

\n\n

The client_body_in_file_only directive is ignored\nwhen the request body is read early.

\n\n

Example:

\n\n
map $http_content_type $is_json {\n    application/json  1;\n}\n\nserver {\n    listen 8000;\n\n    client_body_early_read $is_json;\n\n    client_max_body_size    256;\n    client_body_buffer_size 256;\n\n    return 200 $request_body;\n}\n
\n" + }, { "name": "client_body_in_file_only", "default": "off", @@ -1681,15 +1698,17 @@ ], "syntax_md": [ "[ `=` | `~` | `~*` | `^~` ] *`uri`* `{...}`", + "*`$variable`* `{...}`", "`@`*`name`* `{...}`" ], "syntax_html": [ "

[ = | ~ | ~* | ^~ ] uri {...}

\n", + "

$variable {...}

\n", "

@name {...}

\n" ], "isBlock": true, - "description_md": "Sets configuration depending on a request URI.\n\nThe matching is performed against a normalized URI,\nafter decoding the text encoded in the “`%XX`” form,\nresolving references to relative path components “`.`”\nand “`..`”, and possible\n[compression](https://nginx.org/en/docs/http/ngx_http_core_module.html#merge_slashes) of two or more\nadjacent slashes into a single slash.\n\nA location can either be defined by a prefix string, or by a regular expression.\nRegular expressions are specified with the preceding\n“`~*`” modifier (for case-insensitive matching), or the\n“`~`” modifier (for case-sensitive matching).\nTo find location matching a given request, nginx first checks\nlocations defined using the prefix strings (prefix locations).\nAmong them, the location with the longest matching\nprefix is selected and remembered.\nThen regular expressions are checked, in the order of their appearance\nin the configuration file.\nThe search of regular expressions terminates on the first match,\nand the corresponding configuration is used.\nIf no match with a regular expression is found then the\nconfiguration of the prefix location remembered earlier is used.\n\n`location` blocks can be nested, with some exceptions\nmentioned below.\n\nFor case-insensitive operating systems such as macOS and Cygwin,\nmatching with prefix strings ignores a case (0.7.7).\nHowever, comparison is limited to one-byte locales.\n\nRegular expressions can contain captures (0.7.40) that can later\nbe used in other directives, see\n[Regular expression captures](https://nginx.org/en/docs/regex_captures.html).\n\nIf the longest matching prefix location has the “`^~`” modifier\nthen regular expressions are not checked.\n\nAlso, using the “`=`” modifier it is possible to define\nan exact match of URI and location.\nIf an exact match is found, the search terminates.\nFor example, if a “`/`” request happens frequently,\ndefining “`location = /`” will speed up the processing\nof these requests, as search terminates right after the first\ncomparison.\nSuch a location cannot obviously contain nested locations.\n\n> In versions from 0.7.1 to 0.8.41, if a request matched the prefix\n> location without the “`=`” and “`^~`”\n> modifiers, the search also terminated and regular expressions were\n> not checked.\n\nLet’s illustrate the above by an example:\n```\nlocation = / {\n [ configuration A ]\n}\n\nlocation / {\n [ configuration B ]\n}\n\nlocation /documents/ {\n [ configuration C ]\n}\n\nlocation ^~ /images/ {\n [ configuration D ]\n}\n\nlocation ~* \\.(gif|jpg|jpeg)$ {\n [ configuration E ]\n}\n```\nThe “`/`” request will match configuration A,\nthe “`/index.html`” request will match configuration B,\nthe “`/documents/document.html`” request will match\nconfiguration C,\nthe “`/images/1.gif`” request will match configuration D, and\nthe “`/documents/1.jpg`” request will match configuration E.\n\nThe “`@`” prefix defines a named location.\nSuch a location is not used for a regular request processing, but instead\nused for request redirection.\nThey cannot be nested, and cannot contain nested locations.\n\nIf a location is defined by a prefix string that ends with the slash character,\nand requests are processed by one of\n[`proxy_pass`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass),\n[`fastcgi_pass`](https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_pass),\n[`uwsgi_pass`](https://nginx.org/en/docs/http/ngx_http_uwsgi_module.html#uwsgi_pass),\n[`scgi_pass`](https://nginx.org/en/docs/http/ngx_http_scgi_module.html#scgi_pass),\n[`memcached_pass`](https://nginx.org/en/docs/http/ngx_http_memcached_module.html#memcached_pass), or\n[`grpc_pass`](https://nginx.org/en/docs/http/ngx_http_grpc_module.html#grpc_pass),\nthen the special processing is performed.\nIn response to a request with URI equal to this string,\nbut without the trailing slash,\na permanent redirect with the code 301 will be returned to the requested URI\nwith the slash appended.\nIf this is not desired, an exact match of the URI and location could be\ndefined like this:\n```\nlocation /user/ {\n proxy_pass http://user.example.com;\n}\n\nlocation = /user {\n proxy_pass http://login.example.com;\n}\n```", - "description_html": "

Sets configuration depending on a request URI.

\n\n

The matching is performed against a normalized URI,\nafter decoding the text encoded in the “%XX” form,\nresolving references to relative path components “.”\nand “..”, and possible\ncompression of two or more\nadjacent slashes into a single slash.

\n\n

A location can either be defined by a prefix string, or by a regular expression.\nRegular expressions are specified with the preceding\n“~*” modifier (for case-insensitive matching), or the\n“~” modifier (for case-sensitive matching).\nTo find location matching a given request, nginx first checks\nlocations defined using the prefix strings (prefix locations).\nAmong them, the location with the longest matching\nprefix is selected and remembered.\nThen regular expressions are checked, in the order of their appearance\nin the configuration file.\nThe search of regular expressions terminates on the first match,\nand the corresponding configuration is used.\nIf no match with a regular expression is found then the\nconfiguration of the prefix location remembered earlier is used.

\n\n

location blocks can be nested, with some exceptions\nmentioned below.

\n\n

For case-insensitive operating systems such as macOS and Cygwin,\nmatching with prefix strings ignores a case (0.7.7).\nHowever, comparison is limited to one-byte locales.

\n\n

Regular expressions can contain captures (0.7.40) that can later\nbe used in other directives, see\nRegular expression captures.

\n\n

If the longest matching prefix location has the “^~” modifier\nthen regular expressions are not checked.

\n\n

Also, using the “=” modifier it is possible to define\nan exact match of URI and location.\nIf an exact match is found, the search terminates.\nFor example, if a “/” request happens frequently,\ndefining “location = /” will speed up the processing\nof these requests, as search terminates right after the first\ncomparison.\nSuch a location cannot obviously contain nested locations.

\n\n
\n

In versions from 0.7.1 to 0.8.41, if a request matched the prefix\nlocation without the “=” and “^~”\nmodifiers, the search also terminated and regular expressions were\nnot checked.

\n
\n\n

Let’s illustrate the above by an example:

\n\n
location = / {\n    [ configuration A ]\n}\n\nlocation / {\n    [ configuration B ]\n}\n\nlocation /documents/ {\n    [ configuration C ]\n}\n\nlocation ^~ /images/ {\n    [ configuration D ]\n}\n\nlocation ~* \\.(gif|jpg|jpeg)$ {\n    [ configuration E ]\n}\n
\n\n

The “/” request will match configuration A,\nthe “/index.html” request will match configuration B,\nthe “/documents/document.html” request will match\nconfiguration C,\nthe “/images/1.gif” request will match configuration D, and\nthe “/documents/1.jpg” request will match configuration E.

\n\n

The “@” prefix defines a named location.\nSuch a location is not used for a regular request processing, but instead\nused for request redirection.\nThey cannot be nested, and cannot contain nested locations.

\n\n

If a location is defined by a prefix string that ends with the slash character,\nand requests are processed by one of\nproxy_pass,\nfastcgi_pass,\nuwsgi_pass,\nscgi_pass,\nmemcached_pass, or\ngrpc_pass,\nthen the special processing is performed.\nIn response to a request with URI equal to this string,\nbut without the trailing slash,\na permanent redirect with the code 301 will be returned to the requested URI\nwith the slash appended.\nIf this is not desired, an exact match of the URI and location could be\ndefined like this:

\n\n
location /user/ {\n    proxy_pass http://user.example.com;\n}\n\nlocation = /user {\n    proxy_pass http://login.example.com;\n}\n
\n" + "description_md": "Sets configuration depending on a request URI\nor the value of a variable (1.31.5).\n\nThe matching is performed against a normalized URI,\nafter decoding the text encoded in the “`%XX`” form,\nresolving references to relative path components “`.`”\nand “`..`”, and possible\n[compression](https://nginx.org/en/docs/http/ngx_http_core_module.html#merge_slashes) of two or more\nadjacent slashes into a single slash.\n\nA location can be defined by a prefix string, a regular expression,\nor a predicate (1.31.5).\nRegular expressions are specified with the preceding\n“`~*`” modifier (for case-insensitive matching), or the\n“`~`” modifier (for case-sensitive matching).\nA predicate is specified with the preceding “`$`”\nand contains a variable evaluated during request processing.\nA predicate location matches if the variable value is not empty\nand is not equal to “0”.\n\nTo find location matching a given request, nginx first checks\nlocations defined using the prefix strings (prefix locations).\nAmong them, the location with the longest matching\nprefix is selected and remembered.\nThen regular expressions are checked, in the order of their appearance\nin the configuration file.\nThe search of regular expressions terminates on the first match,\nand the corresponding configuration is used.\nIf no match with a regular expression is found, predicate locations are checked\nin the order of their appearance in the configuration file.\nIf no predicate location matches, the configuration of the prefix location\nremembered earlier is used.\n\n`location` blocks can be nested, with some exceptions\nmentioned below.\n\nFor case-insensitive operating systems such as macOS and Cygwin,\nmatching with prefix strings ignores a case (0.7.7).\nHowever, comparison is limited to one-byte locales.\n\nRegular expressions can contain captures (0.7.40) that can later\nbe used in other directives, see\n[Regular expression captures](https://nginx.org/en/docs/regex_captures.html).\n\nIf the longest matching prefix location has the “`^~`” modifier,\nthen regular expressions and predicate locations are not checked.\n\nAlso, using the “`=`” modifier it is possible to define\nan exact match of URI and location.\nIf an exact match is found, the search terminates.\nFor example, if a “`/`” request happens frequently,\ndefining “`location = /`” will speed up the processing\nof these requests, as search terminates right after the first\ncomparison.\nSuch a location cannot obviously contain nested locations.\n\n> In versions from 0.7.1 to 0.8.41, if a request matched the prefix\n> location without the “`=`” and “`^~`”\n> modifiers, the search also terminated and regular expressions were\n> not checked.\n\nLet’s illustrate the above by an example:\n```\nlocation = / {\n [ configuration A ]\n}\n\nlocation / {\n [ configuration B ]\n}\n\nlocation /documents/ {\n [ configuration C ]\n}\n\nlocation ^~ /images/ {\n [ configuration D ]\n}\n\nlocation ~* \\.(gif|jpg|jpeg)$ {\n [ configuration E ]\n}\n\nlocation $arg_pred {\n [ configuration F ]\n}\n```\nThe “`/`” request will match configuration A,\nthe “`/index.html`” request will match configuration B,\nthe “`/documents/document.html`” request will match\nconfiguration C,\nthe “`/images/1.gif`” request will match configuration D,\nthe “`/documents/1.jpg`” request will match configuration E,\nand the “`/documents/index.html?pred=1`” request will match\nconfiguration F.\n\nThe “`@`” prefix defines a named location.\nSuch a location is not used for a regular request processing, but instead\nused for request redirection.\nThey cannot be nested, and cannot contain nested locations.\n\nIf a location is defined by a prefix string that ends with the slash character,\nand requests are processed by one of\n[`proxy_pass`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass),\n[`fastcgi_pass`](https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_pass),\n[`uwsgi_pass`](https://nginx.org/en/docs/http/ngx_http_uwsgi_module.html#uwsgi_pass),\n[`scgi_pass`](https://nginx.org/en/docs/http/ngx_http_scgi_module.html#scgi_pass),\n[`memcached_pass`](https://nginx.org/en/docs/http/ngx_http_memcached_module.html#memcached_pass), or\n[`grpc_pass`](https://nginx.org/en/docs/http/ngx_http_grpc_module.html#grpc_pass),\nthen the special processing is performed.\nIn response to a request with URI equal to this string,\nbut without the trailing slash,\na permanent redirect with the code 301 will be returned to the requested URI\nwith the slash appended.\nIf this is not desired, an exact match of the URI and location could be\ndefined like this:\n```\nlocation /user/ {\n proxy_pass http://user.example.com;\n}\n\nlocation = /user {\n proxy_pass http://login.example.com;\n}\n```", + "description_html": "

Sets configuration depending on a request URI\nor the value of a variable (1.31.5).

\n\n

The matching is performed against a normalized URI,\nafter decoding the text encoded in the “%XX” form,\nresolving references to relative path components “.”\nand “..”, and possible\ncompression of two or more\nadjacent slashes into a single slash.

\n\n

A location can be defined by a prefix string, a regular expression,\nor a predicate (1.31.5).\nRegular expressions are specified with the preceding\n“~*” modifier (for case-insensitive matching), or the\n“~” modifier (for case-sensitive matching).\nA predicate is specified with the preceding “$”\nand contains a variable evaluated during request processing.\nA predicate location matches if the variable value is not empty\nand is not equal to “0”.

\n\n

To find location matching a given request, nginx first checks\nlocations defined using the prefix strings (prefix locations).\nAmong them, the location with the longest matching\nprefix is selected and remembered.\nThen regular expressions are checked, in the order of their appearance\nin the configuration file.\nThe search of regular expressions terminates on the first match,\nand the corresponding configuration is used.\nIf no match with a regular expression is found, predicate locations are checked\nin the order of their appearance in the configuration file.\nIf no predicate location matches, the configuration of the prefix location\nremembered earlier is used.

\n\n

location blocks can be nested, with some exceptions\nmentioned below.

\n\n

For case-insensitive operating systems such as macOS and Cygwin,\nmatching with prefix strings ignores a case (0.7.7).\nHowever, comparison is limited to one-byte locales.

\n\n

Regular expressions can contain captures (0.7.40) that can later\nbe used in other directives, see\nRegular expression captures.

\n\n

If the longest matching prefix location has the “^~” modifier,\nthen regular expressions and predicate locations are not checked.

\n\n

Also, using the “=” modifier it is possible to define\nan exact match of URI and location.\nIf an exact match is found, the search terminates.\nFor example, if a “/” request happens frequently,\ndefining “location = /” will speed up the processing\nof these requests, as search terminates right after the first\ncomparison.\nSuch a location cannot obviously contain nested locations.

\n\n
\n

In versions from 0.7.1 to 0.8.41, if a request matched the prefix\nlocation without the “=” and “^~”\nmodifiers, the search also terminated and regular expressions were\nnot checked.

\n
\n\n

Let’s illustrate the above by an example:

\n\n
location = / {\n    [ configuration A ]\n}\n\nlocation / {\n    [ configuration B ]\n}\n\nlocation /documents/ {\n    [ configuration C ]\n}\n\nlocation ^~ /images/ {\n    [ configuration D ]\n}\n\nlocation ~* \\.(gif|jpg|jpeg)$ {\n    [ configuration E ]\n}\n\nlocation $arg_pred {\n    [ configuration F ]\n}\n
\n\n

The “/” request will match configuration A,\nthe “/index.html” request will match configuration B,\nthe “/documents/document.html” request will match\nconfiguration C,\nthe “/images/1.gif” request will match configuration D,\nthe “/documents/1.jpg” request will match configuration E,\nand the “/documents/index.html?pred=1” request will match\nconfiguration F.

\n\n

The “@” prefix defines a named location.\nSuch a location is not used for a regular request processing, but instead\nused for request redirection.\nThey cannot be nested, and cannot contain nested locations.

\n\n

If a location is defined by a prefix string that ends with the slash character,\nand requests are processed by one of\nproxy_pass,\nfastcgi_pass,\nuwsgi_pass,\nscgi_pass,\nmemcached_pass, or\ngrpc_pass,\nthen the special processing is performed.\nIn response to a request with URI equal to this string,\nbut without the trailing slash,\na permanent redirect with the code 301 will be returned to the requested URI\nwith the slash appended.\nIf this is not desired, an exact match of the URI and location could be\ndefined like this:

\n\n
location /user/ {\n    proxy_pass http://user.example.com;\n}\n\nlocation = /user {\n    proxy_pass http://login.example.com;\n}\n
\n" }, { "name": "log_not_found", @@ -4491,8 +4510,8 @@ "

path

\n" ], "isBlock": false, - "description_md": "Enables logging of gRPC SSL server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", - "description_html": "

Enables logging of gRPC SSL server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" + "description_md": "Enables logging of gRPC SSL server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/rfc9850)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", + "description_html": "

Enables logging of gRPC SSL server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" }, { "name": "grpc_ssl_name", @@ -5786,6 +5805,44 @@ } ] }, + { + "id": "/en/docs/http/ngx_http_json_module.html", + "name": "ngx_http_json_module", + "directives": [ + { + "name": "json_max_depth", + "default": "32", + "contexts": [ + "http" + ], + "syntax_md": [ + "*`number`*" + ], + "syntax_html": [ + "

number

\n" + ], + "isBlock": false, + "description_md": "Sets the maximum nesting depth of JSON documents.\nA document nested deeper is considered invalid.\nAcceptable values are in the range from 1 to 256.", + "description_html": "

Sets the maximum nesting depth of JSON documents.\nA document nested deeper is considered invalid.\nAcceptable values are in the range from 1 to 256.

\n" + }, + { + "name": "json_set", + "default": "", + "contexts": [ + "http" + ], + "syntax_md": [ + "*`$variable`* *`$source`* *`path`*" + ], + "syntax_html": [ + "

$variable $source path

\n" + ], + "isBlock": false, + "description_md": "Sets the *`variable`* to the value extracted from\nthe JSON document held in the *`source`* variable\nat the given *`path`*.\n\nIn a path, object members are separated by a dot,\nand array elements are addressed by a zero-based index in square\nbrackets:\n```\nclient_body_early_read on;\n\njson_set $req_id $request_body request.id;\njson_set $enabled $request_body settings.enabled;\njson_set $first_item $request_body items[0];\n```\nA member name that is empty or contains\n“`.`”,\n“`[`”, or\n“`]`”\nis written as a JSON string in square brackets.\nSince such a path contains double quotes, the whole argument\nneeds to be quoted in the configuration file:\n```\njson_set $domain $request_body '[\"a.b.com\"]';\njson_set $nested $request_body 'obj[\"a.b\"].c[2]';\n```\n\nThe value of a JSON string is stored unescaped.\nThe values of numbers, booleans, and `null`\nare stored as they appear in the document.\nIf the path addresses an object or an array,\nits whole text is stored, including the enclosing\nbraces or brackets.\n\nIf the addressed member or element is absent, the variable is\nnot found.\nIf the *`source`* variable is empty or not found,\nor if its value is not a valid, complete JSON document,\nthen all variables extracted from this source are not found.", + "description_html": "

Sets the variable to the value extracted from\nthe JSON document held in the source variable\nat the given path.

\n\n

In a path, object members are separated by a dot,\nand array elements are addressed by a zero-based index in square\nbrackets:

\n\n
client_body_early_read on;\n\njson_set $req_id     $request_body request.id;\njson_set $enabled    $request_body settings.enabled;\njson_set $first_item $request_body items[0];\n
\n\n

A member name that is empty or contains\n“.”,\n“[”, or\n“]”\nis written as a JSON string in square brackets.\nSince such a path contains double quotes, the whole argument\nneeds to be quoted in the configuration file:

\n\n
json_set $domain $request_body '["a.b.com"]';\njson_set $nested $request_body 'obj["a.b"].c[2]';\n
\n\n

The value of a JSON string is stored unescaped.\nThe values of numbers, booleans, and null\nare stored as they appear in the document.\nIf the path addresses an object or an array,\nits whole text is stored, including the enclosing\nbraces or brackets.

\n\n

If the addressed member or element is absent, the variable is\nnot found.\nIf the source variable is empty or not found,\nor if its value is not a valid, complete JSON document,\nthen all variables extracted from this source are not found.

\n" + } + ] + }, { "id": "/en/docs/http/ngx_http_keyval_module.html", "name": "ngx_http_keyval_module", @@ -6030,8 +6087,8 @@ "

key zone=name:size rate=rate [sync]

\n" ], "isBlock": false, - "description_md": "Sets parameters for a shared memory zone\nthat will keep states for various keys.\nIn particular, the state stores the current number of excessive requests.\nThe *`key`* can contain text, variables, and their combination.\nRequests with an empty key value are not accounted.\n> Prior to version 1.7.6, a *`key`* could contain exactly one variable.\n\nUsage example:\n```\nlimit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;\n```\n\nHere, the states are kept in a 10 megabyte zone “one”, and an\naverage request processing rate for this zone cannot exceed\n1 request per second.\n\nA client IP address serves as a key.\nNote that instead of `$remote_addr`, the\n`$binary_remote_addr` variable is used here.\nThe `$binary_remote_addr` variable’s size\nis always 4 bytes for IPv4 addresses or 16 bytes for IPv6 addresses.\nThe stored state always occupies\n64 bytes on 32-bit platforms and 128 bytes on 64-bit platforms.\nOne megabyte zone can keep about 16 thousand 64-byte states\nor about 8 thousand 128-byte states.\n\nIf the zone storage is exhausted, the least recently used state is removed.\nIf even after that a new state cannot be created, the request is terminated with\nan [error](https://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_req_status).\n\nThe rate is specified in requests per second (r/s).\nIf a rate of less than one request per second is desired,\nit is specified in request per minute (r/m).\nFor example, half-request per second is 30r/m.\n\nThe `sync` parameter (1.15.3) enables\n[synchronization](https://nginx.org/en/docs/stream/ngx_stream_zone_sync_module.html#zone_sync)\nof the shared memory zone.\n> The `sync` parameter is available as part of our\n> [commercial subscription](https://nginx.com/products/).\n\n> Additionally, as part of our\n> [commercial subscription](https://nginx.com/products/),\n> the\n> [status information](https://nginx.org/en/docs/http/ngx_http_api_module.html#http_limit_reqs_)\n> for each such shared memory zone can be\n> [obtained](https://nginx.org/en/docs/http/ngx_http_api_module.html#getHttpLimitReqZone) or\n> [reset](https://nginx.org/en/docs/http/ngx_http_api_module.html#deleteHttpLimitReqZoneStat)\n> with the [API](https://nginx.org/en/docs/http/ngx_http_api_module.html) since 1.17.7.", - "description_html": "

Sets parameters for a shared memory zone\nthat will keep states for various keys.\nIn particular, the state stores the current number of excessive requests.\nThe key can contain text, variables, and their combination.\nRequests with an empty key value are not accounted.

\n\n
\n

Prior to version 1.7.6, a key could contain exactly one variable.

\n
\n\n

Usage example:

\n\n
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;\n
\n\n

Here, the states are kept in a 10 megabyte zone “one”, and an\naverage request processing rate for this zone cannot exceed\n1 request per second.

\n\n

A client IP address serves as a key.\nNote that instead of $remote_addr, the\n$binary_remote_addr variable is used here.\nThe $binary_remote_addr variable’s size\nis always 4 bytes for IPv4 addresses or 16 bytes for IPv6 addresses.\nThe stored state always occupies\n64 bytes on 32-bit platforms and 128 bytes on 64-bit platforms.\nOne megabyte zone can keep about 16 thousand 64-byte states\nor about 8 thousand 128-byte states.

\n\n

If the zone storage is exhausted, the least recently used state is removed.\nIf even after that a new state cannot be created, the request is terminated with\nan error.

\n\n

The rate is specified in requests per second (r/s).\nIf a rate of less than one request per second is desired,\nit is specified in request per minute (r/m).\nFor example, half-request per second is 30r/m.

\n\n

The sync parameter (1.15.3) enables\nsynchronization\nof the shared memory zone.

\n\n
\n

The sync parameter is available as part of our\ncommercial subscription.

\n\n

Additionally, as part of our\ncommercial subscription,\nthe\nstatus information\nfor each such shared memory zone can be\nobtained or\nreset\nwith the API since 1.17.7.

\n
\n" + "description_md": "Sets parameters for a shared memory zone\nthat will keep states for various keys.\nIn particular, the state stores the current number of excessive requests.\nThe *`key`* can contain text, variables, and their combination.\nRequests with an empty key value are not accounted.\n> Prior to version 1.7.6, a *`key`* could contain exactly one variable.\n\nUsage example:\n```\nlimit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;\n```\n\nHere, the states are kept in a 10 megabyte zone “one”, and an\naverage request processing rate for this zone cannot exceed\n1 request per second.\n\nA client IP address serves as a key.\nNote that instead of `$remote_addr`, the\n`$binary_remote_addr` variable is used here.\nThe `$binary_remote_addr` variable’s size\nis always 4 bytes for IPv4 addresses or 16 bytes for IPv6 addresses.\nThe stored state always occupies\n64 bytes on 32-bit platforms and 128 bytes on 64-bit platforms.\nOne megabyte zone can keep about 16 thousand 64-byte states\nor about 8 thousand 128-byte states.\n\nIf the zone storage is exhausted, the least recently used state is removed.\nIf even after that a new state cannot be created, the request is terminated with\nan [error](https://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_req_status).\n\nThe rate is specified in requests per second (r/s).\nIf a rate of less than one request per second is desired,\nit is specified in request per minute (r/m).\nFor example, half-request per second is 30r/m.\n\nAdditionally,\nthe following functionality is available as part of our\n[commercial subscription](https://nginx.com/products/):\n\n- The `rate` parameter can contain variables (1.31.3).\n The rate is evaluated at runtime for each request.\n Example:\n ```\n map $uri $rate {\n default 10r/s;\n /api/slow 1r/s;\n /api/fast 100r/s;\n }\n \n limit_req_zone $binary_remote_addr zone=one:10m rate=$rate;\n ```\n- The `sync` parameter (1.15.3) enables\n [synchronization](https://nginx.org/en/docs/stream/ngx_stream_zone_sync_module.html#zone_sync)\n of the shared memory zone.\n- The [status information](https://nginx.org/en/docs/http/ngx_http_api_module.html#http_limit_reqs_)\n for each such shared memory zone can be\n [obtained](https://nginx.org/en/docs/http/ngx_http_api_module.html#getHttpLimitReqZone) or\n [reset](https://nginx.org/en/docs/http/ngx_http_api_module.html#deleteHttpLimitReqZoneStat)\n with the [API](https://nginx.org/en/docs/http/ngx_http_api_module.html) since 1.17.7.", + "description_html": "

Sets parameters for a shared memory zone\nthat will keep states for various keys.\nIn particular, the state stores the current number of excessive requests.\nThe key can contain text, variables, and their combination.\nRequests with an empty key value are not accounted.

\n\n
\n

Prior to version 1.7.6, a key could contain exactly one variable.

\n
\n\n

Usage example:

\n\n
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;\n
\n\n

Here, the states are kept in a 10 megabyte zone “one”, and an\naverage request processing rate for this zone cannot exceed\n1 request per second.

\n\n

A client IP address serves as a key.\nNote that instead of $remote_addr, the\n$binary_remote_addr variable is used here.\nThe $binary_remote_addr variable’s size\nis always 4 bytes for IPv4 addresses or 16 bytes for IPv6 addresses.\nThe stored state always occupies\n64 bytes on 32-bit platforms and 128 bytes on 64-bit platforms.\nOne megabyte zone can keep about 16 thousand 64-byte states\nor about 8 thousand 128-byte states.

\n\n

If the zone storage is exhausted, the least recently used state is removed.\nIf even after that a new state cannot be created, the request is terminated with\nan error.

\n\n

The rate is specified in requests per second (r/s).\nIf a rate of less than one request per second is desired,\nit is specified in request per minute (r/m).\nFor example, half-request per second is 30r/m.

\n\n

Additionally,\nthe following functionality is available as part of our\ncommercial subscription:

\n\n\n" } ], "variables": [ @@ -8182,8 +8239,8 @@ "

path

\n" ], "isBlock": false, - "description_md": "Enables logging of proxied HTTPS server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", - "description_html": "

Enables logging of proxied HTTPS server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" + "description_md": "Enables logging of proxied HTTPS server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/rfc9850)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", + "description_html": "

Enables logging of proxied HTTPS server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" }, { "name": "proxy_ssl_name", @@ -10177,8 +10234,8 @@ "

file

\n" ], "isBlock": false, - "description_md": "Specifies a *`file`* with encrypted ClientHello configuration\n(`ECHConfig`) in the\n[PEM](https://datatracker.ietf.org/doc/draft-farrell-tls-pemesni/)\nformat used to enable TLS 1.3\n[ECH](https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni)\nin shared mode.\n\n> The directive is supported when using OpenSSL 4.0 or higher.", - "description_html": "

Specifies a file with encrypted ClientHello configuration\n(ECHConfig) in the\nPEM\nformat used to enable TLS 1.3\nECH\nin shared mode.

\n\n
\n

The directive is supported when using OpenSSL 4.0 or higher.

\n
\n" + "description_md": "Specifies a *`file`* with encrypted ClientHello configuration\n(`ECHConfig`) in the\n[PEM](https://datatracker.ietf.org/doc/html/rfc9934)\nformat used to enable TLS 1.3\n[ECH](https://datatracker.ietf.org/doc/html/rfc9849)\nin shared mode.\n\n> The directive is supported when using OpenSSL 4.0 or higher.", + "description_html": "

Specifies a file with encrypted ClientHello configuration\n(ECHConfig) in the\nPEM\nformat used to enable TLS 1.3\nECH\nin shared mode.

\n\n
\n

The directive is supported when using OpenSSL 4.0 or higher.

\n
\n" }, { "name": "ssl_key_log", @@ -10194,8 +10251,8 @@ "

path

\n" ], "isBlock": false, - "description_md": "Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", - "description_html": "

Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" + "description_md": "Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/rfc9850)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", + "description_html": "

Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" }, { "name": "ssl_ocsp", @@ -12714,8 +12771,8 @@ "

path

\n" ], "isBlock": false, - "description_md": "Enables logging of secured uwsgi server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", - "description_html": "

Enables logging of secured uwsgi server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" + "description_md": "Enables logging of secured uwsgi server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/rfc9850)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", + "description_html": "

Enables logging of secured uwsgi server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" }, { "name": "uwsgi_ssl_name", @@ -14945,6 +15002,22 @@ "description_md": "Specifies a JWT license *`file`*.\nBy default, the *`license.jwt`* file is expected to be at\n`/etc/nginx/` for Linux or at\n`/usr/local/etc/nginx/` for FreeBSD.", "description_html": "

Specifies a JWT license file.\nBy default, the license.jwt file is expected to be at\n/etc/nginx/ for Linux or at\n/usr/local/etc/nginx/ for FreeBSD.

\n" }, + { + "name": "license_pending_token", + "default": "", + "contexts": [ + "mgmt" + ], + "syntax_md": [ + "*`file`* | `off`" + ], + "syntax_html": [ + "

file | off

\n" + ], + "isBlock": false, + "description_md": "Controls how a renewed JWT license token is handled\nafter it is received from the F5 licensing endpoint.\nBy default, the renewed token is saved and applied immediately.\n\nWhen set to a *`file`* path,\nthe renewed token is saved to the specified file but not applied.\nThe path is relative to\n[`state_path`](https://nginx.org/en/docs/ngx_mgmt_module.html#state_path).\nThe token can be copied to the active license token file or applied using the\n`PUT` method of the\n`/api/10/license` API endpoint.\n\nWhen set to `off`,\nthe renewal event is logged but the token is discarded.\nIn this case, JWT license renewal is managed entirely through the\n`PUT` method of the\n`/api/10/license` API endpoint.", + "description_html": "

Controls how a renewed JWT license token is handled\nafter it is received from the F5 licensing endpoint.\nBy default, the renewed token is saved and applied immediately.

\n\n

When set to a file path,\nthe renewed token is saved to the specified file but not applied.\nThe path is relative to\nstate_path.\nThe token can be copied to the active license token file or applied using the\nPUT method of the\n/api/10/license API endpoint.

\n\n

When set to off,\nthe renewal event is logged but the token is discarded.\nIn this case, JWT license renewal is managed entirely through the\nPUT method of the\n/api/10/license API endpoint.

\n" + }, { "name": "proxy", "default": "", @@ -16996,8 +17069,8 @@ "

path

\n" ], "isBlock": false, - "description_md": "Enables logging of proxied server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", - "description_html": "

Enables logging of proxied server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" + "description_md": "Enables logging of proxied server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/rfc9850)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", + "description_html": "

Enables logging of proxied server connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" }, { "name": "proxy_ssl_name", @@ -17479,8 +17552,8 @@ "

file

\n" ], "isBlock": false, - "description_md": "Specifies a *`file`* with encrypted ClientHello configuration\n(`ECHConfig`) in the\n[PEM](https://datatracker.ietf.org/doc/draft-farrell-tls-pemesni/)\nformat used to enable TLS 1.3\n[ECH](https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni)\nin shared mode.\n\n> The directive is supported when using OpenSSL 4.0 or higher.", - "description_html": "

Specifies a file with encrypted ClientHello configuration\n(ECHConfig) in the\nPEM\nformat used to enable TLS 1.3\nECH\nin shared mode.

\n\n
\n

The directive is supported when using OpenSSL 4.0 or higher.

\n
\n" + "description_md": "Specifies a *`file`* with encrypted ClientHello configuration\n(`ECHConfig`) in the\n[PEM](https://datatracker.ietf.org/doc/html/rfc9934)\nformat used to enable TLS 1.3\n[ECH](https://datatracker.ietf.org/doc/html/rfc9849)\nin shared mode.\n\n> The directive is supported when using OpenSSL 4.0 or higher.", + "description_html": "

Specifies a file with encrypted ClientHello configuration\n(ECHConfig) in the\nPEM\nformat used to enable TLS 1.3\nECH\nin shared mode.

\n\n
\n

The directive is supported when using OpenSSL 4.0 or higher.

\n
\n" }, { "name": "ssl_handshake_timeout", @@ -17513,8 +17586,8 @@ "

path

\n" ], "isBlock": false, - "description_md": "Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/draft-ietf-tls-keylogfile)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", - "description_html": "

Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" + "description_md": "Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\n[SSLKEYLOGFILE](https://datatracker.ietf.org/doc/html/rfc9850)\nformat compatible with Wireshark.\n\n> This directive is available as part of our\n> [commercial subscription](https://nginx.com/products/).", + "description_html": "

Enables logging of client connection SSL keys\nand specifies the path to the key log file.\nKeys are logged in the\nSSLKEYLOGFILE\nformat compatible with Wireshark.

\n\n
\n

This directive is available as part of our\ncommercial subscription.

\n
\n" }, { "name": "ssl_ocsp", @@ -18606,5 +18679,5 @@ ] } ], - "version": "https://github.com/nginx/nginx.org/commit/738c4e31b0a68eeff6f9e168142e6bb03c54a35a" + "version": "https://github.com/nginx/nginx.org/commit/08a147e9d361cffe841b3f6986948cc9ab963da9" }