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