On 10/05/06, Zed Shaw <[EMAIL PROTECTED]> wrote: > On Mon, 2006-05-08 at 15:58 +0100, Paul Wright wrote: > > Hi all, > > > <snip> > > > I've seen in a few places [1][2] that the trailing slash is important > > on the ProxyPass directive but if I include that then I get a BAD > > CLIENT error in mongrel due to too many slashes: > > > This is really weird that you have to add the //. That type of URL is > rejected because it violates the actual URI grammar (from what I > understand of it). If balancer needs this, then I'm curious why it's > bleeding that // to the backend. > > I'll check it out to find out why this is the accepted wisdom.
I personally don't have to add the trailing slash to the setup and, after going back over the places I saw it mentioned only one of them claimed it needed to be there. The other was warning against it. So just discard the above. I think. > > The two main problems I have now is that all rendered links are > > missing the sub-directory and if any redirects are issued then they > > are for http://admin.example.com:12345/ instead of the ssl version > > https://admin.example.com:12345/ - is this because mongrel/rails is > > only seeing a http request? And if so is it possible to let the app > > know that it's actually https and in a subdirectory? > > I'll have to look at this. It might be that mongrel will have to detect > that the request was secured and add the https, but I really think Rails > should do this since this is where the redirect is generated. > > Take a look at the headers that Mongrel receives and see if you are > getting the header that indicates the request was secured. If you are > then Rails must not be honoring it. If not then you need to tell your > web server to start sending it. Having run mongrel in debug mode I've looked at the headers and there's nothing there to suggest that Apache has proxied a https connection. Looking through the Rails source[1] I see that there are two situations where Rails will generate https links 153 def ssl? 154 @env['HTTPS'] == 'on' || @env['HTTP_X_FORWARDED_PROTO'] == 'https' 155 end I had thought that I could used the [E=VAR:VAL] flag on a Rewrite rule but then I remembered that we're proxying to an independant http server (mongrel) so it wouldn't make it across. I've got it working by adding RequestHeader directive to my Rewrite rules: RewriteEngine On # Punt any pontential 404s to the proxy RewriteCond %{REQUEST_FILENAME} ^/rails/.* RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RequestHeader set X_FORWARDED_PROTO 'https' RewriteRule ^/rails/(.*)$ balancer://proxy_group/$1 [proxy] (I don't know apache well enough to know whether the RequestHeader will fire only apply when the RewriteCond or for every request to this VirtualHost but I'm confident it won't hurt non-rails requests.) All that's left now is working out how to set the environment variable RAILS_RELATIVE_URL_ROOT... Any clues? Paul. [1] - http://dev.rubyonrails.org/browser/trunk/actionpack/lib/action_controller/request.rb _______________________________________________ Mongrel-users mailing list [email protected] http://rubyforge.org/mailman/listinfo/mongrel-users
