Sven
2008-Sep-23 16:18 UTC
Problem getting Rails to emit the correct (proxy) domain in route urls
Behind the scenes my app runs like this: http://myapp.mydomain.com/myapp and and https://myapp.mydomain.com/myapp are Apache 2.2 virtual hosts proxy-balanced to a mongrel cluster on the same machine. But I need to make these available here: https://www.mydomain.com/myapp and https://myapp.mydomain.com/myapp are on a second server using ProxyPass and ProxyPassReverse to point to the first Unfortunately the second server is running Apache 2.0 or I''d do the proxy balancing there. I assure you that getting the proxying, the subfolder, and various necessary transitions between HTTP and HTTPS working is collectively no fun at all. But I''m writing about a particular problem: In my routes I have HTTPS_PROTOCOL = (Rails.env.production? || Rails.env.test?) ? "https" : "http" map.with_options :protocol => HTTPS_PROTOCOL do map.resource :session, :requirements => {:protocol => HTTPS_PROTOCOL} map.logout ''/logout'', :controller => ''sessions'', :action => ''destroy'' map.login ''/login'', :controller => ''sessions'', :action => ''new'' end In my views I make reference to login_path and logout_path and these correctly form fully-qualified absolute URLs which include the https:// protocol directive. But **they point to the wrong server**. I am supposed to get https://www.mydomain.com/myapp/login but instead I get https://myapp.mydomain.com/myapp/login. What do I have to do to get Rails to generate these route urls with the proxy domain instead of request.host? Thanks, Sven --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Sean Huber
2008-Oct-02 05:37 UTC
Re: Problem getting Rails to emit the correct (proxy) domain
Check out this plugin: http://github.com/shuber/proxy -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I''m taking a look, Sean. It looks very promising, but I do have a couple of questions. First, we weren''t using Rewrite, but rather ProxyPass to set up the front-end server. That is, we have: ProxyPass /neworders http://client.example.com ProxyPassReverse /neworders http://client.example.com but your app expects this approach: RewriteRule ^/neworders(.*) http://client.example.com/orders$1 [L,P,E=originalUri:%{REQUEST_URI}] RequestHeader append X_FORWARDED_URI %{originalUri}e In theory I ought to be able to add something like RequestHeader append X_FORWARDED_URI %{originalUri}e to the ProxyPass code above, but I haven''t yet figured out how to stuff the server variable REQUEST_URI into the originalUri directive without using Rewrite (unfortunately it doesn''t look like there''s a way to reference REQUEST_URI directly in RequestHeader). Any idea how to do this? I''m trying it your way at the moment, but it''s introduced two problems that I wasn''t having before. First, my image links (e.g. http://my.domain.com/myapp/image_assets/0000/0001/_thumb.jpg) aren''t resolving. Second, I''m getting a redirect loop on SSL requests that makes me think that the ssl_requirement plugin may not be entirely happy. I''ll report back if I learn more, but I''d appreciate any suggestions you might have. Thanks, -Sven On Oct 2, 1:37 am, Sean Huber <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Check out this plugin:http://github.com/shuber/proxy > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I found this page http://httpd.apache.org/docs/2.2/env.html which states "Conditional Per-Request Settings For additional flexibility, the directives provided by mod_setenvif allow environment variables to be set on a per-request basis, conditional on characteristics of particular requests. For example, a variable could be set only when a specific browser (User-Agent) is making a request, or only when a specific Referer [sic] header is found. Even more flexibility is available through the mod_rewrite''s RewriteRule which uses the [E=...] option to set environment variables." So, as far as I can tell it looks like only RewriteRule allows setting of environment variables so you''d have to use that instead with the [P] option. I''ll look into the image links and ssl_requirement plugin issues. Thanks, Sean --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
My assets seem to be resolving correctly. Looks like you''re using attachment_fu. Are you using something like image_tag(@image.public_filename) ? Thanks, Sean --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Sven Aas
2008-Oct-02 20:37 UTC
Re: Problem getting Rails to emit the correct (proxy) domain
Yes, I am using attachment_fu, and I am using image_tag(image.public_filename). I have images working right now, but only by dropping the creation of the X_FORWARDED_URI request header. So obviously other stuff isn''t working ... -Sven --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---