[PATCH] [PATCH] Proxy: support variables for proxy_method directive

Maxim Dounin mdounin at mdounin.ru
Wed Oct 26 17:32:32 UTC 2016


Hello!

On Sat, Oct 22, 2016 at 12:31:16AM +0300, dilaz03 at gmail.com wrote:

> # HG changeset patch
> # User Dmitry Lazurkin <dilaz03 at gmail.com>
> # Date 1476631441 -10800
> #      Sun Oct 16 18:24:01 2016 +0300
> # Node ID 9fbfc0ccb28e1eee624ff212de88fa1c051f09d9
> # Parent  56d6bfe6b609c565a9f500bde573fd9b488ff960
> Proxy: support variables for proxy_method directive.
> 
> diff -r 56d6bfe6b609 -r 9fbfc0ccb28e src/http/modules/ngx_http_proxy_module.c
> --- a/src/http/modules/ngx_http_proxy_module.c	Fri Oct 21 16:28:39 2016 +0300
> +++ b/src/http/modules/ngx_http_proxy_module.c	Sun Oct 16 18:24:01 2016 +0300
> @@ -73,7 +73,7 @@
>      ngx_array_t                   *cookie_domains;
>      ngx_array_t                   *cookie_paths;
>  
> -    ngx_str_t                      method;
> +    ngx_http_complex_value_t      *method;
>      ngx_str_t                      location;
>      ngx_str_t                      url;
>  
> @@ -380,7 +380,7 @@
>  
>      { ngx_string("proxy_method"),
>        NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
> -      ngx_conf_set_str_slot,
> +      ngx_http_set_complex_value_slot,
>        NGX_HTTP_LOC_CONF_OFFSET,
>        offsetof(ngx_http_proxy_loc_conf_t, method),
>        NULL },
> @@ -1159,8 +1159,10 @@
>          /* HEAD was changed to GET to cache response */
>          method = u->method;
>  
> -    } else if (plcf->method.len) {
> -        method = plcf->method;
> +    } else if (plcf->method != NULL) {
> +        if (ngx_http_complex_value(r, plcf->method, &method) != NGX_OK) {
> +            return NGX_ERROR;
> +        }
>  
>      } else {
>          method = r->method_name;
> @@ -3158,7 +3160,9 @@
>  
>  #endif
>  
> -    ngx_conf_merge_str_value(conf->method, prev->method, "");
> +    if (conf->method == NULL) {
> +        conf->method = prev->method;
> +    }
>  
>      ngx_conf_merge_value(conf->upstream.pass_request_headers,
>                                prev->upstream.pass_request_headers, 1);

Looks good, except a few style nits:

- We don't usually check pointers with "!= NULL", just testing 
  "if (plcf->method)" would be enough here.

- You've forgot to update the "set by ngx_pcalloc()" comment in 
  ngx_http_proxy_create_loc_conf().

Committed with the following patch on top:

--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -1159,7 +1159,7 @@ ngx_http_proxy_create_request(ngx_http_r
         /* HEAD was changed to GET to cache response */
         method = u->method;
 
-    } else if (plcf->method != NULL) {
+    } else if (plcf->method) {
         if (ngx_http_complex_value(r, plcf->method, &method) != NGX_OK) {
             return NGX_ERROR;
         }
@@ -2799,7 +2799,7 @@ ngx_http_proxy_create_loc_conf(ngx_conf_
      *     conf->upstream.store_values = NULL;
      *     conf->upstream.ssl_name = NULL;
      *
-     *     conf->method = { 0, NULL };
+     *     conf->method = NULL;
      *     conf->headers_source = NULL;
      *     conf->headers.lengths = NULL;
      *     conf->headers.values = NULL;

Thanks!

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx-devel mailing list