nginx auth_request_set не позволяет тестировать переменную в контексте

Я ищу обходной путь для fcgi authorizer, и вот как выглядит мой тестовый конфиг:

        location ~* "f4m$" {
                limit_except GET {
                        deny all;
                }
                auth_request /clu;
                auth_request_set $node $upstream_http_server;
# Problem's that $node is always empty for <if> in this context
                proxy_set_header Node $node;
                proxy_pass http://127.0.0.1/group_1tv$request_uri;
        }
        location = /clu {
                internal;

                proxy_pass_request_body off;
                proxy_pass_request_headers off;
                proxy_set_header Content-Length '';

                proxy_pass http://cluster_authorizer$request_uri;
        }
}

было бы все хорошо и хорошо, если бы я мог проверить переменную $node жгутов if структура сразу после возврата подзапроса. К сожалению, он всегда будет пустым, и мне придется настроить отдельный сервер для его решения:

server {
        server_name 127.0.0.1;
        location /group_1tv/ {
                if ($request_uri ~ "^/[^/]+(.*)") {}
                if ($http_node) {return http://$http_node$1;}

                proxy_cache hyvd;
                proxy_cache_valid any 1d;
                proxy_pass http://backend_group_1tv/;
        }
}

К сожалению, опять же, это работает, только когда $http_node не пусто и возвращает 400 (Неизвестное местоположение) в противном случае, а журнал отладки не объясняет, почему:

2014/02/02 18:31:15 [debug] 9602#0: *18 http upstream request: "/hds-live/livepkgr/_definst_/1tv.f4m?r=334"
2014/02/02 18:31:15 [debug] 9602#0: *18 http upstream process header
2014/02/02 18:31:15 [debug] 9602#0: *18 malloc: 09C12AD8:4096
2014/02/02 18:31:15 [debug] 9602#0: *18 recv: fd:12 137 of 4096
2014/02/02 18:31:15 [debug] 9602#0: *18 http proxy status 400 "400 Unknown location"

Я потратил на это 2 полных дня, очень нужен свежий вклад...

1 ответ

Решение

Поэтому я просто решил собственную проблему 400 с внутренним прокси-сервером, указав недопустимую настройку Content-length (''), а не 0.

Удалите это: proxy_set_header Content-Length '';

Другие вопросы по тегам