Getting the URLs right when proxying to apache and mongrel

Igor Sysoev is at rambler-co.ru
Tue Sep 4 22:30:33 MSD 2007


On Sun, Sep 02, 2007 at 06:21:03PM +0100, marc wrote:

> Igor Sysoev said...
> > On Sun, Sep 02, 2007 at 03:32:25PM +0100, marc wrote:
> > 
> > > Hi,
> > > 
> > > I'm testing nginx by putting it in front of an existing Apache server, 
> > > and also using it to serve rails via mongrel.
> > > 
> > > This works okay, mostly, but for a couple of things:
> > > 
> > > 1. When I proxy to Apache (on port 81) the URLs are written showing the 
> > > port, e.g.
> > > 
> > >   http://mote:81/Main/Software
> > > 
> > > I'd like not not to see the port number, if possible,
> > > 
> > > I tried using
> > > 
> > >     upstream apache {
> > >       server mote:81;
> > >     }
> > > 
> > > and 
> > > 
> > >     location / {
> > >         proxy_pass   http://apache;
> > 
> >           proxy_redirect  http://mote:81/  /;
> > 
> > >     }
> 
> Thanks for the assist.
> 
> This results in 404s and, in the case of *.php files, the browser trying 
> to download the file.

It's very strange. proxy_redirect simply rewrites

Location: http://mote:81/Main/Software

to

Location: http://your_site/Main/Software


> > > but that resulted in URLs of the form: http://apache/...
> > > 
> > > 2. The url required to access the rails app fails without the trailing 
> > > slash. So,
> > >   
> > >   http://mote/rails/
> > > 
> > > works, but the following doesn't
> > > 
> > >   http://mote/rails
> > 
> > In your configuration, proxied request is "GET  HTTP/1.0".
> > What request should go to mongrel for /rails ?
> 
> I don't know. Whatever it gets in the current script is fine - 
> notwithstanding the problem mentioned before.

What requests did you use before nginx ?

> > > I'd like the latter to work, if possible,
> > >
> > > I've added my conf file below for reference.
> > 
> > > user www-data;
> > > worker_processes  1;
> > > 
> > > error_log  /var/log/nginx/error.log;
> > > pid        /var/run/nginx.pid;
> > > 
> > > events {
> > >     worker_connections  1024;
> > > }
> > > 
> > > http {
> > >     include       /etc/nginx/mime.types;
> > >     default_type  application/octet-stream;
> > >     access_log	/var/log/nginx/access.log;
> > >     sendfile        on;
> > >     keepalive_timeout  65;
> > >     tcp_nodelay        on;
> > >     gzip  on;
> > >     gzip_min_length  1100;
> > >     gzip_buffers     4 8k;
> > >     gzip_types       text/plain;
> > > 
> > >     upstream mongrel {
> > >       server 127.0.0.1:8000;
> > >       server 127.0.0.1:8001;
> > >     }
> > > 
> > >     server {
> > >         listen       80;
> > >         server_name  mote;
> > > 
> > >         access_log  /var/log/nginx/localhost.access.log;
> > >         root   /var/www;
> > >         index  index.html index.htm;
> > > 
> > >         location / {
> > >             proxy_pass   http://mote:81;
> > 
> >               proxy_redirect  http://mote:8000/  /;
> >               proxy_redirect  http://mote:8001/  /;
> 
> I'm not clear what this would do. I don't want to redirect to mongrel 
> here, but to Apache - to serve php and python.

proxy_redirect simply rewrites Location header line.

> Should I be using the redirect mentioned higher up here?
> 
> > 
> > >         }
> > > 
> > >         location ^~ /rails {
> > > 
> > >           proxy_set_header  X-Real-IP  $remote_addr;
> > >           proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
> > >           proxy_set_header Host $http_host;
> > >           proxy_redirect false;
> > > 
> > >           if (!-f $request_filename) {
> > >           root /home/marc/rails/mrctest/public;
> > >             rewrite ^/rails(.*) $1;
> > >             proxy_pass http://mongrel;
> > >             break;
> > >           }
> > >         }
> > > 
> > >         error_page   500 502 503 504  /50x.html;
> > >         location = /50x.html {
> > >             root   /var/www/nginx-default;
> > >         }
> > >     }
> > > }
> 
> -- 
> Cheers,
> Marc
> 
> 

-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list