Re: Конфигурация nginx: proxy_pass, include в if, именованные локации, auth_basic

Alexey Karagodov karagodov at gmail.com
Tue Nov 27 13:49:11 MSK 2007


можно host-ами

2007/11/27, Анатолий Шарифулин <subscribe at tochkak.ru>:
>
>  Приветствую!
>
>
>
> 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 нельзя, т.е. не получится сделать для
> каждого субдомена свою авторизацию, только общую.
>
>
>
>
>
> Что посоветуете?
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20071127/f03a4bff/attachment.html>


More information about the nginx-ru mailing list