Is there any way to redirect request to another server conf?

Vladimir Shebordaev vshebordaev at mail.ru
Tue Jun 12 15:00:59 UTC 2012


Hi!

2012/6/12 Thomas <sunyxing at gmail.com>:
>> On 12 Jun 2012 13h29 CEST, sunyxing at gmail.com wrote:
>>
>> > Hi All,
>> >
>> > I'm trying to use nginx as a proxy server which can judge server
>> > name by url.
>> >
>> > e.g.
>> >
>> > server {
>> > listen 80 default_server;
>> > my_rewrite_directive;
>> > }
>> >
>> > server {
>> > server_name a.com;
>> > root html/a;
>> > }
>> >
>> > server {
>> > server_name b.com;
>> > root html/b;
>> > }
>> >
>> > then  GET /a.com/index.html  will be redirected to server a.com;
>>
>> Doesn't this do what you need?
>>
>> server {
>>    listen 80 default_server;
>>
>>    location /a.com/index.html {
>>        return 302 http://a.com$request_uri;
>>    }
>>
>>    location /b.com/index.html {
>>        return 302 http://b.com$request_uri;
>>    }
>> }
>>
>> --- appa
>>
>
> Thanks for advice. Since my servers are supposed to handle the request
>  directly and independently,  302/301 are not acceptable in this
> situation.
>

It seems, you need some kind of reverse proxy setup where nginx is
running as a frontend server. If you do I would suggest to add
something like this to your nginx frontend configuration

        location ~ ^/([ab]\.com)/(.*)$ {
                proxy_pass http://$1/$2;
                proxy_redirect http://$proxy_host:$proxy_port/ /$1/;
        }

or more elaborated one based on your backend locations. You'll
probably also need to add certain rules to handle cookies and other
headers also depending on your particular backends. Please refer to
proxy module documentation for details.

In the hope it helps.

Regards,
Vladimir



More information about the nginx-devel mailing list