Using URL instead of IP
Maxim Dounin
mdounin at mdounin.ru
Tue Nov 6 17:13:52 UTC 2018
Hello!
On Tue, Nov 06, 2018 at 12:44:47AM -0500, swati wrote:
> Hi,
>
> I intend to use nginx as load balancer for routing traffic to an application
> running on two separate Openshift (kubernetes) clusters.
> The app urls are -> app.dc1.example.com and app.dc2.example.com.
> When I curl to these individually I get required page.
> However, it seems, nginx resolves it into IP instead of treating it as mere
> destinations.
> See below my config.
>
> Since the apps are running on Openshift, they do not have a specific
> (public) IP address.
> Ping for app.dc1.example.com (and for that matter app.dc2.example.com) will
> give the IP of the machine where DNS service is running for that Openshift
> cluster.
>
> Is there a way to configure nginx to route the requests to the URLs without
> trying to resolve it into IP addresses?
>
> Thanks
> Swati
>
> ---
> upstream lbtest {
> server app.dc1.example.com ;
> server app.dc2.example.com ;
> }
>
> server {
> listen 9087;
> location / {
> proxy_set_header Host $host;
> proxy_pass http://lbtest;
> }
> }
> ---
With nginx-plus commercial version, you can use "server ...
resolve", which is specially designed for such use cases. See
here for details:
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#resolve
With vanilla nginx, you can instruct nginx to always re-resolve
names by using variables:
set $backend app.dc1.example.com;
proxy_pass $backend;
You won't be able to use an upstream block with multiple names
though. See here for details:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
Note that in both cases you'll have to define a resolver to use,
see here:
http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx
mailing list