Я бы тоже так сделал, но сервер этого не позволяет.
Поэтому есть два рабочих варианта:
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@xxxxxxx>
> To: "Igor Savchenko" <nginx-ru@xxxxxxxxx>
> 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@xxxxxxx