ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Конфигурация nginx: proxy_pass, includ e в if, именованные локации, auth_b asic



Hello Анатолий,

Tuesday, November 27, 2007, 4:41:11 PM, you wrote:

> Приветствую!

>  

> Proxy_pass не понимает переменные, ни в качестве всего URI, ни в качестве 
> порта.

>  

> Пример:

> map  $http_host  $my_port  {

>                 game.rnd.example.com    8001;

>                 admin.rnd.example.com   8081;

>                 

>                 game.msk.example.com    8004;

>                 admin.msk.example.com   8084;

>                 

>                 game.test.example.com   8003;

>                 admin.test.example.com  8083;

>                 

>                 game.new.example.com    8002;

>                 admin.new.example.com   8082;

> }

>  

> location / {

>                 if  ($my_port) {

>                                proxy_pass http://127.0.0.1:$my_port;

>                                break;

>                 }

> }

>  

> Что не так?

>  

>  

> Решил обойти проблему.

> location / {

>                 if ($http_host ~ rnd\.example\.com$) {

>                                include /path/rnd.example.com/nginx.conf;

>                 }

>                 ...

> }

> Так не работает, пишет, что include не определен в if. 

>  

> Попробовал через именованный локации, только не знаю как их вызвать.

> Вызвал через error_page, но только GET запросы попадают через error_page на 
> именованную локацию, остальные ? ошибка 405.

> location / {

>                 if ($http_host ~ rnd\.example\.com$) {

>                                error_page 404 = @rnd;

>                 }

>                 ...

> }

> location @rnd {

>               include /path/rnd.example.com/nginx.conf;

> }

> ?

>  

> В итоге написал в лоб, но решение мне не нравится:

>  

> if ($http_host ~ ^game\.rnd\.example\.com$) {

>                 proxy_pass http://127.0.0.1:8001;

>                 break;

> }

> if ($http_host ~ ^admin\.rnd\.example\.com$) {

>                 proxy_pass http://127.0.0.1:8081;

>                 break;

> }

>  

> ?

>  

> if ($http_host ~ ^game\.test\.example\.com$) {

>                 proxy_pass http://127.0.0.1:8003;

>                 break;

> }

> if ($http_host ~ ^admin\.test\.example\.com$) {

>                 proxy_pass http://127.0.0.1:8083;

>                 break;

> }

>  

> Плюс auth_basic использовать в if нельзя, т.е. не получится сделать для 
> каждого субдомена свою авторизацию, только общую.

>  

>  

> Что посоветуете?

посоветую всё хозяйтво разруливать server'ами

server {
    listen xxx.xxx.xxx.xxx:8001;
    server_name game.rnd.example.com
    location / {
        proxy_pass http://127.0.0.1:8001;
    }
}

server {
    listen xxx.xxx.xxx.xxx:8081;
    server_name game.rnd.example.com
    location / {
        proxy_pass http://127.0.0.1:8081;
    }
}

server {
    listen xxx.xxx.xxx.xxx:8004;
    server_name game.msk.example.com;
    location / {
        proxy_pass http://127.0.0.1:8004;
    }
}

...

ни одного if'а :)
можно auth_basic для каждого из субдоменов свой прописать.


-- 
Best regards,
 Denis                            mailto:denis@xxxxxxxxxx




 




Copyright © Lexa Software, 1996-2009.