I&#39;m going to try tonight to get this working as you have suggested.&nbsp; I&#39;m hoping that I&#39;ll be able to do it without using too many IPs, because then I&#39;ll run into my original problem (the IP limit imposed by my hosting provider).&nbsp; I believe your solution of listening on the same IP on multiple ports should work, though.&nbsp; I&#39;ll just assign two listen ports on the back-end nginx for each site -- one for http and one for https.&nbsp; I imagine it&#39;ll look something like this when I&#39;m finished:<br>
<br>&nbsp;&nbsp;&nbsp; ###&nbsp; front-end nginx&nbsp; ###<br><br>&nbsp;&nbsp;&nbsp; # main nginx config<br>&nbsp;&nbsp;&nbsp; http {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; upstream backend_server_http {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server&nbsp; <a href="http://10.10.1.1:2000">10.10.1.1:2000</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; upstream backend_server_https {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server&nbsp; <a href="http://10.10.1.1:2001">10.10.1.1:2001</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; # front-end server (http) for <a href="http://domain.com">domain.com</a><br>&nbsp;&nbsp;&nbsp; server {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp; 80;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; <a href="http://domain.com">domain.com</a>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass&nbsp; <a href="http://backend_server_http">http://backend_server_http</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; # front-end server (https) for <a href="http://domain.com">domain.com</a><br>&nbsp;&nbsp;&nbsp; server {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp; <a href="http://209.20.2.2:443">209.20.2.2:443</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; <a href="http://domain.com">domain.com</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl&nbsp; on;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass&nbsp; <a href="http://backend_server_https">http://backend_server_https</a>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; ###&nbsp; back-end nginx&nbsp; ###<br><br>&nbsp;&nbsp;&nbsp; # main nginx config<br>
&nbsp;&nbsp;&nbsp; http {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; upstream app_servers {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server&nbsp; <a href="http://0.0.0.0:3000">0.0.0.0:3000</a>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server&nbsp; <a href="http://0.0.0.0:3001">0.0.0.0:3001</a>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; # back-end server (http) for <a href="http://domain.com">domain.com</a><br>&nbsp;&nbsp;&nbsp; server {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp; <a href="http://10.10.1.1:2000">10.10.1.1:2000</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; <a href="http://domain.com">domain.com</a>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass&nbsp; <a href="http://app_servers">http://app_servers</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; # back-end server (https) for <a href="http://domain.com">domain.com</a><br>&nbsp;&nbsp;&nbsp; server {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp; <a href="http://10.10.1.1:2001">10.10.1.1:2001</a>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; <a href="http://domain.com">domain.com</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_set_header&nbsp; X_FORWARDED_PROTO&nbsp; https;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass&nbsp; <a href="http://app_servers">http://app_servers</a>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br><br>I believe this is what you&#39;ve described, and I also believe that it will work.&nbsp; Requests for <a href="http://domain.com">http://domain.com</a> will be proxied upstream to backend_server_http (at <a href="http://10.10.1.1:2000">10.10.1.1:2000</a>), which will proxy to the Rails app servers with no X_FORWARDED_PROTO being set explicitly.&nbsp; Requests for <a href="https://domain.com">https://domain.com</a> will be proxied upstream to backend_server_https (at <a href="http://10.10.1.1:2001">10.10.1.1:2001</a>), which will proxy to the Rails app servers with the X_FORWARDED_PROTO header being set explicitly to https.<br>
<br>Thanks again for the suggestion.&nbsp; I&#39;ll send an e-mail back to this list once I&#39;ve given this a try.<br><br>Nick<br><br><br><div class="gmail_quote">On Thu, Oct 30, 2008 at 2:05 PM, Rob Schultz <span dir="ltr">&lt;<a href="mailto:lists@ruby-forum.com">lists@ruby-forum.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br>
 &nbsp; I am not sure if you can use the port in the server_name directive. I<br>
think you need to add listen directives.<br>
<br>
Note i could be totally off on this but this is a very very simplistic<br>
view of what i was trying to accomplish<br>
<a href="http://pastie.org/private/xufufgttegqe9pc5qgea" target="_blank">http://pastie.org/private/xufufgttegqe9pc5qgea</a><br>
<br>
Basically demo&#39;ing 3 different server configs with 2 being your<br>
&quot;frontend&quot; server&#39;s for doing SSL and then having 1 server listening on<br>
two ports and manually setting the protocal no the second when it is<br>
passed onto rails.<br>
<br>
V/r<br>
Rob</blockquote></div><br>