Welcome! Log In Create A New Profile

Advanced

Re: неправильный HTTP GET request с переменными в конфиге

Igor Sysoev
December 21, 2009 10:58AM
On Mon, Dec 21, 2009 at 10:51:38AM -0500, anatoly wrote:

> похоже nginx создает некорректные http requests когда в config server, location есть proxy_path с переменными, например
> proxy_pass http://$1.site.com/;
> proxy_redirect http://$1.site.com/ http://$1.ru.site.com/;
> ошибка происходит когда request url более сложный чем "/" вроде http://some.ru.site.com/more/complex.html
> происходит обрезание request url до "GET / HTTP/1.0" вместо корректного "GET /more/complex.html HTTP/1.0"
>
> насколько я понимаю проблема в ngx_http_proxy_module.c
> когда есть хоть одна переменная в proxy uri - инициализация модуля компилирует конфиг
> и заполняет список в конфиге cnf->proxy_lengths
> и когда cnf->proxy_lengths не пустой - в качестве адреса запроса
> берется conf->vars.uri которое формируется из proxy url, а не из request url и там всегда "/"
> если убрать проверку "if (plcf->proxy_lengths)" - запросы получаются правильные
> вот так
> /**********************************************************************************/
> -- nginx/src/http/modules/ngx_http_proxy_module.c (original revision)
> +++ nginx/src/http/modules/ngx_http_proxy_module.c (working copy)
> @@ -899,7 +899,7 @@
>
> ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
>
> - if (plcf->proxy_lengths) {
> + if (0) {
> uri_len = ctx->vars.uri.len;
>
> } else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri && r == r->main)
> @@ -1005,14 +1005,14 @@
>
> u->uri.data = b->last;
>
> - if (plcf->proxy_lengths) {
> + if (0) {
> b->last = ngx_copy(b->last, ctx->vars.uri.data, ctx->vars.uri.len);
>
> } else if (unparsed_uri) {
> b->last = ngx_copy(b->last, r->unparsed_uri.data, r->unparsed_uri.len);
>
> } else {
> - if (r->valid_location) {
> + if (r->valid_location && plcf->proxy_lengths==NULL) {
> b->last = ngx_copy(b->last, ctx->vars.uri.data, ctx->vars.uri.len);
> }
> /**********************************************************************************/
>
> собственно вопрос - можно ли убрать проверку if (plcf->proxy_lengths)
> и не зарезается ли при убирании какая-нибудь полезная функциональность nginx ?

Это не ошибка, а фича. Нужно писать

proxy_pass http://$1.site.com$request_uri;

или, начиная с 0.8.25:

proxy_pass http://$1.site.com;


--
Игорь Сысоев
http://sysoev.ru

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

неправильный HTTP GET request с переменными в конфиге

anatoly December 21, 2009 10:51AM

Re: неправильный HTTP GET request с переменными в конфиге

Igor Sysoev December 21, 2009 10:58AM

Re: неправильный HTTP GET request с переменными в конфиге

anatoly December 21, 2009 11:04AM

Re: неправильный HTTP GET request с переменными в конфиге

Andrew Kopeyko December 21, 2009 12:06PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 123
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready