Getting the URLs right when proxying to apache and mongrel

Igor Sysoev is at rambler-co.ru
Sun Sep 2 19:34:01 MSD 2007


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/  /;

>     }
> 
> 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'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/  /;

>         }
> 
>         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;
>         }
>     }
> }


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





More information about the nginx mailing list