поддержка HTTP/1.1 для проксирования

RaPaMaN rapaman at virthost.net
Thu Dec 30 00:43:33 MSK 2004


Добрый вечер, Игорь !

> Да, получил, по нему есть два замечания. Во-первых, длину нужно вычиcлять
> так:
>      len += sizeof(x_client_connection_status_header) - 1
>             + r->headers_in.connection->value.len;
>
> А второе замечание связано как раз с падением.

Спасибо, я исправил. Ночью иногда работать вредно.

> > У меня вопрос, я обнаружил, что если включен параметр, который я добавил
> > и приходит запрос по HTTP 1.0, то nginx валится:
> >
> > Т.е. падает с ошибкой 17, как я понял - это хедеры неправильные.
> >
> > Как я понимаю, в моем случае не приходит хедер Connection от клиента и
> > r->headers_in.connection->value.data - пустое значение и соответственно
> > валится прокси модуль.
> >
> > Еще вопрос, r->headers_in.connection->value.data - всегда может иметь
> > только значения keep-alive или close, или может быть пустым  или значение
> > keep-alive только если соединение с keep-alive, а иначе - пустое (т.е.
> > close) ?
>
> Если заголовка "Connection" нет, то r->headers_in.connection равен NULL.
> Это тоже нужно проверять, кроме p->lcf->set_x_client_connection_status.
> Что передавать в "X-Client-Connection" в этом случае - не знаю.
> Варианты такие:
> 1) для HTTP/1.1 (r->http_version == NGX_HTTP_VERSION_11)
>    по умолчанию keep-alive.
> 1) для HTTP/1.0 и ниже (r->http_version <= NGX_HTTP_VERSION_10)
>    по умолчанию close.

Понял, спасибо. Я дописал патч, высылаю его Вам для просмотра.

Я учел все условия и если Connection null, то я даю close в новом хедере.

А это модифицированный код для подмены Connection из хедера, работает в апаче 
начиная с 2.0.51 (опция header - always):

# START OF HACK
# Set new headers from X-Client-Connection
       RewriteEngine On
       RewriteCond %{HTTP:X-Client-Connection} ^(.*)
       RewriteRule ^.* - [env=REMOTE_X_CLIENT_CONNECTION:
%1,env=REMOTE_CLIENT_CONNECTION:%{HTTP:Connection}]
       RequestHeader set Connection "%{REMOTE_X_CLIENT_CONNECTION}e"
       RequestHeader unset X-Client-Connection
#       Fix to old headers
       Header always set Connection "%{REMOTE_CLIENT_CONNECTION}e" 
env=REMOTE_CLIENT_CONNECTION
# END OF HACK

С Уважением,
Дмитрий.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x-client-connection.patch
Type: text/x-diff
Size: 6693 bytes
Desc: not available
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20041229/c4fe5e91/attachment.patch>


More information about the nginx-ru mailing list