Nginx rewrite help

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!

On Thu, Jun 18, 2009 at 11:22 AM, Kevin
Castiglione[email protected] wrote:

/test?1 —> /ABCD.COM/test?1
is it possible to do this with nginx?
thank you!

rewrite ^(.*)$ /$host$1;

On Thu, Jun 18, 2009 at 11:42 AM, Edho P Arief[email protected]
wrote:

for example www.ABCD.COM

/test?1 —> /ABCD.COM/test?1
is it possible to do this with nginx?
thank you!

rewrite ^(.*)$ /$host$1;

add redirect/permanent for external redirect.

rewrite ^.* /$host$uri;

can also be used (less captures hence faster?)

On Thu, Jun 18, 2009 at 11:49 AM, Edho P Arief[email protected]
wrote:

the hostname.
add redirect/permanent for external redirect.

rewrite ^.* /$host$uri;

can also be used (less captures hence faster?)

here’s the complete block

location ~ ^(?!/www.abcd.com) {
rewrite ^.*$ /$host$uri;
}

On Wed, Jun 17, 2009 at 09:22:46PM -0700, Kevin Castiglione wrote:

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

On Thu, Jun 18, 2009 at 11:46 AM, Edho P Arief[email protected]
wrote:

rewrite ^.* /$host$uri;

can also be used (less captures hence faster?)

whoops don’t forget to add last;

2009/6/18 Igor S. [email protected]

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

On Wed, Jun 17, 2009 at 10:09 PM, Edho P Arief [email protected]
wrote:

location ~ ^(?!/www.abcd.com) {
rewrite ^.*$ /$host$uri;
}

hi edho,
thanks a lot for this. does $host represent www.abcd.com or abcd.com?
thanks again!

2009/6/18 Igor S. [email protected]

Should it be redirect or what ?

server {

location / {
proxy_pass http://backend/$host$request_uri;
}

}

im using fastcgi backend.

On Thu, Jun 18, 2009 at 06:38:54AM -0700, Kevin Castiglione wrote:

the hostname.
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;
}

}

On Thu, Jun 18, 2009 at 07:21:33AM -0700, Kevin Castiglione wrote:

thank you!

im using fastcgi backend.
Then

location / {

fastcgi_param SCRIPT_FILENAME
/path/to/scripts/$host$fastcgi_script_name;

}

On Thu, Jun 18, 2009 at 07:44:55AM -0700, Kevin Castiglione wrote:

On Wed, Jun 17, 2009 at 09:22:46PM -0700, Kevin Castiglione wrote:

for example www.ABCD.COM http://www.abcd.com/
handled
proxy_pass http://backend/$host$request_uri;
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;
        }
        fastcgi_param SERVER_ADDR     $server_addr;
        fastcgi_param SERVER_PORT     $server_port;
        fastcgi_param SERVER_NAME     $server_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.

2009/6/18 Igor S. [email protected]

hei guys
/test?1 —> /ABCD.COM/test?1 http://abcd.com/test?1
application

  ...

}

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

upstream backend_flock{
    server app1.YYY.com:8491 fail_timeout=1s;
    server app2.YYY.com:8491 fail_timeout=1s;
}
server {
    server_name  .XXX.com;
    listen 80;
    access_log   logs/access.log;

    client_max_body_size 10m;
    location / {
        root   /home/app/flock;

        fastcgi_pass backend_flock;
        set  $addr  $remote_addr;

        if ($http_x_forwarded_for ~

“(?:^|,)\s*(\d+.\d+.\d+.\d+)\s*$”) {
set $addr $1;
}

        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
        fastcgi_param CONTENT_TYPE    $content_type;
        fastcgi_param CONTENT_LENGTH  $content_length;
        fastcgi_param REQUEST_METHOD  $request_method;
        fastcgi_param REMOTE_ADDR     $addr;
        fastcgi_param REMOTE_PORT     $remote_port;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SERVER_ADDR     $server_addr;
        fastcgi_param SERVER_PORT     $server_port;
        fastcgi_param SERVER_NAME     $server_name;
    }

}

