But I am confused on a few concepts here. First of all, should my server name in the "upstream" directive be the same name in the "server_name" directive in the "server" stanza? Here is what I have so far:

And to recap, should my server name in the "upstream" directive be the same name in the "server_name" directive in the "server" stanza?


It is not a requirement, but depending on how your backend servers are configured (if they are namebased virtualhosts) you may need to specify correct Host header.


By default  nginx sends whatever it is given in the proxy_pass directive.

Taking your configuration for example:

upstream myapplication.net {
       server 1.net;
       server 2.net;
       server 3..net;
}

location {
   proxy_pass   http://myapplication.net;
}


1. On startup Nginx will resolve the 1.net .. 3.net hostnames
2. Will send to whatever upstream server IP (not using the upstream hostsnames) it has chosen a request for 'myapplication.net' (Host). It also doesn't use server_name.

If the backend has a namebased configuration and there is no 'myapplication'net' virtualhost (or it isnt the default one) the whole request will genereally fail (not return what was expected).

If that is the case you either need to configure the upstream block (which for nginx is just a virtual name) and the proxy_pass to match your backend configuration or usually people just add additional header:

location {
   proxy_pass   http://myapplication.net;
   proxy_set_header Host  $host;
}

This way nginx sends to backend the actual hostname from request.

Of course you can use also $server_name (or any other variable http://nginx.org/en/docs/varindex.html or even static value) but usually server_name is something like .domain.com (for wildcard matching) so it may confuse the backend.

rr

_______________________________________________
nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to