杂项

源IP

默认情况下,NGINX使用标头"X-Forwarded-For"的内容作为事实来源,以获取有关客户端IP地址的信息。 如果我们使用受信任的外部负载均衡器的IP /网络地址的正确信息配置设置proxy-real-ip-cidr **,这在L7中不会出现问题。

如果 ingress controller在AWS中运行,则需要使用VPC IPv4 CIDR。

另一个选择是使用use-proxy-protocol:"true"启用代理协议。

在这种模式下,NGINX不使用标头的内容来获取连接的源IP地址。

Proxy Protocol

如果您使用L4代理将流量转发到NGINX吊舱并在那里终止HTTP /HTTPS,则将丢失远程端点的IP地址。 为了防止这种情况, 您可以使用代理协议转发流量,这将在转发实际的TCP连接之前发送连接详细信息 本身。

在其他代理中 ELBs in AWSHAProxy 支持代理协议.

Websockets

NGINX提供了对websockets的支持。 无需特殊配置。

避免关闭连接的唯一要求是增加"proxy-read-timeout"和"proxy-send-timeout"的值。

此设置的默认值为"60秒"。

支持websocket的更合适的值是大于一小时的值("3600")。

!!! 重要 如果nginx ingress controller通过服务type = LoadBalancer公开,请确保负载均衡器和NGINX之间的协议为TCP。

Optimizing TLS Time To First Byte (TTTFB)

NGINX提供了配置选项 ssl_buffer_size 以允许优化TLS记录大小

这改善了 TLS Time To First Byte (TTTFB). Ingress控制器的默认值为4k(NGINX默认值为16k)。

Retries in non-idempotent methods

从1.9.13开始,NGINX不会在发生错误的情况下重试非幂等请求(POST,LOCK,PATCH)。 可以使用ConfigMap中的retry-non-idempotent = true恢复以前的行为。

Limitations

  • TLS的入口规则要求定义主机字段

Why endpoints and not services

nginx ingress controller未使用 Services 将流量路由到豆荚。 相反,它使用Endpoints API来绕过kube-proxy,以允许NGINX功能,例如会话亲和力和自定义负载平衡算法。 它还消除了一些开销,例如iptables DNAT的conntrack条目。

Last updated