nginx rewrite help

Igor Sysoev is at rambler-co.ru
Thu Jun 18 19:16:09 MSD 2009


On Thu, Jun 18, 2009 at 08:10:27AM -0700, Kevin Castiglione wrote:

> 2009/6/18 Igor Sysoev <is at rambler-co.ru>
> 
> > On Thu, Jun 18, 2009 at 07:44:55AM -0700, Kevin Castiglione wrote:
> >
> > > 2009/6/18 Igor Sysoev <is at rambler-co.ru>
> > >
> > > > On Thu, Jun 18, 2009 at 07:21:33AM -0700, Kevin Castiglione wrote:
> > > >
> > > > > 2009/6/18 Igor Sysoev <is at rambler-co.ru>
> > > > >
> > > > > > On Thu, Jun 18, 2009 at 06:38:54AM -0700, Kevin Castiglione wrote:
> > > > > >
> > > > > > > 2009/6/18 Igor Sysoev <is at rambler-co.ru>
> > > > > > >
> > > > > > > > On Wed, Jun 17, 2009 at 09:22:46PM -0700, Kevin Castiglione
> > wrote:
> > > > > > > >
> > > > > > > > > hei guys
> > > > > > > > > i want all urls to be re-written as follows:
> > > > > > > > >
> > > > > > > > > xx /host/xx
> > > > > > > > >
> > > > > > > > > xx is the url full path, it should be written as /domain/xx
> > where
> > > > > > host is
> > > > > > > > > the hostname.
> > > > > > > > >
> > > > > > > > > for example www.ABCD.COM <http://www.abcd.com/>
> > > > > > > > >
> > > > > > > > > /test?1 ---> /ABCD.COM/test?1 <http://abcd.com/test?1>
> > > > > > > > > is it possible to do this with nginx?
> > > > > > > > > thank you!
> > > > > > > >
> > > > > > > > Should it be redirect or what ?
> > > > > > > >
> > > > > > >
> > > > > > > i dont want it to be a permanent redirect. i just want the url to
> > be
> > > > > > > rewritten for application processing. i want different domains to
> > be
> > > > > > handled
> > > > > > > by same web app an dmy webframe work supports only url-level
> > > > application
> > > > > > > mapping. that is why i need this rewrite.
> > > > > > > thank you
> > > > > >
> > > > > > If you use proxing, then
> > > > > >
> > > > > > server {
> > > > > >
> > > > > >   location / {
> > > > > >       proxy_pass  http://backend/$host$request_uri;
> > > > > >    }
> > > > > >
> > > > > > }
> > > > > >
> > > > > im using fastcgi backend.
> > > >
> > > > Then
> > > >
> > > >   location / {
> > > >       ...
> > > >       fastcgi_param  SCRIPT_FILENAME
> > > >                      /path/to/scripts/$host$fastcgi_script_name;
> > > >       ...
> > > >    }
> > > >
> > > igor:
> > > does this mean the backend fastcgi processes have to be in the same
> > machine?
> > > i have my backends running on different machine like this
> >
> > No, this path
> >        /path/to/scripts/$host$fastcgi_script_name;
> > may be on any host.
> >
> > In your case you need probably this:
> >
> >      fastcgi_param SCRIPT_FILENAME /$host$fastcgi_script_name;
> 
> so with this i dont need to write any rewrite rule?

Yes.

> also instead of $host, if i want to use domain or subdomain can you tell how
> i can extract: [aa.bb.com]
> -> domain - bb.com
> -> subdomain - aa

    server {
         server_name  ~^([^.])\.(.+)$)$;

         set   $subdomain $1;
         set   $domain    $2;

         location / {
             fastcgi_param SCRIPT_FILENAME /$domain$fastcgi_script_name;


> > Also, this
> >
> >       if ($http_x_forwarded_for ~ "(?:^|,)\s*(\d+\.\d+\.\d+\.\d+)\s*$") {
> >           set  $addr  $1;
> >       }
> >
> >        fastcgi_param REMOTE_ADDR     $addr;
> >
> > means that anyone may forge his address.
> 
> without this my web app gets client ip address as the ip address of the
> machine running nginx and not the actual client.

     fastcgi_param REMOTE_ADDR     $remote_addr;

sets address of nginx's client.


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





More information about the nginx mailing list