[PATCH] Add static brotli module
Ryan
mp3geek at gmail.com
Fri Feb 24 08:05:42 UTC 2017
Do you have a brotli patch that applies cleanly with nginx-1.11.10. I'm
getting many patch fails.
On Fri, Feb 24, 2017 at 8:03 AM, Eugene Kluchnikov <eustas.ru at gmail.com>
wrote:
> # HG changeset patch
> # User Evgenii Kliuchnikov <eustas.ru at gmail.com>
> # Date 1487764873 -3600
> # Wed Feb 22 13:01:13 2017 +0100
> # Node ID c230f3874e060ccb14d7560233f2c70a910640a1
> # Parent 87cf6ddb41c216876d13cffa5e637a61b159362c
> Add brotli static serving support.
>
> Both .gz and .br static content is served by
> ngx_http_gzip_static_modile, but have separate configuration.
>
> diff -r 87cf6ddb41c2 -r c230f3874e06 contrib/vim/syntax/nginx.vim
> --- a/contrib/vim/syntax/nginx.vim Fri Feb 17 17:01:27 2017 +0300
> +++ b/contrib/vim/syntax/nginx.vim Wed Feb 22 13:01:13 2017 +0100
> @@ -86,6 +86,7 @@
> syn keyword ngxDirective autoindex
> syn keyword ngxDirective autoindex_exact_size
> syn keyword ngxDirective autoindex_localtime
> +syn keyword ngxDirective brotli_static
> syn keyword ngxDirective charset
> syn keyword ngxDirective charset_types
> syn keyword ngxDirective chunked_transfer_encoding
> diff -r 87cf6ddb41c2 -r c230f3874e06 src/http/modules/ngx_http_
> gzip_static_module.c
> --- a/src/http/modules/ngx_http_gzip_static_module.c Fri Feb 17 17:01:27
> 2017 +0300
> +++ b/src/http/modules/ngx_http_gzip_static_module.c Wed Feb 22 13:01:13
> 2017 +0100
> @@ -16,10 +16,14 @@
>
>
> typedef struct {
> - ngx_uint_t enable;
> + ngx_uint_t enable_gzip;
> + ngx_uint_t enable_brotli;
> } ngx_http_gzip_static_conf_t;
>
>
> +static ngx_int_t ngx_http_gzip_static_serve_file(ngx_http_request_t *r,
> + ngx_uint_t enable, ngx_uint_t ok, ngx_http_core_loc_conf_t *clcf,
> + ngx_str_t *encoding);
> static ngx_int_t ngx_http_gzip_static_handler(ngx_http_request_t *r);
> static void *ngx_http_gzip_static_create_conf(ngx_conf_t *cf);
> static char *ngx_http_gzip_static_merge_conf(ngx_conf_t *cf, void
> *parent,
> @@ -41,7 +45,14 @@
> NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|
> NGX_CONF_TAKE1,
> ngx_conf_set_enum_slot,
> NGX_HTTP_LOC_CONF_OFFSET,
> - offsetof(ngx_http_gzip_static_conf_t, enable),
> + offsetof(ngx_http_gzip_static_conf_t, enable_gzip),
> + &ngx_http_gzip_static },
> +
> + { ngx_string("brotli_static"),
> + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|
> NGX_CONF_TAKE1,
> + ngx_conf_set_enum_slot,
> + NGX_HTTP_LOC_CONF_OFFSET,
> + offsetof(ngx_http_gzip_static_conf_t, enable_brotli),
> &ngx_http_gzip_static },
>
> ngx_null_command
> @@ -79,19 +90,14 @@
> };
>
>
> +static ngx_str_t encoding_gzip = ngx_string("gzip");
> +static ngx_str_t encoding_brotli = ngx_string("br");
> +
> +
> static ngx_int_t
> ngx_http_gzip_static_handler(ngx_http_request_t *r)
> {
> - u_char *p;
> - size_t root;
> - ngx_str_t path;
> ngx_int_t rc;
> - ngx_uint_t level;
> - ngx_log_t *log;
> - ngx_buf_t *b;
> - ngx_chain_t out;
> - ngx_table_elt_t *h;
> - ngx_open_file_info_t of;
> ngx_http_core_loc_conf_t *clcf;
> ngx_http_gzip_static_conf_t *gzcf;
>
> @@ -105,19 +111,56 @@
>
> gzcf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_static_module);
>
> - if (gzcf->enable == NGX_HTTP_GZIP_STATIC_OFF) {
> + if (gzcf->enable_gzip == NGX_HTTP_GZIP_STATIC_OFF &&
> + gzcf->enable_brotli == NGX_HTTP_GZIP_STATIC_OFF) {
> return NGX_DECLINED;
> }
>
> - if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
> - rc = ngx_http_gzip_ok(r);
> + clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
>
> - } else {
> - /* always */
> - rc = NGX_OK;
> + rc = NGX_DECLINED;
> + if (gzcf->enable_gzip != NGX_HTTP_GZIP_STATIC_OFF) {
> + if (gzcf->enable_gzip == NGX_HTTP_GZIP_STATIC_ON) {
> + rc = ngx_http_gzip_ok(r);
> + } else {
> + /* always */
> + rc = NGX_OK;
> + }
> + rc = ngx_http_gzip_static_serve_file(r, gzcf->enable_gzip, rc,
> clcf,
> + &encoding_gzip);
> }
>
> - clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
> + if (gzcf->enable_brotli != NGX_HTTP_GZIP_STATIC_OFF && rc ==
> NGX_DECLINED) {
> + if (gzcf->enable_gzip == NGX_HTTP_GZIP_STATIC_ON) {
> + rc = ngx_http_gzip_ok(r);
> + } else {
> + /* always */
> + rc = NGX_OK;
> + }
> + rc = ngx_http_gzip_static_serve_file(r, gzcf->enable_brotli, rc,
> clcf,
> + &encoding_brotli);
> + }
> +
> + return rc;
> +}
> +
> +
> +static ngx_int_t
> +ngx_http_gzip_static_serve_file(ngx_http_request_t *r, ngx_uint_t enable,
> + ngx_uint_t ok, ngx_http_core_loc_conf_t *clcf, ngx_str_t *encoding)
> +{
> + u_char *p;
> + size_t root;
> + ngx_str_t path;
> + ngx_int_t rc;
> + ngx_uint_t level;
> + ngx_log_t *log;
> + ngx_buf_t *b;
> + ngx_chain_t out;
> + ngx_table_elt_t *h;
> + ngx_open_file_info_t of;
> +
> + rc = ok;
>
> if (!clcf->gzip_vary && rc != NGX_OK) {
> return NGX_DECLINED;
> @@ -125,14 +168,14 @@
>
> log = r->connection->log;
>
> - p = ngx_http_map_uri_to_path(r, &path, &root, sizeof(".gz") - 1);
> + p = ngx_http_map_uri_to_path(r, &path, &root, 4 - 1);
> if (p == NULL) {
> return NGX_HTTP_INTERNAL_SERVER_ERROR;
> }
>
> *p++ = '.';
> - *p++ = 'g';
> - *p++ = 'z';
> + *p++ = encoding->data[0];
> + *p++ = encoding->data[1];
> *p = '\0';
>
> path.len = p - path.data;
> @@ -188,7 +231,7 @@
> return NGX_DECLINED;
> }
>
> - if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
> + if (enable == NGX_HTTP_GZIP_STATIC_ON) {
> r->gzip_vary = 1;
>
> if (rc != NGX_OK) {
> @@ -243,7 +286,7 @@
>
> h->hash = 1;
> ngx_str_set(&h->key, "Content-Encoding");
> - ngx_str_set(&h->value, "gzip");
> + h->value = *encoding;
> r->headers_out.content_encoding = h;
>
> /* we need to allocate all before the header would be sent */
> @@ -293,7 +336,8 @@
> return NULL;
> }
>
> - conf->enable = NGX_CONF_UNSET_UINT;
> + conf->enable_gzip = NGX_CONF_UNSET_UINT;
> + conf->enable_brotli = NGX_CONF_UNSET_UINT;
>
> return conf;
> }
> @@ -305,7 +349,9 @@
> ngx_http_gzip_static_conf_t *prev = parent;
> ngx_http_gzip_static_conf_t *conf = child;
>
> - ngx_conf_merge_uint_value(conf->enable, prev->enable,
> + ngx_conf_merge_uint_value(conf->enable_gzip, prev->enable_gzip,
> + NGX_HTTP_GZIP_STATIC_OFF);
> + ngx_conf_merge_uint_value(conf->enable_brotli, prev->enable_brotli,
> NGX_HTTP_GZIP_STATIC_OFF);
>
> return NGX_CONF_OK;
> diff -r 87cf6ddb41c2 -r c230f3874e06 src/http/ngx_http_core_module.c
> --- a/src/http/ngx_http_core_module.c Fri Feb 17 17:01:27 2017 +0300
> +++ b/src/http/ngx_http_core_module.c Wed Feb 22 13:01:13 2017 +0100
> @@ -74,8 +74,8 @@
> static char *ngx_http_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd,
> void *conf);
> #if (NGX_HTTP_GZIP)
> -static ngx_int_t ngx_http_gzip_accept_encoding(ngx_str_t *ae);
> -static ngx_uint_t ngx_http_gzip_quantity(u_char *p, u_char *last);
> +static ngx_int_t ngx_http_accept_encoding(ngx_str_t *ae, char *e, size_t
> n);
> +static ngx_uint_t ngx_http_encoding_quantity(u_char *p, u_char *last);
> static char *ngx_http_gzip_disable(ngx_conf_t *cf, ngx_command_t *cmd,
> void *conf);
> #endif
> @@ -2170,7 +2170,7 @@
> */
>
> if (ngx_memcmp(ae->value.data, "gzip,", 5) != 0
> - && ngx_http_gzip_accept_encoding(&ae->value) != NGX_OK)
> + && ngx_http_accept_encoding(&ae->value, "gzip", 4) != NGX_OK)
> {
> return NGX_DECLINED;
> }
> @@ -2297,15 +2297,42 @@
> }
>
>
> +ngx_int_t
> +ngx_http_brotli_ok(ngx_http_request_t *r)
> +{
> + ngx_table_elt_t *ae;
> +
> + if (r != r->main) {
> + return NGX_DECLINED;
> + }
> +
> + ae = r->headers_in.accept_encoding;
> + if (ae == NULL) {
> + return NGX_DECLINED;
> + }
> +
> + if (ae->value.len < sizeof("br") - 1) {
> + return NGX_DECLINED;
> + }
> +
> + if (ngx_http_accept_encoding(&ae->value, "br", 2) != NGX_OK)
> + {
> + return NGX_DECLINED;
> + }
> +
> + return NGX_OK;
> +}
> +
> +
> /*
> - * gzip is enabled for the following quantities:
> + * encoding is enabled for the following quantities:
> * "gzip; q=0.001" ... "gzip; q=1.000"
> - * gzip is disabled for the following quantities:
> - * "gzip; q=0" ... "gzip; q=0.000", and for any invalid cases
> + * encoding is disabled for the following quantities:
> + * "br; q=0" ... "br; q=0.000", and for any invalid cases
> */
>
> static ngx_int_t
> -ngx_http_gzip_accept_encoding(ngx_str_t *ae)
> +ngx_http_accept_encoding(ngx_str_t *ae, char *e, size_t n)
> {
> u_char *p, *start, *last;
>
> @@ -2313,7 +2340,7 @@
> last = start + ae->len;
>
> for ( ;; ) {
> - p = ngx_strcasestrn(start, "gzip", 4 - 1);
> + p = ngx_strcasestrn(start, e, n - 1);
> if (p == NULL) {
> return NGX_DECLINED;
> }
> @@ -2322,10 +2349,10 @@
> break;
> }
>
> - start = p + 4;
> - }
> -
> - p += 4;
> + start = p + n;
> + }
> +
> + p += n;
>
> while (p < last) {
> switch (*p++) {
> @@ -2364,7 +2391,7 @@
> return NGX_DECLINED;
> }
>
> - if (ngx_http_gzip_quantity(p, last) == 0) {
> + if (ngx_http_encoding_quantity(p, last) == 0) {
> return NGX_DECLINED;
> }
>
> @@ -2373,7 +2400,7 @@
>
>
> static ngx_uint_t
> -ngx_http_gzip_quantity(u_char *p, u_char *last)
> +ngx_http_encoding_quantity(u_char *p, u_char *last)
> {
> u_char c;
> ngx_uint_t n, q;
> diff -r 87cf6ddb41c2 -r c230f3874e06 src/http/ngx_http_core_module.h
> --- a/src/http/ngx_http_core_module.h Fri Feb 17 17:01:27 2017 +0300
> +++ b/src/http/ngx_http_core_module.h Wed Feb 22 13:01:13 2017 +0100
> @@ -504,6 +504,7 @@
> ngx_int_t ngx_http_auth_basic_user(ngx_http_request_t *r);
> #if (NGX_HTTP_GZIP)
> ngx_int_t ngx_http_gzip_ok(ngx_http_request_t *r);
> +ngx_int_t ngx_http_brotli_ok(ngx_http_request_t *r);
> #endif
>
>
>
>
>
> Fixed "Content-Encoding" value.
>
> On 23 February 2017 at 13:11, Eugene Kluchnikov <eustas.ru at gmail.com>
> wrote:
>
>> # HG changeset patch
>> # User Evgenii Kliuchnikov <eustas.ru at gmail.com>
>> # Date 1487764873 -3600
>> # Wed Feb 22 13:01:13 2017 +0100
>> # Node ID 96939e63f30579f2f32e843d217bd46fa6086bb4
>> # Parent 87cf6ddb41c216876d13cffa5e637a61b159362c
>> Add brotli static serving support.
>>
>> Both .gz and .br static content is served by
>> ngx_http_gzip_static_modile, but have separate configuration.
>>
>> diff -r 87cf6ddb41c2 -r 96939e63f305 contrib/vim/syntax/nginx.vim
>> --- a/contrib/vim/syntax/nginx.vim Fri Feb 17 17:01:27 2017 +0300
>> +++ b/contrib/vim/syntax/nginx.vim Wed Feb 22 13:01:13 2017 +0100
>> @@ -86,6 +86,7 @@
>> syn keyword ngxDirective autoindex
>> syn keyword ngxDirective autoindex_exact_size
>> syn keyword ngxDirective autoindex_localtime
>> +syn keyword ngxDirective brotli_static
>> syn keyword ngxDirective charset
>> syn keyword ngxDirective charset_types
>> syn keyword ngxDirective chunked_transfer_encoding
>> diff -r 87cf6ddb41c2 -r 96939e63f305 src/http/modules/ngx_http_gzip
>> _static_module.c
>> --- a/src/http/modules/ngx_http_gzip_static_module.c Fri Feb 17 17:01:27
>> 2017 +0300
>> +++ b/src/http/modules/ngx_http_gzip_static_module.c Wed Feb 22 13:01:13
>> 2017 +0100
>> @@ -16,10 +16,14 @@
>>
>>
>> typedef struct {
>> - ngx_uint_t enable;
>> + ngx_uint_t enable_gzip;
>> + ngx_uint_t enable_brotli;
>> } ngx_http_gzip_static_conf_t;
>>
>>
>> +static ngx_int_t ngx_http_gzip_static_serve_file(ngx_http_request_t *r,
>> + ngx_uint_t enable, ngx_uint_t ok, ngx_http_core_loc_conf_t *clcf,
>> + ngx_str_t *encoding);
>> static ngx_int_t ngx_http_gzip_static_handler(ngx_http_request_t *r);
>> static void *ngx_http_gzip_static_create_conf(ngx_conf_t *cf);
>> static char *ngx_http_gzip_static_merge_conf(ngx_conf_t *cf, void
>> *parent,
>> @@ -41,7 +45,14 @@
>> NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_
>> CONF_TAKE1,
>> ngx_conf_set_enum_slot,
>> NGX_HTTP_LOC_CONF_OFFSET,
>> - offsetof(ngx_http_gzip_static_conf_t, enable),
>> + offsetof(ngx_http_gzip_static_conf_t, enable_gzip),
>> + &ngx_http_gzip_static },
>> +
>> + { ngx_string("brotli_static"),
>> + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_
>> CONF_TAKE1,
>> + ngx_conf_set_enum_slot,
>> + NGX_HTTP_LOC_CONF_OFFSET,
>> + offsetof(ngx_http_gzip_static_conf_t, enable_brotli),
>> &ngx_http_gzip_static },
>>
>> ngx_null_command
>> @@ -79,19 +90,13 @@
>> };
>>
>>
>> +static ngx_str_t encoding_gzip = ngx_string("gzip");
>> +static ngx_str_t encoding_brotli = ngx_string("brotli");
>> +
>> static ngx_int_t
>> ngx_http_gzip_static_handler(ngx_http_request_t *r)
>> {
>> - u_char *p;
>> - size_t root;
>> - ngx_str_t path;
>> ngx_int_t rc;
>> - ngx_uint_t level;
>> - ngx_log_t *log;
>> - ngx_buf_t *b;
>> - ngx_chain_t out;
>> - ngx_table_elt_t *h;
>> - ngx_open_file_info_t of;
>> ngx_http_core_loc_conf_t *clcf;
>> ngx_http_gzip_static_conf_t *gzcf;
>>
>> @@ -105,19 +110,56 @@
>>
>> gzcf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_static_module);
>>
>> - if (gzcf->enable == NGX_HTTP_GZIP_STATIC_OFF) {
>> + if (gzcf->enable_gzip == NGX_HTTP_GZIP_STATIC_OFF &&
>> + gzcf->enable_brotli == NGX_HTTP_GZIP_STATIC_OFF) {
>> return NGX_DECLINED;
>> }
>>
>> - if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
>> - rc = ngx_http_gzip_ok(r);
>> + clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
>>
>> - } else {
>> - /* always */
>> - rc = NGX_OK;
>> + rc = NGX_DECLINED;
>> + if (gzcf->enable_gzip != NGX_HTTP_GZIP_STATIC_OFF) {
>> + if (gzcf->enable_gzip == NGX_HTTP_GZIP_STATIC_ON) {
>> + rc = ngx_http_gzip_ok(r);
>> + } else {
>> + /* always */
>> + rc = NGX_OK;
>> + }
>> + rc = ngx_http_gzip_static_serve_file(r, gzcf->enable_gzip, rc,
>> clcf,
>> + &encoding_gzip);
>> }
>>
>> - clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
>> + if (gzcf->enable_brotli != NGX_HTTP_GZIP_STATIC_OFF && rc ==
>> NGX_DECLINED) {
>> + if (gzcf->enable_gzip == NGX_HTTP_GZIP_STATIC_ON) {
>> + rc = ngx_http_gzip_ok(r);
>> + } else {
>> + /* always */
>> + rc = NGX_OK;
>> + }
>> + rc = ngx_http_gzip_static_serve_file(r, gzcf->enable_brotli,
>> rc, clcf,
>> + &encoding_brotli);
>> + }
>> +
>> + return rc;
>> +}
>> +
>> +
>> +static ngx_int_t
>> +ngx_http_gzip_static_serve_file(ngx_http_request_t *r, ngx_uint_t
>> enable,
>> + ngx_uint_t ok, ngx_http_core_loc_conf_t *clcf, ngx_str_t *encoding)
>> +{
>> + u_char *p;
>> + size_t root;
>> + ngx_str_t path;
>> + ngx_int_t rc;
>> + ngx_uint_t level;
>> + ngx_log_t *log;
>> + ngx_buf_t *b;
>> + ngx_chain_t out;
>> + ngx_table_elt_t *h;
>> + ngx_open_file_info_t of;
>> +
>> + rc = ok;
>>
>> if (!clcf->gzip_vary && rc != NGX_OK) {
>> return NGX_DECLINED;
>> @@ -125,14 +167,14 @@
>>
>> log = r->connection->log;
>>
>> - p = ngx_http_map_uri_to_path(r, &path, &root, sizeof(".gz") - 1);
>> + p = ngx_http_map_uri_to_path(r, &path, &root, 4 - 1);
>> if (p == NULL) {
>> return NGX_HTTP_INTERNAL_SERVER_ERROR;
>> }
>>
>> *p++ = '.';
>> - *p++ = 'g';
>> - *p++ = 'z';
>> + *p++ = encoding->data[0];
>> + *p++ = encoding->data[1];
>> *p = '\0';
>>
>> path.len = p - path.data;
>> @@ -188,7 +230,7 @@
>> return NGX_DECLINED;
>> }
>>
>> - if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
>> + if (enable == NGX_HTTP_GZIP_STATIC_ON) {
>> r->gzip_vary = 1;
>>
>> if (rc != NGX_OK) {
>> @@ -243,7 +285,7 @@
>>
>> h->hash = 1;
>> ngx_str_set(&h->key, "Content-Encoding");
>> - ngx_str_set(&h->value, "gzip");
>> + h->value = *encoding;
>> r->headers_out.content_encoding = h;
>>
>> /* we need to allocate all before the header would be sent */
>> @@ -293,7 +335,8 @@
>> return NULL;
>> }
>>
>> - conf->enable = NGX_CONF_UNSET_UINT;
>> + conf->enable_gzip = NGX_CONF_UNSET_UINT;
>> + conf->enable_brotli = NGX_CONF_UNSET_UINT;
>>
>> return conf;
>> }
>> @@ -305,7 +348,9 @@
>> ngx_http_gzip_static_conf_t *prev = parent;
>> ngx_http_gzip_static_conf_t *conf = child;
>>
>> - ngx_conf_merge_uint_value(conf->enable, prev->enable,
>> + ngx_conf_merge_uint_value(conf->enable_gzip, prev->enable_gzip,
>> + NGX_HTTP_GZIP_STATIC_OFF);
>> + ngx_conf_merge_uint_value(conf->enable_brotli, prev->enable_brotli,
>> NGX_HTTP_GZIP_STATIC_OFF);
>>
>> return NGX_CONF_OK;
>> diff -r 87cf6ddb41c2 -r 96939e63f305 src/http/ngx_http_core_module.c
>> --- a/src/http/ngx_http_core_module.c Fri Feb 17 17:01:27 2017 +0300
>> +++ b/src/http/ngx_http_core_module.c Wed Feb 22 13:01:13 2017 +0100
>> @@ -74,8 +74,8 @@
>> static char *ngx_http_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd,
>> void *conf);
>> #if (NGX_HTTP_GZIP)
>> -static ngx_int_t ngx_http_gzip_accept_encoding(ngx_str_t *ae);
>> -static ngx_uint_t ngx_http_gzip_quantity(u_char *p, u_char *last);
>> +static ngx_int_t ngx_http_accept_encoding(ngx_str_t *ae, char *e,
>> size_t n);
>> +static ngx_uint_t ngx_http_encoding_quantity(u_char *p, u_char *last);
>> static char *ngx_http_gzip_disable(ngx_conf_t *cf, ngx_command_t *cmd,
>> void *conf);
>> #endif
>> @@ -2170,7 +2170,7 @@
>> */
>>
>> if (ngx_memcmp(ae->value.data, "gzip,", 5) != 0
>> - && ngx_http_gzip_accept_encoding(&ae->value) != NGX_OK)
>> + && ngx_http_accept_encoding(&ae->value, "gzip", 4) != NGX_OK)
>> {
>> return NGX_DECLINED;
>> }
>> @@ -2297,15 +2297,42 @@
>> }
>>
>>
>> +ngx_int_t
>> +ngx_http_brotli_ok(ngx_http_request_t *r)
>> +{
>> + ngx_table_elt_t *ae;
>> +
>> + if (r != r->main) {
>> + return NGX_DECLINED;
>> + }
>> +
>> + ae = r->headers_in.accept_encoding;
>> + if (ae == NULL) {
>> + return NGX_DECLINED;
>> + }
>> +
>> + if (ae->value.len < sizeof("br") - 1) {
>> + return NGX_DECLINED;
>> + }
>> +
>> + if (ngx_http_accept_encoding(&ae->value, "br", 2) != NGX_OK)
>> + {
>> + return NGX_DECLINED;
>> + }
>> +
>> + return NGX_OK;
>> +}
>> +
>> +
>> /*
>> - * gzip is enabled for the following quantities:
>> + * encoding is enabled for the following quantities:
>> * "gzip; q=0.001" ... "gzip; q=1.000"
>> - * gzip is disabled for the following quantities:
>> - * "gzip; q=0" ... "gzip; q=0.000", and for any invalid cases
>> + * encoding is disabled for the following quantities:
>> + * "br; q=0" ... "br; q=0.000", and for any invalid cases
>> */
>>
>> static ngx_int_t
>> -ngx_http_gzip_accept_encoding(ngx_str_t *ae)
>> +ngx_http_accept_encoding(ngx_str_t *ae, char *e, size_t n)
>> {
>> u_char *p, *start, *last;
>>
>> @@ -2313,7 +2340,7 @@
>> last = start + ae->len;
>>
>> for ( ;; ) {
>> - p = ngx_strcasestrn(start, "gzip", 4 - 1);
>> + p = ngx_strcasestrn(start, e, n - 1);
>> if (p == NULL) {
>> return NGX_DECLINED;
>> }
>> @@ -2322,10 +2349,10 @@
>> break;
>> }
>>
>> - start = p + 4;
>> - }
>> -
>> - p += 4;
>> + start = p + n;
>> + }
>> +
>> + p += n;
>>
>> while (p < last) {
>> switch (*p++) {
>> @@ -2364,7 +2391,7 @@
>> return NGX_DECLINED;
>> }
>>
>> - if (ngx_http_gzip_quantity(p, last) == 0) {
>> + if (ngx_http_encoding_quantity(p, last) == 0) {
>> return NGX_DECLINED;
>> }
>>
>> @@ -2373,7 +2400,7 @@
>>
>>
>> static ngx_uint_t
>> -ngx_http_gzip_quantity(u_char *p, u_char *last)
>> +ngx_http_encoding_quantity(u_char *p, u_char *last)
>> {
>> u_char c;
>> ngx_uint_t n, q;
>> diff -r 87cf6ddb41c2 -r 96939e63f305 src/http/ngx_http_core_module.h
>> --- a/src/http/ngx_http_core_module.h Fri Feb 17 17:01:27 2017 +0300
>> +++ b/src/http/ngx_http_core_module.h Wed Feb 22 13:01:13 2017 +0100
>> @@ -504,6 +504,7 @@
>> ngx_int_t ngx_http_auth_basic_user(ngx_http_request_t *r);
>> #if (NGX_HTTP_GZIP)
>> ngx_int_t ngx_http_gzip_ok(ngx_http_request_t *r);
>> +ngx_int_t ngx_http_brotli_ok(ngx_http_request_t *r);
>> #endif
>>
>>
>>
>>
>>
>>
>> Take 2 - modify ngx_http_gzip_static_modile to serve both .gz and .br.
>>
>>
>> On 22 February 2017 at 16:10, Eugene Kluchnikov <eustas.ru at gmail.com>
>> wrote:
>>
>>> Yup. Going to try to create a "combined" module soon =)
>>>
>>> On 22 February 2017 at 15:40, Valentin V. Bartenev <vbart at nginx.com>
>>> wrote:
>>>>
>>>> At the first glance, the differences are really small and
>>>> such functionality can be combined in one module.
>>>>
>>>
>
>
> --
> С наилучшими пожеланиями, Евгений Ключников
> WBR, Eugene Kluchnikov
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20170224/f4c99b51/attachment-0001.html>
More information about the nginx-devel
mailing list