Re[3]: Проксирование адреса

Igor Askarov juks at juks.ru
Wed Sep 19 20:51:10 MSD 2007


Первый вариант доведён до ума, теперь у него нет недостатков.

        location / {
            set $myHost $host;

            if ($host ~* "^((\w+)\.domain\.com)$") {
                set $uid $2;
                set $myHost $1;
                rewrite ^(.*)$ /users/$uid$1 break;
            }

            index index.html index.htm;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $myHost;
            proxy_pass http://127.0.0.1:8080/;
        }


> Я бы тоже так сделал, но сервер этого не позволяет.

> Поэтому есть два рабочих варианта:

> 1)

> server {
>    server_name user.domain.com;
>    location / {
>             if ($host ~* "^(\w+)\.domain\.com$") {
>                 set $uid $1;
>                 rewrite ^(.*)$ /users/$uid$1 break;
>             }

>             proxy_set_header Host domain.com;
>    }
> }

> недостаток: сделать какие-либо служебные (не виртуальные) домены третьего уровня не
> представляется возможным. Жаль, нельзя делать proxy_set_header внутри
> if ("proxy_set_header" directive is not allowed here in /usr/local/nginx/nginx.conf:45)

> 2)

> server {
>    server_name user.domain.com;
>    location / {
>             if ($host ~* "^(\w+)\.domain\.com$") {
>                 set $uid $1;
>                 rewrite ^(.*)$ /users/$uid$1 break;
>                 proxy_pass http://localhost:80;
>             }
>    }
> }

> ...

> server {
>     listen          127.0.0.1:80;
>     server_name     localhost;

>     location / {
>         proxy_set_header Host $host;
>         proxy_pass http://127.0.0.1:8080;
>     }
> }

> недостатки: как-то это громоздко и некрасиво.

>> Я бы сделал так:

>> server {
>>   server_name user.domain.com;
>>   location / {
>>       set $host domain.com;
>>       proxy_pass http://127.0.0.1/users/;
>>   }
>> }

>> Естественно, нужно чтобы на 127.0.0.1 отвечал тот, кого прозрачно
>> проксируют.



>> ----- Original Message -----
>> From: "Igor Askarov" <juks at juks.ru>
>> To: "Igor Savchenko" <nginx-ru at sysoev.ru>
>> Sent: Wednesday, September 19, 2007 6:23 PM
>> Subject: Проксирование адреса




>> Здравствуйте!

>> Пытаюсь спроксировать адрес типа user.domain.com на
>> domain.com/users/user/

>> Пробую так:

>> location / {
>>          if ($host ~* "^(\w+)\.domain\.com$") {
>>                 set $uid $1;
>>                 rewrite ^(.*)$ http://domain.com/users/$uid$1;
>>          }

>> Но так получается редирект, соотвественно в браузере меняется урл с
>> bob.domain.ru на domain.ru/users/bob

>> Подскажите, как добиться прозрачного проксирования, не редиректа?











-- 
С уважением,
 Igor                          mailto:juks at juks.ru






More information about the nginx-ru mailing list