2009/6/18 Igor S. [email protected]

2009/6/18 Igor S. [email protected]
where

im using fastcgi backend.
igor:
fastcgi_param SCRIPT_FILENAME /$host$fastcgi_script_name;
so with this i dont need to write any rewrite rule?

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

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.

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

On Thu, Jun 18, 2009 at 06:38:54AM -0700, Kevin Castiglione wrote:

mapping. that is why i need this rewrite.
}
}
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;

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.

On Thu, Jun 18, 2009 at 10:10 PM, Kevin
Castiglione[email protected] wrote:

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.

why not

fastcgi_param REMOTE_ADDR $remote_addr;

?
or is this for nginx on another pc used as proxy backend?

2009/6/18 Igor S. [email protected]

2009/6/18 Igor S. [email protected]

i want all urls to be re-written as follows:

rewritten for application processing. i want different
server {

i have my backends running on different machine like this

Yes.

igor,
i changed this and tried. it does not have any affect on the url
mapping. my
fastcgi backend still gets the same url as before.
this is what i see, with the change you had given.
xx.com domain name is for sale. Inquire now. —> xx.com domain name is for sale. Inquire now.

while this is what i want on the webapp/fastcgi backend
xx.com domain name is for sale. Inquire now.xx.com domain name is for sale. Inquire now.
im pasting my full config here:

#user nobody;
worker_processes 1;

error_log /home/app/error_all.log;
pid /home/app/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
client_header_buffer_size 8k;
large_client_header_buffers 4 8k;
fastcgi_buffers 32 4k;
fastcgi_buffer_size 4k;
sendfile on;

server_names_hash_bucket_size 64;
keepalive_timeout  5;

gzip  on;
gzip_comp_level  1;
gzip_proxied     private;
gzip_buffers     8 4k;


upstream backend_flock{
    server app1.XXX.com:8492 fail_timeout=1s;
}
server {
    listen 8080;
    access_log   /home/app/access_flock.log;

    client_max_body_size 10m;

    location /static {
        root   /home/app/work/flock;
    }
    location / {
        root   /home/app/work/flock;

        fastcgi_pass backend_flock;

        fastcgi_param SCRIPT_FILENAME /$host$fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
        fastcgi_param CONTENT_TYPE    $content_type;
        fastcgi_param CONTENT_LENGTH  $content_length;
        fastcgi_param REQUEST_METHOD  $request_method;
        fastcgi_param REMOTE_ADDR     $remote_addr;
        fastcgi_param REMOTE_PORT     $remote_port;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SERVER_ADDR     $server_addr;
        fastcgi_param SERVER_PORT     $server_port;
        fastcgi_param SERVER_NAME     $server_name;

    }

}

}

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.

this works great!!
thanks a lot!

On Fri, Jun 19, 2009 at 7:26 AM, Kevin
Castiglione[email protected] wrote:

           fastcgi_pass backend_flock;

           - fastcgi_param SCRIPT_FILENAME /$host$fastcgi_script_name;

  • fastcgi_param SCRIPT_FILENAME /$host/$host$fastcgi_script_name;

On Thu, Jun 18, 2009 at 8:23 AM, Edho P Arief [email protected]
wrote:

fastcgi_param REMOTE_ADDR $remote_addr;

this works great!!!
thanks

On Thu, Jun 18, 2009 at 8:55 PM, Edho P Arief [email protected]
wrote:

On Fri, Jun 19, 2009 at 7:26 AM, Kevin
Castiglione[email protected] wrote:

        fastcgi_pass backend_flock;

         - fastcgi_param SCRIPT_FILENAME /$host$fastcgi_script_name;
  • fastcgi_param SCRIPT_FILENAME /$host/$host$fastcgi_script_name;

Edho
This also produces the same result. the mapping does not work as
expected.
thank you!