Рубрики
Uncategorized

Практика Nginx (5) – буфер прокси-службы прокси-сервера nginx, заголовок запроса переопределения прокси-сервера, тайм-аут подключения прокси-сервера

Автор оригинала: David Wong.

1. Прокси-буфер

Прокси-сервер может кэшировать некоторые данные ответа, чтобы уменьшить потери ввода-вывода. По умолчанию данные хранятся в памяти. Когда памяти не хватит, она будет сохранена на жестком диске.

прокси-буферизация

Этот параметр используется для управления тем, следует ли открывать буфер содержимого внутреннего ответа. Если для этого параметра установлено значение выкл, две инструкции прокси-буфера и размер прокси-буфера будут недействительными. Однако, включена ли буферизация прокси-сервера или нет, зависит от размера буфера прокси-сервера.

Когда включена функция proxy_buffering, nignx сначала помещает возвращаемый серверный контент в буфер, а затем возвращает его клиенту (получение при передаче, а не все получение и передача клиенту). Временный файл определяется двумя инструкциями: максимальный размер файла прокси ﹣ сервера и размер записи файла прокси ﹣ сервера.

Если прокси-буфер закрыт, nginx немедленно отправит клиенту содержимое ответа, полученное с серверной части. Размер каждой выборки равен размеру буфера прокси-сервера, поэтому эффективность будет ниже.

Примечание.если включена буферизация прокси-сервера, имейте в виду, что используемый буфер прокси-сервера слишком велик. Это может занять вашу память и ограничить максимальное количество одновременных подключений, которые может поддерживать агент.

Syntax:    proxy_buffering on | off;
Default:    proxy_buffering on;
Context:    http, server, location

proxy_buffer_size

Заголовок ответа серверной части будет помещен в размер буфера прокси, который по умолчанию равен размеру установленного одиночного буфера в буферах прокси. Размер буфера прокси-сервера-это просто буфер заголовка ответа. Нет необходимости устанавливать его слишком большим.

Syntax:    proxy_buffer_size size;
Default:    proxy_buffer_size 4k|8k;
Context:    http, server, location

прокси-буферы

Размер буфера прокси-буферов обычно устанавливается большим, чтобы справляться с большими веб-страницами. Размер одного буфера в прокси-буфере определяется размером страницы памяти системы, которая обычно составляет 4 К в системе Linux. Прокси – буфер состоит из количества буферов и размера буфера. Общий размер-число * размер.

Если ответ на некоторые запросы слишком велик, часть, превышающая буферы, будет буферизована на жесткий диск (каталог буфера указан инструкцией temp path). Конечно, это замедлит реакцию на чтение и повлияет на пользовательский интерфейс. Вы можете использовать инструкцию proxy Max temp размер файла, чтобы отключить буфер диска

Syntax:    proxy_buffers number size;
Default:    proxy_buffers 8 4k|8k;
Context:    http, server, location

proxy_busy_buffers_size

Размер прокси – буфера не является независимым пространством. Это часть прокси-буфера и размера прокси-буфера. Nginx начнет передавать данные клиенту до того, как внутренний ответ будет полностью прочитан, поэтому он будет использовать часть буфера для передачи данных клиенту (размер этой части определяется размером буферов занятости прокси-сервера, который рекомендуется в два раза превышать размер одного буфера в прокси ﹣ буферах). Затем он продолжит извлекать данные из серверной части и записывать их на диск, когда буфер во временном файле заполнится.

Syntax:    proxy_busy_buffers_size size;
Default:    proxy_busy_buffers_size 8k|16k;
Context:    http, server, location

2. Переопределите или добавьте заголовок запроса, переданный прокси-серверу

proxy_set_header

Syntax:    proxy_set_header field value;
Default:    
    proxy_set_header Host $proxy_host;
    proxy_set_header Connection close;
Context:    http, server, location

Позволяет переопределять или добавлять заголовки запросов, которые передаются на прокси-сервер. Значение может содержать текст, переменные или их комбинацию. Если директива заголовка набора прокси-серверов не определена на текущем уровне конфигурации, конфигурация наследуется от предыдущего уровня. По умолчанию переопределены только два заголовка запроса:

proxy_set_header Host $proxy_host;
proxy_set_header Connection close;

Если кэширование включено, заголовки запроса “если изменено с тех пор”, “если не изменено с тех пор”, “если нет совпадения”, “если совпадение”, “диапазон” и “если диапазон” из исходного запроса не будут переданы прокси-сервером.

Заголовок запроса “хост” не может быть заменен прокси – сервером в следующей конфигурации:

proxy_set_header Host $http_host;

3. Время ожидания агента

proxy_connect_timeout

Syntax:    proxy_connect_timeout time;
Default:    proxy_connect_timeout 60s;
Context:    http, server, location

Определите nginx в качестве прокси-сервера, а время ожидания соединения между внутренним сервером по умолчанию составляет 60 секунд. Следует отметить, что этот тайм-аут обычно не может превышать 75 секунд.

proxy_read_timeout

Syntax:    proxy_read_timeout time;
Default:    proxy_read_timeout 60s;
Context:    http, server, location

Определяет время ожидания для чтения ответов с прокси-сервера, которое по умолчанию равно 60 секундам. Тайм-аут устанавливается только между двумя последовательными операциями чтения, а не при передаче всего ответа. Если прокси-сервер в это время не передает никаких данных, соединение закрывается.

proxy_send_timeout

Syntax:    proxy_send_timeout time;
Default:    proxy_send_timeout 60s;
Context:    http, server, location

Определяет время ожидания для отправки запросов на прокси-сервер, которое по умолчанию составляет 60 секунд. Тайм-аут устанавливается только между двумя последовательными записями, а не при передаче всего запроса. Если прокси-сервер в это время не получает никаких данных, соединение закрывается.

4. Общие примечания по конфигурации агента

location / {
    #Configure port 8080 of reverse proxy to the local machine
    proxy_pass http://127.0.0.1:8080;

    #Configure the real host information of the requesting client
    proxy_set_header Host $http_host;
    #Configure the request user's real IP information
    proxy_set_header X-Real-IP $remote_addr;

    #Connection timeout is 30 seconds
    proxy_connect_timeout 30;
    #Read response timeout is 60 seconds
    proxy_send_timeout 60;
    #Send request timeout is 60 seconds
    proxy_read_timeout 60;

    #Open proxy buffer
    proxy_buffering on;
    #The buffer of response header is set to 32K
    proxy_buffer_size 32k;
    #The number of web content buffers is 4, and the single size is 128K
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    #Buffer temporary files up to 256K
    proxy_max_temp_file_size 256k;

}