Here’s the situation:
-
I have a site where a few pages are ssl-required but the whole site
is ssl-allowed. (In other words, most of the site can be reached by
either https or http.) -
In order to minimize user’s browser warnings, I want to use https
for all assets on pages when the request is https. This is easy for
requests on the same host (e.g. css, javascript since we are not using
a separate asset host yet) but some images are hosted by an off-site
server. -
These images have https versions available, but on a different host,
e.g. regular images are at http://images.example.com/images/filename.jpg
but secure at https://ssl-images.example.com/images/filename.jpg. I
have tweaked my image-URL-producing functions to produce the right
image URL when they are asked, e.g. def get_image_url(ssl=false), so
get_image_url returns http://images.example.com and
get_image_url(true) returns https://ssl-images.example.com.
How do I know, inside a view, when to ask that function for SSL and
when not?
-
request.ssl? doesn’t appear to be available inside views. (Not
surprising given that it’s part of ActionController.) -
I tried setting a global variable inside the controller (e.g.
@ssl_request = request.ssl?) but for some reason that’s not working,
either.
It seems as though Rails is not getting the message that the request
is SSL. I’m using Nginx + Passenger for hosting; is there something
similar to the “proxy_set_header X-FORWARDED_PROTO https;” which
should be used when the request isn’t being proxied?
Thanks,
pjm