<div dir="ltr">Thank you. In my setup all 3 servers in the upstream block will answer requests for "<a href="http://myapplication.net">myapplication.net</a>" . Knowing that, would you say my config I have is sufficient?</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 5, 2016 at 1:42 PM, Reinis Rozitis <span dir="ltr"><<a href="mailto:r@roze.lv" target="_blank">r@roze.lv</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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:<br>
</blockquote>
<br>
</span><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
And to recap, should my server name in the "upstream" directive be the same name in the "server_name" directive in the "server" stanza?<br>
</blockquote>
<br>
<br></span>
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.<br>
<br>
<br>
By default  nginx sends whatever it is given in the proxy_pass directive.<br>
<br>
Taking your configuration for example:<br>
<br>
upstream <a href="http://myapplication.net" rel="noreferrer" target="_blank">myapplication.net</a> {<span class=""><br>
       server <a href="http://1.net" rel="noreferrer" target="_blank">1.net</a>;<br>
       server <a href="http://2.net" rel="noreferrer" target="_blank">2.net</a>;<br>
       server 3..net;<br>
}<br>
<br></span>
location {<br>
   proxy_pass   <a href="http://myapplication.net" rel="noreferrer" target="_blank">http://myapplication.net</a>;<br>
}<br>
<br>
<br>
1. On startup Nginx will resolve the <a href="http://1.net" rel="noreferrer" target="_blank">1.net</a> .. <a href="http://3.net" rel="noreferrer" target="_blank">3.net</a> hostnames<br>
2. Will send to whatever upstream server IP (not using the upstream hostsnames) it has chosen a request for '<a href="http://myapplication.net" rel="noreferrer" target="_blank">myapplication.net</a>' (Host). It also doesn't use server_name.<br>
<br>
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).<br>
<br>
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:<br>
<br>
location {<br>
   proxy_pass   <a href="http://myapplication.net" rel="noreferrer" target="_blank">http://myapplication.net</a>;<br>
   proxy_set_header Host  $host;<br>
}<br>
<br>
This way nginx sends to backend the actual hostname from request.<br>
<br>
Of course you can use also $server_name (or any other variable <a href="http://nginx.org/en/docs/varindex.html" rel="noreferrer" target="_blank">http://nginx.org/en/docs/varindex.html</a> or even static value) but usually server_name is something like .<a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a> (for wildcard matching) so it may confuse the backend.<br>
<br>
rr<br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</blockquote></div><br></div>