Модуль ngx_http_grpc_module
- Пример конфигурации
- Директивы
- grpc_bind
- grpc_buffer_size
- grpc_connect_timeout
- grpc_hide_header
- grpc_ignore_headers
- grpc_intercept_errors
- grpc_next_upstream
- grpc_next_upstream_timeout
- grpc_next_upstream_tries
- grpc_pass
- grpc_pass_header
- grpc_read_timeout
- grpc_send_timeout
- grpc_set_header
- grpc_socket_keepalive
- grpc_ssl_certificate
- grpc_ssl_certificate_key
- grpc_ssl_ciphers
- grpc_ssl_conf_command
- grpc_ssl_crl
- grpc_ssl_name
- grpc_ssl_password_file
- grpc_ssl_protocols
- grpc_ssl_server_name
- grpc_ssl_session_reuse
- grpc_ssl_trusted_certificate
- grpc_ssl_verify
- grpc_ssl_verify_depth
Модуль ngx_http_grpc_module позволяет передавать запросы на сервер gRPC (1.13.10). Модуль требует модуль ngx_http_v2_module.
Пример конфигурации
server {
listen 9000;
http2 on;
location / {
grpc_pass 127.0.0.1:9000;
}
}
Директивы
| Синтаксис: | grpc_bind
address
[transparent ] |
off; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Устанавливает локальный IP-адрес и порт, с которого будут происходить исходящие соединения с сервером gRPC. Значение параметра может содержать переменные. Специальное значение off отменяет действие директивы grpc_bind, унаследованной с предыдущего уровня конфигурации, что позволяет системе автоматически назначить локальный IP-адрес и порт.
Параметр transparent позволяет исходящим соединениям с сервером gRPC происходить с нелокального IP-адреса, например, с реального IP-адреса клиента:
grpc_bind $remote_addr transparent;
Для работы этого параметра обычно необходимо запускать процессы nginx с привилегиями суперпользователя. В Linux это не требуется, так как если указан параметр transparent, рабочие процессы наследуют от главного процесса возможность CAP_NET_RAW. Также необходимо настроить таблицу маршрутизации ядра для перехвата сетевого трафика от сервера gRPC.
| Синтаксис: | grpc_buffer_size size; |
|---|---|
| Значение по умолчанию: | grpc_buffer_size 4k|8k; |
| Контекст: | http, server, location |
Устанавливает размер буфера для чтения ответа, полученного от сервера gRPC. Ответ передается клиенту синхронно, как только он получен.
| Синтаксис: | grpc_connect_timeout time; |
|---|---|
| Значение по умолчанию: | grpc_connect_timeout 60s; |
| Контекст: | http, server, location |
Определяет таймаут для установления соединения с сервером gRPC. Следует отметить, что этот таймаут обычно не должен превышать 75 секунд.
| Синтаксис: | grpc_hide_header field; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
По умолчанию nginx не передает поля заголовков “Date”, “Server” и “X-Accel-...” из ответа сервера gRPC клиенту. Директива grpc_hide_header устанавливает дополнительные поля, которые не будут переданы. Если, наоборот, передача полей должна быть разрешена, можно использовать директиву grpc_pass_header.
| Синтаксис: | grpc_ignore_headers field ...; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Отключает обработку определенных полей заголовков ответа от сервера gRPC. Могут быть проигнорированы следующие поля: “X-Accel-Redirect” и “X-Accel-Charset”.
Если не отключена, обработка этих полей заголовков имеет следующий эффект:
- “X-Accel-Redirect” выполняет внутренний редирект на указанный URI;
- “X-Accel-Charset” устанавливает требуемый кодировку ответа.
| Синтаксис: | grpc_intercept_errors on | off; |
|---|---|
| Значение по умолчанию: | grpc_intercept_errors off; |
| Контекст: | http, server, location |
Определяет, должны ли ответы сервера gRPC с кодами, большими или равными 300, передаваться клиенту или перехватываться и перенаправляться в nginx для обработки с помощью директивы error_page.
| Синтаксис: | grpc_next_upstream
error |
timeout |
invalid_header |
http_500 |
http_502 |
http_503 |
http_504 |
http_403 |
http_404 |
http_429 |
non_idempotent |
off
...; |
|---|---|
| Значение по умолчанию: | grpc_next_upstream error timeout; |
| Контекст: | http, server, location |
Указывает в каких случаях запрос должен быть передан следующему серверу:
error- произошла ошибка при установлении соединения с сервером, передаче запроса или чтении заголовка ответа;
timeout- произошел таймаут при установлении соединения с сервером, передаче запроса или чтении заголовка ответа;
invalid_header- сервер вернул пустой или некорректный ответ;
http_500- сервер вернул ответ с кодом 500;
http_502- сервер вернул ответ с кодом 502;
http_503- сервер вернул ответ с кодом 503;
http_504- сервер вернул ответ с кодом 504;
http_403- сервер вернул ответ с кодом 403;
http_404- сервер вернул ответ с кодом 404;
http_429- сервер вернул ответ с кодом 429;
non_idempotent- обычно, запросы с неидемпотентным методом (
POST,LOCK,PATCH) не передаются следующему серверу, если запрос был отправлен серверу upstream; включение этого параметра явно разрешает повторную отправку таких запросов; off- отключает передачу запроса следующему серверу.
Следует иметь в виду, что передача запроса следующему серверу возможна только если еще ничего не было отправлено клиенту. То есть, если ошибка или таймаут возникают в середине передачи ответа, это исправить невозможно.
Директива также определяет, что считается неудачной попыткой связи с сервером. Случаи error, timeout и invalid_header всегда считаются неудачными попытками, даже если они не указаны в директиве. Случаи http_500, http_502, http_503, http_504, и http_429 считаются неудачными попытками только если они указаны в директиве. Случаи http_403 и http_404 никогда не считаются неудачными попытками.
Передача запроса следующему серверу может быть ограничена количеством попыток и временем.
| Синтаксис: | grpc_next_upstream_timeout time; |
|---|---|
| Значение по умолчанию: | grpc_next_upstream_timeout 0; |
| Контекст: | http, server, location |
Ограничивает время, в течение которого запрос может быть передан следующему серверу. Значение 0 отключает это ограничение.
| Синтаксис: | grpc_next_upstream_tries number; |
|---|---|
| Значение по умолчанию: | grpc_next_upstream_tries 0; |
| Контекст: | http, server, location |
Ограничивает количество попыток для передачи запроса следующему серверу. Значение 0 отключает это ограничение.
| Синтаксис: | grpc_pass address; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | location, if in location |
Устанавливает адрес сервера gRPC. Адрес может быть указан как доменное имя или IP-адрес, и порт:
grpc_pass localhost:9000;
или как путь к сокету UNIX-домена:
grpc_pass unix:/tmp/grpc.socket;
В качестве альтернативы, можно использовать схему “grpc://”:
grpc_pass grpc://127.0.0.1:9000;
Для использования gRPC через SSL, следует использовать схему “grpcs://”:
grpc_pass grpcs://127.0.0.1:443;
Если доменное имя разрешается в несколько адресов, все они будут использоваться в циклическом порядке. Кроме того, адрес может быть указан как группа серверов.
Значение параметра может содержать переменные (1.17.8). В этом случае, если адрес задан как доменное имя, имя ищется среди описанных групп серверов, а если не найдено, определяется с помощью резолвера.
| Синтаксис: | grpc_pass_header field; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Разрешает передачу полей заголовков с gRPC-сервера клиенту, которые в противном случае были бы отключены.
| Синтаксис: | grpc_read_timeout time; |
|---|---|
| Значение по умолчанию: | grpc_read_timeout 60s; |
| Контекст: | http, server, location |
Определяет таймаут для чтения ответа от gRPC-сервера. Таймаут устанавливается только между двумя последовательными операциями чтения, а не для передачи всего ответа. Если gRPC-сервер не передаст ничего в течение этого времени, соединение закрывается.
| Синтаксис: | grpc_send_timeout time; |
|---|---|
| Значение по умолчанию: | grpc_send_timeout 60s; |
| Контекст: | http, server, location |
Устанавливает таймаут для передачи запроса gRPC-серверу. Таймаут устанавливается только между двумя последовательными операциями записи, а не для передачи всего запроса. Если gRPC-сервер не получит ничего в течение этого времени, соединение закрывается.
| Синтаксис: | grpc_set_header field value; |
|---|---|
| Значение по умолчанию: | grpc_set_header Content-Length $content_length; |
| Контекст: | http, server, location |
Позволяет переопределять или добавлять поля в заголовок запроса, передаваемый gRPC-серверу. value может содержать текст, переменные и их комбинации. Эти директивы наследуются с предыдущего уровня конфигурации только в том случае, если на текущем уровне нет grpc_set_header директив.
Если значение поля заголовка является пустой строкой, то это поле не будет передано на gRPC-сервер:
grpc_set_header Accept-Encoding "";
| Синтаксис: | grpc_socket_keepalive on | off; |
|---|---|
| Значение по умолчанию: | grpc_socket_keepalive off; |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.15.6.
Конфигурирует поведение «TCP keepalive» для исходящих соединений с gRPC-сервером. По умолчанию применяются настройки операционной системы для сокета. Если директива установлена в значение «on», опция сокета SO_KEEPALIVE включена для сокета.
| Синтаксис: | grpc_ssl_certificate file; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Указывает file с сертификатом в формате PEM, используемым для аутентификации на gRPC-SSL-сервере.
Начиная с версии 1.21.0, в имени file можно использовать переменные.
| Синтаксис: | grpc_ssl_certificate_key file; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Указывает file с закрытым ключом в формате PEM, используемым для аутентификации на gRPC-SSL-сервере.
Вместо file, можно указать значение engine:name:id, которое загружает закрытый ключ с указанным id из модуля OpenSSL name.
Начиная с версии 1.21.0, в имени file можно использовать переменные.
| Синтаксис: | grpc_ssl_ciphers ciphers; |
|---|---|
| Значение по умолчанию: | grpc_ssl_ciphers DEFAULT; |
| Контекст: | http, server, location |
Указывает включенные шифры для запросов к gRPC-SSL-серверу. Шифры указаны в формате, понятном библиотеке OpenSSL.
Полный список можно просмотреть, используя команду «openssl ciphers».
| Синтаксис: | grpc_ssl_conf_command name value; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Эта директива появилась в версии 1.19.4.
Устанавливает произвольные команды конфигурации OpenSSL команд при установлении соединения с gRPC-SSL-сервером.
Директива поддерживается при использовании OpenSSL 1.0.2 или выше.
Несколько grpc_ssl_conf_command директив можно указать на одном уровне. Эти директивы наследуются с предыдущего уровня конфигурации только в том случае, если на текущем уровне нет grpc_ssl_conf_command директив.
Обратите внимание, что настройка OpenSSL напрямую может привести к неожиданному поведению.
| Синтаксис: | grpc_ssl_crl file; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Указывает file с отзывами сертификатов (CRL) в формате PEM, используемом для проверки сертификата gRPC-SSL-сервера.
| Синтаксис: | grpc_ssl_name name; |
|---|---|
| Значение по умолчанию: | grpc_ssl_name host from grpc_pass; |
| Контекст: | http, server, location |
Позволяет переопределить имя сервера, используемое для проверки сертификата gRPC-SSL-сервера и для передачи через SNI при установлении соединения с gRPC-SSL-сервером.
По умолчанию используется часть хоста из grpc_pass.
| Синтаксис: | grpc_ssl_password_file file; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Указывает file с парольными фразами для секретных ключей, где каждая фраза задаётся на отдельной строке. Парольные фразы пробуются по очереди при загрузке ключа.
| Синтаксис: | grpc_ssl_protocols
[SSLv2]
[SSLv3]
[TLSv1]
[TLSv1.1]
[TLSv1.2]
[TLSv1.3]; |
|---|---|
| Значение по умолчанию: | grpc_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; |
| Контекст: | http, server, location |
Включает указанные протоколы для запросов на gRPC-SSL-сервер.
Параметр TLSv1.3 используется по умолчанию с 1.23.4. | Синтаксис: | grpc_ssl_server_name on | off; |
|---|---|
| Значение по умолчанию: | grpc_ssl_server_name off; |
| Контекст: | http, server, location |
Включает или отключает передачу имени сервера через расширение TLS Server Name Indication (SNI, RFC 6066) при установлении соединения с gRPC-SSL-сервером.
| Синтаксис: | grpc_ssl_session_reuse on | off; |
|---|---|
| Значение по умолчанию: | grpc_ssl_session_reuse on; |
| Контекст: | http, server, location |
Определяет, могут ли повторно использоваться SSL-сессии при работе с gRPC-сервером. Если в логах появляются ошибки «SSL3_GET_FINISHED:digest check failed», попробуйте отключить повторное использование сессии.
| Синтаксис: | grpc_ssl_trusted_certificate file; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location |
Указывает file с доверенными сертификатами CA в формате PEM, используемыми для проверки сертификата gRPC-SSL-сервера.
| Синтаксис: | grpc_ssl_verify on | off; |
|---|---|
| Значение по умолчанию: | grpc_ssl_verify off; |
| Контекст: | http, server, location |
Включает или отключает проверку сертификата gRPC-SSL-сервера.
| Синтаксис: | grpc_ssl_verify_depth number; |
|---|---|
| Значение по умолчанию: | grpc_ssl_verify_depth 1; |
| Контекст: | http, server, location |
Устанавливает глубину проверки в цепочке сертификатов gRPC-SSL-сервера.
© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_grpc_module.html