将Nginx的常用配置迁移至ASM网关

本文介绍Nginx的常用配置以及如何在ASM网关实现对应的功能。

Nginx配置

描述

ASM实现方案

allow-backend-server-header

允许从后端返回标头Server而不是通用的Nginx字符串。

ASM网关默认为true。

allow-snippet-annotations

允许在Ingress的Annotation中添加自定义脚本修改Nginx配置。

不支持该参数,ASM网关需要通过编辑IstioGateway YAML来修改网关配置。

compute-full-forwarded-for

将远程地址附加到X-Forwarded-For标头而不是替换它。

取决于Envoy的use_remote_address配置,默认为true。Istio关于XFF头的处理,请参见network-topologies

enable-underscores-inheaders

允许Header出现下划线。

对应Envoy的headers_with_underscores_action,默认为允许。

forwarded-for-header

设置用于标识客户端的原始IP地址的标头字段。

ASM网关不支持自定义forwarded-for Header,默认为X-Forwarded-For。

generate-request-id

如果请求中不存在X-Request-ID,则随机生成X-Request-ID。

对应Envoy的generate_request_id,可以通过ASM插件进行修改,默认为true。

ignore-invalid-headers

设置是否忽略带有非法名称的Header。合法的Header名称应该是由英文字母、数字、短划线(-),可能包含下划线(_)。

说明

下划线(_)由underscores_in_headers控制。

Envoy提供了一个Header Validator。若未配置Header Validator,会使用默认值。如果有非法Header,会提示Bad Request

image.png

keep-alive-requests

设置同一个keep-alive Connection最大可以处理多少个请求。达到最大请求数后,该连接将被关闭。

关于如何配置,请参见DestinationRuleconnectionPool.maxRequestsPerConnection

log-format-upstream

自定义日志格式。

ASM支持自定义日志格式,您可以通过ASM控制台的可观测配置页面进行配置。具体操作,请参见可观测配置

max-worker-connections

设置同一个Worker进程可以打开的最大连接数。

ASM并未提供完全相同的配置,但是支持通过DestinationRuleconnectionPool.tcp.maxConnections字段进行配置,该字段表示与同一个Host的最大连接数。

proxy-body-size

设置客户端请求的最大Body Size,若超过该值,就会报413错误

不支持直接配置。建议分块传输,不要使用太大的Body。

proxy-connect-timeout

定义与代理服务器建立连接的超时时间,不能超过75秒。

关于如何配置,请参见DestinationRuleconnectionPool.http.connectTimeout

reuse-port

设置Nginx为每个工作进程创建一个单独的监听Socket(使用SO_REUSEPORT参数),允许内核在工作进程之间分配传入的连接。默认为true。

ASM网关默认为true。

server-tokens

在响应中发送Nginx服务器标头,并在错误页面中显示Nginx的版本,默认为disabled。

ASM网关默认会将服务器标头填写为Envoy的标头,但是错误页面不会显示Envoy版本。

ssl-redirect

如果服务器由TLS证书,则将重定向的全局值设置为HTTPS。

关于如何配置,请参见网关规则tls.httpsRedirect

upstream-keepalive-connections

设置保留在每个工作进程的缓存中与上游服务器的最大的空闲Keepalive Connection数目。

ASM并未提供完全相同的配置,但DestinationRule提供了connectionPool.tcp.maxConnections字段,和该选项语义类似,不同的地方在于Istio中是所有连接,Nginx中是空闲连接。

upstream-keepalive-timeout

设置一个超时,超时之后将关闭与上游服务器之间的空闲连接。

关于如何配置,请参见DestinationRuleconnectionPool.http.idleTimeout

use-forwarded-headers

  • 若为true,Nginx将会转发传进来的X-Forwarded-* Header。通常用于L7代理之后。

  • 若为false,Nginx会忽略传进来的值,自动重新填写一个。

Istio关于XFF头的处理,请参见network-topologies

worker-cpu-affinity

将Worker进程绑定到指定的CPU集合上。

容器环境中,通常不建议配置该选项。保持默认即可。

更多信息,请参见Ingress Nginx