proxy q

Igor Sysoev is at rambler-co.ru
Fri Sep 23 14:37:28 MSD 2005


On Fri, 23 Sep 2005, Alexander Burnos wrote:

> Есть nginx, который принимает https GET запросы и отдает их бэкенду по http.
>
> Задача стоит такая, чтобы отдавать ответ клиенту, по мере выдачи его
> бэкендом, а не тогда, когда бэкенд окончит request.
>
> Пробовал играться с буферами для этой цели, вроде:
>
>        location  /myurl/ {
>         proxy_buffers 2 1;
>         proxy_busy_buffers_size 1;
>         proxy_header_buffer_size 1;
>         proxy_pass   http://backend/;
>        }
>
> Предпологая, что в этом случае nginx будет отдавать ответ backend'а
> клиенту сразу, как только получит хоть один байт.
> Но в итоге лишь получают от nginx 502 Bad Gateway.
>
> Можно ли как-то решить эту задачу стандартными средствами?
>
> Я уже задавал этот вопрос Игорю Сысоеву, но ступил и некорректно
> сформулировал задачу. Спросил, можно ли потоково передавать запрос
> клиента бэкенду. Он ответил что это невозможно в текущей реализации.
> А что насчет обратной задачи? Передавать ответ бэкенда по мере его выдачи клиенту.

proxy_header_buffer_size не может быть меньше, чем размер заголовка ответа,
из-за этого и 502.

nginx передаёт ответа бэкенда по мере его поступления, но при этом
ещё и буферизует. Что-то близкое к потоку могло бы получится при таких
настройках:

       proxy_header_buffer_size  512;
       proxy_buffers             2 512;
       proxy_busy_buffers_size   512;
       proxy_max_temp_file_size  0;

Но если ответ https, то там используется 16K буфер для уменьшения
оверхеда SSL.


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





More information about the nginx-ru mailing list