[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