allow to use IP addresses without defined resolver
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index 045ded7..94d729c 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -99,11 +99,6 @@
return NULL;
}
- uc = ngx_calloc(sizeof(ngx_udp_connection_t), log);
- if (uc == NULL) {
- return NULL;
- }
-
r->event = ngx_calloc(sizeof(ngx_event_t), log);
if (r->event == NULL) {
return NULL;
@@ -138,8 +133,6 @@
r->event->log = log;
r->ident = -1;
- r->udp_connection = uc;
-
r->resend_timeout = 5;
r->expire = 30;
r->valid = 300;
@@ -147,10 +140,19 @@
r->log = log;
r->log_level = NGX_LOG_ALERT;
- uc->sockaddr = addr->sockaddr;
- uc->socklen = addr->socklen;
- uc->server = addr->name;
- uc->log = log;
+ if (addr) {
+ uc = ngx_calloc(sizeof(ngx_udp_connection_t), log);
+ if (uc == NULL) {
+ return NULL;
+ }
+
+ r->udp_connection = uc;
+
+ uc->sockaddr = addr->sockaddr;
+ uc->socklen = addr->socklen;
+ uc->server = addr->name;
+ uc->log = log;
+ }
return r;
}
@@ -177,6 +179,10 @@
}
}
+ if (r->udp_connection == NULL) {
+ return NGX_NO_RESOLVER;
+ }
+
ctx = ngx_resolver_calloc(r, sizeof(ngx_resolver_ctx_t));
if (ctx) {
diff --git a/src/core/ngx_resolver.h b/src/core/ngx_resolver.h
index e69f420..b1b8ede 100644
--- a/src/core/ngx_resolver.h
+++ b/src/core/ngx_resolver.h
@@ -26,6 +26,9 @@
#define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
+#define NGX_NO_RESOLVER (void *) -1
+
+
typedef struct {
ngx_connection_t *connection;
struct sockaddr *sockaddr;
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index fea5cb5..b882f1c 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2594,6 +2594,13 @@
if (conf->resolver == NULL) {
conf->resolver = prev->resolver;
+
+ if (conf->resolver == NULL) {
+ conf->resolver = ngx_resolver_create(NULL, cf->cycle->new_log);
+ if (conf->resolver == NULL) {
+ return NGX_OK;
+ }
+ }
}
ngx_conf_merge_path_value(conf->client_body_temp_path,
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 7901bb6..e51638b 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -398,13 +398,6 @@
}
}
- if (clcf->resolver == NULL) {
- ngx_log_error(NGX_LOG_ERR, c->log, 0,
- "no resolver defined to resolve %V", host);
- ngx_http_finalize_request(r, NGX_HTTP_BAD_GATEWAY);
- return;
- }
-
temp.name = *host;
ctx = ngx_resolve_start(clcf->resolver, &temp);
@@ -413,6 +406,14 @@
return;
}
+ if (ctx == NGX_NO_RESOLVER) {
+ ngx_log_error(NGX_LOG_ERR, c->log, 0,
+ "no resolver defined to resolve %V", host);
+
+ ngx_http_finalize_request(r, NGX_HTTP_BAD_GATEWAY);
+ return;
+ }
+
ctx->name = *host;
ctx->type = NGX_RESOLVE_A;
ctx->handler = ngx_http_upstream_resolve_handler;