<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OPSaid – Ingress NGINX</title><link>https://opsaid.net/docs/cloud-native/networking/ingress-nginx/</link><description>Recent content in Ingress NGINX on OPSaid</description><generator>Hugo -- gohugo.io</generator><atom:link href="https://opsaid.net/docs/cloud-native/networking/ingress-nginx/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: User guide</title><link>https://opsaid.net/docs/cloud-native/networking/ingress-nginx/user-guide/</link><pubDate>Sun, 11 Sep 2022 11:13:40 +0800</pubDate><guid>https://opsaid.net/docs/cloud-native/networking/ingress-nginx/user-guide/</guid><description>
&lt;h2 id="版本信息">版本信息&lt;/h2>
&lt;p>以下配置说明均基于官方版本 1.31 做说明。&lt;/p>
&lt;h3 id="support-versions-table">Support Versions table&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Ingress-NGINX version&lt;/th>
&lt;th>k8s supported version&lt;/th>
&lt;th>Alpine Version&lt;/th>
&lt;th>Nginx Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>v1.3.1&lt;/td>
&lt;td>1.24, 1.23, 1.22, 1.21, 1.20&lt;/td>
&lt;td>3.16.2&lt;/td>
&lt;td>1.19.10†&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>v1.3.0&lt;/td>
&lt;td>1.24, 1.23, 1.22, 1.21, 1.20&lt;/td>
&lt;td>3.16.0&lt;/td>
&lt;td>1.19.10†&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>v1.1.1&lt;/td>
&lt;td>1.23, 1.22, 1.21, 1.20, 1.19&lt;/td>
&lt;td>3.14.2&lt;/td>
&lt;td>1.19.9†&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>v1.0.0&lt;/td>
&lt;td>1.22, 1.21, 1.20, 1.19&lt;/td>
&lt;td>3.13.5&lt;/td>
&lt;td>1.20.1&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="安装部署">安装部署&lt;/h2>
&lt;h2 id="配置示例">配置示例&lt;/h2>
&lt;h2 id="参数解析">参数解析&lt;/h2>
&lt;h3 id="可用的annotations">可用的Annotations&lt;/h3>
&lt;p>这里仅记录个人认为有比较有用处的几个注解，全部列表可以参考&lt;a href="https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/">官方文档&lt;/a>说明。&lt;/p>
&lt;blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>在ingress上annotation的键值对只能是字符串类型，数字或布尔类型需通过引号包含，如：&amp;ldquo;100&amp;rdquo;, &amp;ldquo;false&amp;rdquo;。默认键前缀是&amp;quot;nginx.ingress.kubernetes.io&amp;quot;，由参数&amp;quot;&amp;ndash;annotations-prefix&amp;quot;控制。&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;/blockquote>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>名称&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>默认值&lt;/th>
&lt;th>可取值&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="#app-root">nginx.ingress.kubernetes.io/app-root&lt;/a>&lt;/td>
&lt;td>当应用请求&amp;quot;/&amp;ldquo;时做302重定向的目标url&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/affinity&lt;/a>&lt;/td>
&lt;td>用于保持会话连接&lt;/td>
&lt;td>-&lt;/td>
&lt;td>cookie&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/affinity-mode&lt;/a>&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>balanced&lt;/td>
&lt;td>&amp;ldquo;balanced&amp;rdquo; or &amp;ldquo;persistent&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/affinity-canary-behavior&lt;/a>&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>sticky&lt;/td>
&lt;td>&amp;ldquo;sticky&amp;rdquo; or &amp;ldquo;legacy&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/session-cookie-name&lt;/a>&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>INGRESSCOOKIE&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/session-cookie-path&lt;/a>&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>/&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/session-cookie-secure&lt;/a>&lt;/td>
&lt;td>同上；只能用https协议发送给服务器&lt;/td>
&lt;td>false&lt;/td>
&lt;td>true, false&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/session-cookie-samesite&lt;/a>&lt;/td>
&lt;td>同上；Chrome 51 开始，浏览器的 Cookie 新增加了一个SameSite属性，用来防止 CSRF 攻击 和用户追踪&lt;/td>
&lt;td>-&lt;/td>
&lt;td>&amp;ldquo;None&amp;rdquo;, &amp;ldquo;Lax&amp;rdquo;, &amp;ldquo;Strict&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#affinity">nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none&lt;/a>&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;, &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#auth">nginx.ingress.kubernetes.io/auth-type&lt;/a>&lt;/td>
&lt;td>认证&lt;/td>
&lt;td>-&lt;/td>
&lt;td>&amp;ldquo;basic&amp;rdquo; or &amp;ldquo;digest&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#auth">nginx.ingress.kubernetes.io/auth-secret&lt;/a>&lt;/td>
&lt;td>同上；存放认证&amp;quot;secret&amp;quot;资源的名称&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#auth">nginx.ingress.kubernetes.io/auth-secret-type&lt;/a>&lt;/td>
&lt;td>同上；存放认证&amp;quot;secret&amp;quot;资源的格式&lt;/td>
&lt;td>-&lt;/td>
&lt;td>&amp;ldquo;auth-file&amp;rdquo;, &amp;ldquo;auth-map&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#auth">nginx.ingress.kubernetes.io/auth-realm&lt;/a>&lt;/td>
&lt;td>认证&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#canary">nginx.ingress.kubernetes.io/canary&lt;/a>&lt;/td>
&lt;td>灰度、金丝雀发布&lt;/td>
&lt;td>-&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#canary">nginx.ingress.kubernetes.io/canary-by-header&lt;/a>&lt;/td>
&lt;td>同上，基于HTTP请求头的流量调度，这里对于请求头名称，对应值可取&amp;quot;always&amp;quot;或&amp;quot;never&amp;rdquo;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#canary">nginx.ingress.kubernetes.io/canary-by-header-value&lt;/a>&lt;/td>
&lt;td>同上，自定义匹配请求头的值，以代替&amp;quot;always&amp;quot;与&amp;quot;never&amp;quot;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#canary">nginx.ingress.kubernetes.io/canary-by-header-pattern&lt;/a>&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#canary">nginx.ingress.kubernetes.io/canary-by-cookie&lt;/a>&lt;/td>
&lt;td>同上，基于Cookie的流量调度，这里对应cookie名称，对应值可取&amp;quot;always&amp;quot;或&amp;quot;never&amp;quot;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#canary">nginx.ingress.kubernetes.io/canary-weight&lt;/a>&lt;/td>
&lt;td>同上，流量调度到灰度副本的权重，填写数字如：30&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="#canary">nginx.ingress.kubernetes.io/canary-weight-total&lt;/a>&lt;/td>
&lt;td>同上，总权重是多少，配合上面使用&lt;/td>
&lt;td>-&lt;/td>
&lt;td>100&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/client-body-buffer-size]&lt;/td>
&lt;td>TODO; HTTP请求体缓冲区大小，如果请求超过这个值会写入nginx配置的temp_path做个缓冲&lt;/td>
&lt;td>-&lt;/td>
&lt;td>8k&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/configuration-snippet]&lt;/td>
&lt;td>TODO; 可自定义nginx配置，比较危险，建议关闭&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/server-snippet]&lt;/td>
&lt;td>TODO; 可自定义nginx配置，比较危险，建议关闭&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/stream-snippet]&lt;/td>
&lt;td>TODO; 可自定义nginx配置，比较危险，建议关闭&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/custom-http-errors]&lt;/td>
&lt;td>TODO; 设置 proxy-intercept-errors&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/default-backend]&lt;/td>
&lt;td>TODO；访问该ingress如果后端没有活跃地址，则转发至同空间下配置的服务名, 优先级高于全局配置&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/enable-cors]&lt;/td>
&lt;td>TODO; 开启跨域&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/force-ssl-redirect]&lt;/td>
&lt;td>TODO; 如果该ingress开启ssl，是否强制跳转http，通过http状态码308&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/ssl-redirect]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/from-to-www-redirect]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/permanent-redirect]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/permanent-redirect-code]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/temporal-redirect]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/preserve-trailing-slash]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/enable-rewrite-log] TODO; 是否开启rewrite日志，默认为关闭&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/rewrite-target]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/http2-push-preload]&lt;/td>
&lt;td>TODO; HTTP2推送预加载&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/limit-connections]&lt;/td>
&lt;td>TODO; 请求限制&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/proxy-body-size]&lt;/td>
&lt;td>TODO; 代理配置&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/upstream-hash-by]&lt;/td>
&lt;td>TODO; 代理后段算法&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/load-balance]&lt;/td>
&lt;td>TODO; 代理后段算法&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/satisfy]&lt;/td>
&lt;td>TODO; 不清楚用途&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/server-alias]&lt;/td>
&lt;td>TODO; 设置别名，不能冲突&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/ssl-passthrough]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/x-forwarded-prefix]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/upstream-vhost]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/enable-access-log]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/enable-opentracing]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/opentracing-trust-incoming-span]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/enable-influxdb]&lt;/td>
&lt;td>写入性能数据至influxdb，在k8s上使用prometheus，这个不建议开启&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/influxdb-measurement]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/influxdb-port]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/influxdb-host]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/influxdb-server-name]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/use-regex]&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/enable-modsecurity]&lt;/td>
&lt;td>开启modsecurity，仅在专用集群使用，业务集群不开启 ｜ - ｜ - ｜&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/enable-owasp-core-rules]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/modsecurity-transaction-id]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/modsecurity-snippet]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/mirror-request-body]&lt;/td>
&lt;td>TODO；镜像&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/mirror-target]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>[nginx.ingress.kubernetes.io/mirror-host]&lt;/td>
&lt;td>同上&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="命令行参数">命令行参数&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>名称&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>默认值&lt;/th>
&lt;th>原始HELP&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>add_dir_header&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>If true, adds the file directory to the header of the log messages&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>alsologtostderr&lt;/td>
&lt;td>错误输出终端，同时写入也文件&lt;/td>
&lt;td>-&lt;/td>
&lt;td>log to standard error as well as files (no effect when -logtostderr=true)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>annotations-prefix&lt;/td>
&lt;td>ingress使用注解的标签前缀&lt;/td>
&lt;td>nginx.ingress.kubernetes.io&lt;/td>
&lt;td>Prefix of the Ingress annotations specific to the NGINX controller. (default &amp;ldquo;nginx.ingress.kubernetes.io&amp;rdquo;)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>apiserver-host&lt;/td>
&lt;td>连接的api server地址&lt;/td>
&lt;td>kubernetes.default.svc&lt;/td>
&lt;td>Takes the form &amp;ldquo;protocol://address:port&amp;rdquo;. If not specified, it is assumed the program runs inside a Kubernetes cluster and local discovery is attempted.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>certificate-authority&lt;/td>
&lt;td>ca证书，验证api server的https&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Path to a cert file for the certificate authority. This certificate is used only when the flag &amp;ndash;apiserver-host is specified.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>configmap&lt;/td>
&lt;td>用于控制器全局的ConfigMap配置名&lt;/td>
&lt;td>nginx-configuration&lt;/td>
&lt;td>Name of the ConfigMap containing custom global configurations for the controller.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>controller-class&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>k8s.io/ingress-nginx&lt;/td>
&lt;td>Ingress Class Controller value this Ingress satisfies. The class of an Ingress object is set using the field IngressClassName in Kubernetes clusters version v1.19.0 or higher. The .spec.controller value of the IngressClass referenced in an Ingress Object should be the same value specified here to make this object be watched.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>deep-inspect&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Enables ingress object security deep inspector (default true)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>default-backend-service&lt;/td>
&lt;td>处理查询到的主机，流量转发的后段服务&lt;/td>
&lt;td>$(POD_NAMESPACE)/ingress-nginx-defaultbackend&lt;/td>
&lt;td>Service used to serve HTTP requests not matching any known server name (catch-all). Takes the form &amp;ldquo;namespace/name&amp;rdquo;. The controller configures NGINX to forward requests to the first port of this Service.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>default-server-port&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>8181&lt;/td>
&lt;td>Port to use for exposing the default server (catch-all).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>default-ssl-certificate&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Secret containing a SSL certificate to be used by the default HTTPS server&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>disable-catch-all&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Disable support for catch-all Ingresses&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>disable-full-test&lt;/td>
&lt;td>TODO；默认开启&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Disable full test of all merged ingresses at the admission stage and tests the template of the ingress being created or updated&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>disable-svc-external-name&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Disable support for Services of type ExternalName&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>dynamic-configuration-retries&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>15&lt;/td>
&lt;td>Number of times to retry failed dynamic configuration before failing to sync an ingress.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>election-id&lt;/td>
&lt;td>解决多副本同时更新状态，使用的选举id锁&lt;/td>
&lt;td>ingress-controller-leader&lt;/td>
&lt;td>Election id to use for Ingress status updates.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-metrics&lt;/td>
&lt;td>开启nginx的prometheus类型性能指标，影响性能，高并发下可以考虑关闭&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Enables the collection of NGINX metrics&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-ssl-chain-completion&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Autocomplete SSL certificate chains with missing intermediate CA certificates. Certificates uploaded to Kubernetes must have the &amp;ldquo;Authority Information Access&amp;rdquo; X.509 v3 extension for this to succeed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-ssl-passthrough&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Enable SSL Passthrough.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>health-check-path&lt;/td>
&lt;td>健康检测的url地址&lt;/td>
&lt;td>/healthz&lt;/td>
&lt;td>URL path of the health check endpoint. Configured inside the NGINX status server. All requests received on the port defined by the healthz-port parameter are forwarded internally to this path.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>health-check-timeout&lt;/td>
&lt;td>健康检测超时时间，秒&lt;/td>
&lt;td>10&lt;/td>
&lt;td>Time limit, in seconds, for a probe to health-check-path to succeed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>healthz-host&lt;/td>
&lt;td>健康检测主机地址&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Address to bind the healthz endpoint.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>healthz-port&lt;/td>
&lt;td>健康检测端口&lt;/td>
&lt;td>10254&lt;/td>
&lt;td>Port to use for the healthz endpoint.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>http-port&lt;/td>
&lt;td>接收http协议流量的端口&lt;/td>
&lt;td>80&lt;/td>
&lt;td>Port to use for servicing HTTP traffic.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>https-port&lt;/td>
&lt;td>接收https协议流量的端口&lt;/td>
&lt;td>80&lt;/td>
&lt;td>Port to use for servicing HTTPS traffic.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ingress-class&lt;/td>
&lt;td>已被废弃；TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Name of the ingress class this controller satisfies. The class of an Ingress object is set using the annotation &amp;ldquo;kubernetes.io/ingress.class&amp;rdquo;. The parameter &amp;ndash;controller-class has precedence over this.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ingress-class-by-name&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Define if Ingress Controller should watch for Ingress Class by Name together with Controller Class&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>internal-logger-address&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>127.0.0.1:11514&lt;/td>
&lt;td>Address to be used when binding internal syslogger&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>kubeconfig&lt;/td>
&lt;td>连接api server的信息&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Path to a kubeconfig file containing authorization and API server information.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>length-buckets&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Set of buckets which will be used for prometheus histogram metrics such as RequestLength, ResponseLength. ([10.000000,20.000000,30.000000,40.000000,50.000000,60.000000,70.000000,80.000000,90.000000,100.000000])&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>log_backtrace_at&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>0&lt;/td>
&lt;td>when logging hits line file:N, emit a stack trace&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>log_dir&lt;/td>
&lt;td>日志目录&lt;/td>
&lt;td>-&lt;/td>
&lt;td>If non-empty, write log files in this directory (no effect when -logtostderr=true)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>log_file&lt;/td>
&lt;td>日志文件名&lt;/td>
&lt;td>-&lt;/td>
&lt;td>If non-empty, use this log file (no effect when -logtostderr=true)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>log_file_max_size&lt;/td>
&lt;td>日志文件最大值，单位：MB&lt;/td>
&lt;td>1800MB&lt;/td>
&lt;td>Defines the maximum size a log file can grow to (no effect when -logtostderr=true). Unit is megabytes. If the value is 0, the maximum file size is unlimited.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>logtostderr&lt;/td>
&lt;td>日志输出到终端&lt;/td>
&lt;td>true&lt;/td>
&lt;td>log to standard error instead of files&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>maxmind-edition-ids&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Maxmind edition ids to download GeoLite2 Databases. (default &amp;ldquo;GeoLite2-City,GeoLite2-ASN&amp;rdquo;)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>maxmind-license-key&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Maxmind license key to download GeoLite2 Databases.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>maxmind-mirror&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Maxmind mirror url (example: &lt;a href="http://geoip.local/databases">http://geoip.local/databases&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>maxmind-retries-count&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>1&lt;/td>
&lt;td>Number of attempts to download the GeoIP DB.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>maxmind-retries-timeout&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>0s&lt;/td>
&lt;td>Maxmind downloading delay between 1st and 2nd attempt, 0s - do not retry to download if something went wrong.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>metrics-per-host&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Export metrics per-host&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>monitor-max-batch-size&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>10000&lt;/td>
&lt;td>Max batch size of NGINX metrics&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>one_output&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>If true, only write logs to their native severity level&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>post-shutdown-grace-period&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>10&lt;/td>
&lt;td>Seconds to wait after the nginx process has stopped before controller exits.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>profiler-port&lt;/td>
&lt;td>控制器对外提供的profiler端口地址&lt;/td>
&lt;td>10245&lt;/td>
&lt;td>Port to use for expose the ingress controller Go profiler when it is enabled.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>profiling&lt;/td>
&lt;td>是否开启pprof&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Enable profiling via web interface host:port/debug/pprof/&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>publish-service&lt;/td>
&lt;td>各个 ingress.status 的 Address 地址，监听命名空间下服务，格式为：&amp;ldquo;namespace/name&amp;rdquo;，一般仅在公有云环境使用&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Service fronting the Ingress controller. Takes the form &amp;ldquo;namespace/name&amp;rdquo;. When used together with update-status, the controller mirrors the address of this service&amp;rsquo;s endpoints to the load-balancer status of all Ingress objects it satisfies.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>publish-status-address&lt;/td>
&lt;td>功能同&amp;quot;publish-service&amp;quot;，有人工预先分配&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Customized address (or addresses, separated by comma) to set as the load-balancer status of Ingress objects this controller satisfies. Requires the update-status parameter.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>report-node-internal-ip-address&lt;/td>
&lt;td>功能同&amp;quot;publish-service&amp;quot;，使用当前 controler 部署节点的IP，一般在私有云使用&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Set the load-balancer status of Ingress objects to internal Node addresses instead of external.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>report-status-classes&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Use status classes (2xx, 3xx, 4xx and 5xx) instead of status codes in metrics&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>shutdown-grace-period&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Seconds to wait after receiving the shutdown signal, before stopping the nginx process.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>size-buckets&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Set of buckets which will be used for prometheus histogram metrics such as BytesSent (default [10.000000,100.000000,1000.000000,10000.000000,100000.000000,1000000.000000,10000000.000000])&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>skip_headers&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>If true, avoid header prefixes in the log messages&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>skip_log_headers&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>If true, avoid headers when opening log files (no effect when -logtostderr=true)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ssl-passthrough-proxy-port&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>442&lt;/td>
&lt;td>Port to use internally for SSL Passthrough.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>status-port&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>10246&lt;/td>
&lt;td>Port to use for the lua HTTP endpoint configuration.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>status-update-interval&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>60&lt;/td>
&lt;td>Time interval in seconds in which the status should check if an update is required. Default is 60 seconds&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>stderrthreshold&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>2&lt;/td>
&lt;td>logs at or above this threshold go to stderr when writing to files and stderr (no effect when -logtostderr=true or -alsologtostderr=false)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>stream-port&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>10247&lt;/td>
&lt;td>Port to use for the lua TCP/UDP endpoint configuration.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>sync-period&lt;/td>
&lt;td>TODO；默认关闭&lt;/td>
&lt;td>-&lt;/td>
&lt;td>Period at which the controller forces the repopulation of its local object stores.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>sync-rate-limit&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>0.3&lt;/td>
&lt;td>Define the sync frequency upper limit&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>tcp-services-configmap&lt;/td>
&lt;td>nginx stream tcp代理&lt;/td>
&lt;td>tcp-services&lt;/td>
&lt;td>Name of the ConfigMap containing the definition of the TCP services to expose. The key in the map indicates the external port to be used. The value is a reference to a Service in the form &amp;ldquo;namespace/name:port&amp;rdquo;, where &amp;ldquo;port&amp;rdquo; can either be a port number or name.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>time-buckets&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Set of buckets which will be used for prometheus histogram metrics such as RequestTime, ResponseTime (default [0.005000,0.010000,0.025000,0.050000,0.100000,0.250000,0.500000,1.000000,2.500000,5.000000,10.000000])&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>udp-services-configmap&lt;/td>
&lt;td>nginx stream udp代理&lt;/td>
&lt;td>udp-services&lt;/td>
&lt;td>Name of the ConfigMap containing the definition of the UDP services to expose. The key in the map indicates the external port to be used. The value is a reference to a Service in the form &amp;ldquo;namespace/name:port&amp;rdquo;, where &amp;ldquo;port&amp;rdquo; can either be a port name or number.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>update-status&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Update the load-balancer status of Ingress objects this controller satisfies. Requires setting the publish-service parameter to a valid Service reference.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>update-status-on-shutdown&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Update the load-balancer status of Ingress objects when the controller shuts down. Requires the update-status parameter.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>v&lt;/td>
&lt;td>日志级别&lt;/td>
&lt;td>-&lt;/td>
&lt;td>number for the log level verbosity&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>validating-webhook&lt;/td>
&lt;td>准入控制器验证ingress的配置&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>The address to start an admission controller on to validate incoming ingresses. Takes the form &amp;ldquo;&lt;host>:port&amp;rdquo;. If not provided, no admission controller is started.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>validating-webhook-certificate&lt;/td>
&lt;td>准入控制器的证书&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>The path of the validating webhook certificate PEM.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>validating-webhook-key&lt;/td>
&lt;td>准入控制器的证书&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>The path of the validating webhook key PEM.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>vmodule&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>comma-separated list of pattern=N settings for file-filtered logging&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>watch-ingress-without-class&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Define if Ingress Controller should also watch for Ingresses without an IngressClass or the annotation specified&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>watch-namespace&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Namespace the controller watches for updates to Kubernetes objects. This includes Ingresses, Services and all configuration resources. All namespaces are watched if this parameter is left empty.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>watch-namespace-selector&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>TODO&lt;/td>
&lt;td>Selector selects namespaces the controller watches for updates to Kubernetes objects.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="configmap-配置参数">ConfigMap 配置参数&lt;/h3>
&lt;p>可以通过这个定制 &lt;code>nginx.conf&lt;/code> 文件内容，里面填写的键值对对照数据结构 &lt;code>config.go&lt;/code> 配置，由于 &amp;ldquo;ConfigMap&amp;rdquo; 里面只能是 &lt;code>string&lt;/code> 类型，所以任何值需使用引号包含起来，如：&lt;code>&amp;quot;128&amp;quot;&lt;/code>。如果是数组类型，则通过逗号分隔，如：&lt;code>&amp;quot;192.168.30.0/24, 192.168.31.0/24&amp;quot;&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kind: ConfigMap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: nginx-configuration
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access-log-path: &lt;span style="color:#4e9a06">&amp;#34;/var/log/nginx/access.log&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error-log-path: &lt;span style="color:#4e9a06">&amp;#34;/var/log/nginx/error.log&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>名称&lt;/th>
&lt;th>默认值&lt;/th>
&lt;th>可取值&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>allow-backend-server-header&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>是否以后端返回的 &amp;ldquo;Server&amp;rdquo; 响应头来代替nginx ingress的值&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>allow-snippet-annotations&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo; or &amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>开启ingress配置 *-snippet 更改 nginx.conf 内容，如果用户不可信则不开放&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>annotation-value-word-blocklist&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>字符串数组，见建议值&lt;/td>
&lt;td>定义哪些关键字不能提供给用户配置 annotation 使用，有安全风险&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>hide-headers&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>字符串数组&lt;/td>
&lt;td>定义哪些请求头不返回给客户端&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>access-log-params&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>access_log&lt;/td>
&lt;td>nginx access_log 额外的一些参数&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>access-log-path&lt;/td>
&lt;td>&amp;ldquo;/var/log/nginx/access.log&amp;rdquo; 指向 &amp;ldquo;/dev/stdout&amp;rdquo;&lt;/td>
&lt;td>http 与 stream 共同使用&lt;/td>
&lt;td>客户端访问日志&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>http-access-log-path&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>http 访问日志，优先级高&lt;/td>
&lt;td>http 访问日志&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>stream-access-log-path&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>stream 访问日志，优先级高&lt;/td>
&lt;td>http 访问日志&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-access-log-for-default-backend&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>是否开启未匹配后端ingress的请求日志记录&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>error-log-path&lt;/td>
&lt;td>&amp;ldquo;/var/log/nginx/error.log&amp;rdquo; 指向 &amp;ldquo;/dev/stderr&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>nginx 错误日志&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-modsecurity&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>是否开启 modsecurity 功能&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-owasp-modsecurity-crs&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>同上&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>modsecurity-snippet&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO; 同上&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>client-header-buffer-size&lt;/td>
&lt;td>&amp;ldquo;1k&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>客户端请求header缓存大小&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>client-header-timeout&lt;/td>
&lt;td>&amp;ldquo;60&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>client-body-buffer-size&lt;/td>
&lt;td>&amp;ldquo;8k&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>client-body-timeout&lt;/td>
&lt;td>&amp;ldquo;60&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>disable-access-log&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>是否关闭请求日志&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>disable-ipv6&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>是否关闭ipv6监听&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>disable-ipv6-dns&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>关闭nginx对ipv6的解析&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-underscores-in-headers&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>客户端提交下划线&amp;quot;_&amp;ldquo;的请求头是否忽略，不做传递至后端&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-ocsp&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ignore-invalid-headers&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>忽略异常请求头&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>retry-non-idempotent&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>对非幂等的请求（POST、LOCK、PATCH），如果后端错误将不进行重试&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>error-log-level&lt;/td>
&lt;td>&amp;ldquo;notice&amp;rdquo;&lt;/td>
&lt;td>见nginx error_log&lt;/td>
&lt;td>错误日志级别&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>hsts&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>告诉浏览器必须使用https进行访问&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>hsts-include-subdomains&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>hsts-max-age&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>hsts-preload&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>keep-alive&lt;/td>
&lt;td>&amp;ldquo;75&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;rdquo;&lt;/td>
&lt;td>客户端与服务端保持连接时长，避免频繁建立tcp，设置为0则关闭&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>keep-alive-requests&lt;/td>
&lt;td>&amp;ldquo;100&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>large-client-header-buffers&lt;/td>
&lt;td>&amp;ldquo;4 8k&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>log-format-escape-json&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>如果日志以json格式输出，则对一些格式进行转换&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>log-format-upstream&lt;/td>
&lt;td>见日志格式默认值&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>客户端请求日志格式&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>log-format-stream&lt;/td>
&lt;td>见stream日志格式默认值&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>客户端请求日志格式&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-multi-accept&lt;/td>
&lt;td>&amp;ldquo;treu&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>max-worker-connections&lt;/td>
&lt;td>&amp;ldquo;16384&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>max-worker-open-files&lt;/td>
&lt;td>&amp;ldquo;0&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>map-hash-bucket-size&lt;/td>
&lt;td>&amp;ldquo;64&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy-real-ip-cidr&lt;/td>
&lt;td>&amp;ldquo;0.0.0.0/0&amp;rdquo;&lt;/td>
&lt;td>字符串数组&lt;/td>
&lt;td>配置proxy中间层地址并过滤, 用于获取真实客户端IP&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy-set-headers&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>自定义传输后段的请求头&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>server-name-hash-max-size&lt;/td>
&lt;td>&amp;ldquo;1024&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>server-name-hash-bucket-size&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy-headers-hash-max-size&lt;/td>
&lt;td>&amp;ldquo;512&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy-headers-hash-bucket-size&lt;/td>
&lt;td>&amp;ldquo;64&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>reuse-port&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>plugins&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>server-tokens&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>是否返回客户端nginx的版本&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>use-proxy-protocol&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>是否使用 PROXY 协议，可以获取客户端IP&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy-protocol-header-timeout&lt;/td>
&lt;td>&amp;ldquo;5s&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>use-gzip&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>针对 HTTP 响应是否开启 gzip 压缩&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gzip-level&lt;/td>
&lt;td>&amp;ldquo;1&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>gzip 压缩级别&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>use-geoip&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>开启 geoip&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>use-geoip2&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>开启 geoip&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>enable-brotli&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>使用 brotli 模块压缩&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>user-http2&lt;/td>
&lt;td>&amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>开启 http2 支持&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gzip-min-length&lt;/td>
&lt;td>&amp;ldquo;256&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>TODO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>gzip-types&lt;/td>
&lt;td>见gzip默认压缩类型&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>需要压缩的类型&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>worker-processes&lt;/td>
&lt;td>&amp;ldquo;auto&amp;rdquo;&lt;/td>
&lt;td>&amp;quot;&amp;quot;&lt;/td>
&lt;td>开启nginx的进程数，默认等于cpu核心数&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>load-balance&lt;/td>
&lt;td>&amp;ldquo;round_robin&amp;rdquo;&lt;/td>
&lt;td>&amp;ldquo;round_robin&amp;rdquo; or &amp;ldquo;ewma&amp;rdquo;&lt;/td>
&lt;td>TODO;&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>upstream-keepalive-connections&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;td>-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy-read-timeout&lt;/td>
&lt;td>60s&lt;/td>
&lt;td>x&lt;/td>
&lt;td>proxy读取等待后端响应体返回的最大时间&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy-next-upstream-tries&lt;/td>
&lt;td>3&lt;/td>
&lt;td>x&lt;/td>
&lt;td>proxy读取、发送后端如果超时，重试的次数&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>compute-full-forwarded-for&lt;/td>
&lt;td>false&lt;/td>
&lt;td>&amp;ldquo;true&amp;rdquo; or &amp;ldquo;false&amp;rdquo;&lt;/td>
&lt;td>将 remote address 附加到 X-Forwarded-For,新增X-Original-Forwarded-For 记录旧值，一般用于解决 xff 伪造&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>ingress关闭建议值&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#34;load_module,lua_package,_by_lua,location,root,proxy_pass,serviceaccount,{,},&amp;#39;,\&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>日志格式默认值&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">$remote_addr&lt;/span> - &lt;span style="color:#000">$remote_user&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#000">$time_local&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$request&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> &lt;span style="color:#000">$status&lt;/span> &lt;span style="color:#000">$body_bytes_sent&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$http_referer&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$http_user_agent&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> &lt;span style="color:#000">$request_length&lt;/span> &lt;span style="color:#000">$request_time&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#000">$proxy_upstream_name&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#000">$proxy_alternative_upstream_name&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> &lt;span style="color:#000">$upstream_addr&lt;/span> &lt;span style="color:#000">$upstream_response_length&lt;/span> &lt;span style="color:#000">$upstream_response_time&lt;/span> &lt;span style="color:#000">$upstream_status&lt;/span> &lt;span style="color:#000">$req_id&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>stream日志格式默认值&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#000">$time_local&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> &lt;span style="color:#000">$protocol&lt;/span> &lt;span style="color:#000">$status&lt;/span> &lt;span style="color:#000">$bytes_sent&lt;/span> &lt;span style="color:#000">$bytes_received&lt;/span> &lt;span style="color:#000">$session_time&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>gzip默认压缩类型&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>application/atom+xml application/javascript application/x-javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/svg+xml image/x-icon text/css text/plain text/x-component
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="各个配置例子">各个配置例子&lt;/h2>
&lt;p>有三种方式可以自定义你的Ingress Nginx：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>通过ConfigMap&lt;/p>
&lt;p>更改全局的ConfigMap配置&amp;quot;nginx-configuration&amp;quot;，默认由参数&amp;quot;&amp;ndash;configmap&amp;quot;控制。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>通过Annotations&lt;/p>
&lt;p>通过各个ingress的配置文件添加特定注解，控制各自的行为，注解前缀由&amp;quot;&amp;ndash;annotations-prefix&amp;quot;控制。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>自定义 nginx.tmpl 模版&lt;/p>
&lt;p>如果以上两种方式还无法满足需要，可以通过更改nginx.conf的模版文件。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="自定义nginx模版">自定义Nginx模版&lt;/h3>
&lt;ul>
&lt;li>拷贝ingress-nginx镜像内的模版内容&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>/etc/nginx/template/nginx.tmpl
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>以nginx.tmpl创建ConfigMap资源&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: ConfigMap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: nginx-template
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> namespace: kube-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.tmpl: &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> . &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$servers&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .Servers &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .Cfg &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$IsIPV6Enabled&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .IsIPV6Enabled &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$healthzURI&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .HealthzURI &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$backends&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .Backends &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxyHeaders&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .ProxySetHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$addHeaders&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .AddHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Configuration checksum: {{ $all.Cfg.Checksum }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>在Deployment或DaemonSet中加入模版&lt;/li>
&lt;/ul>
&lt;p>把官方镜像里的nginx.tmpl模版文件拷贝更改，并创建为ConfigMap资源挂载覆盖默认模版。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span> volumeMounts:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - name: nginx-template
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mountPath: /etc/nginx/template
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> readOnly: &lt;span style="color:#204a87">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> volumes:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - name: nginx-template
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> configMap:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: nginx-template
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="代理tcp与udp流量">代理TCP与UDP流量&lt;/h3>
&lt;p>ingres是不包含tcp、udp这块流量规范，这里是ingress-nginx添加的功能。&lt;/p>
&lt;ul>
&lt;li>创建tcp服务使用的ConfigMap&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>监听的cm名称由&lt;code>--tcp-services-configmap&lt;/code>参数决定&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kind: ConfigMap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: tcp-services
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;1053&amp;#34;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#34;kube-system/kube-dns:53&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>开启1053端口，转发流量至&amp;quot;kube-system&amp;quot;命名空间下service为&amp;quot;kube-dns&amp;quot;的53端口。&lt;/p>
&lt;ul>
&lt;li>在ingress-nginx自动生成的配置&lt;/li>
&lt;/ul>
&lt;p>/etc/nginx/nginx.conf&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>stream &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> preread_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.var.proxy_upstream_name&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;tcp-kube-system-kube-dns-53&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen 1053&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_timeout 600s&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_timeout 600s&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_tries 3&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass upstream_balancer&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="app-root">app-root&lt;/h3>
&lt;ul>
&lt;li>ingress配置&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: networking.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/app-root: &lt;span style="color:#4e9a06">&amp;#34;/test&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>nginx.tmpl模版&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.Rewrite.AppRoot&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$uri&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> /&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">302&lt;/span> &lt;span style="color:#000">$scheme&lt;/span>://&lt;span style="color:#000">$http_host&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Rewrite.AppRoot &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>nginx.conf生成内容&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$uri&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> /&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">302&lt;/span> &lt;span style="color:#000">$scheme&lt;/span>://&lt;span style="color:#000">$http_host&lt;/span>/test&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="affinity">affinity&lt;/h3>
&lt;ul>
&lt;li>ingress配置&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: networking.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/affinity: &lt;span style="color:#4e9a06">&amp;#34;cookie&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/session-cookie-name: &lt;span style="color:#4e9a06">&amp;#34;HELLO&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>curl测试&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&amp;lt; HTTP/1.1 &lt;span style="color:#0000cf;font-weight:bold">200&lt;/span> OK
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt; Date: Mon, &lt;span style="color:#0000cf;font-weight:bold">12&lt;/span> Sep &lt;span style="color:#0000cf;font-weight:bold">2022&lt;/span> 14:05:36 GMT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt; Content-Type: text/html
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt; Content-Length: &lt;span style="color:#0000cf;font-weight:bold">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt; Connection: keep-alive
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt; Set-Cookie: &lt;span style="color:#000">HELLO&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>1662991537.226.193.550764&lt;span style="color:#000;font-weight:bold">|&lt;/span>a6b1ec86db225f232b62b29085af45ff&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#000">Path&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/&lt;span style="color:#000;font-weight:bold">;&lt;/span> HttpOnly
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt; Last-Modified: Mon, &lt;span style="color:#0000cf;font-weight:bold">11&lt;/span> Dec &lt;span style="color:#0000cf;font-weight:bold">2017&lt;/span> 03:18:39 GMT
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>具体逻辑由&amp;quot;rootfs/etc/nginx/lua/balancer/sticky.lua&amp;quot;实现。&lt;/p>
&lt;h3 id="auth">auth&lt;/h3>
&lt;ul>
&lt;li>创建用户与密码文件&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>htpasswd -c http-auth.txt user1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 用户: user1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 密码: kubernetes&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>user1:&lt;span style="color:#000">$apr1$ue3Fu891$xnyqlJlwcM4iWtJrAN8ZW&lt;/span>/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>把 http-auth.txt 转化为 k8s secret 资源&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>cat http-auth.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当&amp;quot;nginx.ingress.kubernetes.io/auth-secret-type&amp;quot;为&amp;quot;auth-file&amp;quot;时，替换&amp;quot;auth&amp;quot;对应的值&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Secret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: basic-auth
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>stringData:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth: &lt;span style="color:#000">dXNlcjE6JGFwcjEkdWUzRnU4OTEkeG55cWxKbHdjTTRpV3RKckFOOFpXLwo&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type: Opaque
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>当&amp;quot;nginx.ingress.kubernetes.io/auth-secret-type&amp;quot;为&amp;quot;auth-map&amp;quot;时，替换下面&amp;quot;user1&amp;quot;行&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Secret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: basic-auth
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>stringData:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> user1: &lt;span style="color:#000">$apr1$ue3Fu891$xnyqlJlwcM4iWtJrAN8ZW&lt;/span>/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type: Opaque
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>这里注意&amp;quot;secret&amp;quot;中的内容格式由&amp;quot;nginx.ingress.kubernetes.io/auth-secret-type&amp;quot;确定&amp;quot;。&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;/blockquote>
&lt;h3 id="canary">canary&lt;/h3>
&lt;ul>
&lt;li>基于 HTTP 请求头&lt;/li>
&lt;/ul>
&lt;p>当仅设置 &lt;code>nginx.ingress.kubernetes.io/canary-by-header&lt;/code> 请求头时，对应的值可取 &amp;ldquo;always&amp;rdquo; 或 &amp;ldquo;never&amp;rdquo; 分别表示流量至该副本或关闭。&lt;/p>
&lt;p>如果需要自定义默认的 &amp;ldquo;always&amp;rdquo; 与 &amp;ldquo;never&amp;rdquo; 值，需在定义 &lt;code>nginx.ingress.kubernetes.io/canary-by-header-value&lt;/code> 内容，然后请求匹配值才会调度。&lt;/p>
&lt;h3 id="日志格式">日志格式&lt;/h3>
&lt;p>json日志&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>log-format-escape-json: &lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>log-format-upstream: &lt;span style="color:#4e9a06">&amp;#39;{&amp;#34;msec&amp;#34;: &amp;#34;$msec&amp;#34;, &amp;#34;remote_addr&amp;#34;: &amp;#34;$remote_addr&amp;#34;, &amp;#34;request_length&amp;#34;: $request_length, &amp;#34;request_method&amp;#34;: &amp;#34;$request_method&amp;#34;, &amp;#34;host&amp;#34;: &amp;#34;$host&amp;#34;, &amp;#34;request_uri&amp;#34;: &amp;#34;$request_uri&amp;#34;, &amp;#34;server_name&amp;#34;: &amp;#34;$server_name&amp;#34;, &amp;#34;server_addr&amp;#34;: &amp;#34;$server_addr&amp;#34;, &amp;#34;server_port&amp;#34;: $server_port, &amp;#34;uri&amp;#34;: &amp;#34;$uri&amp;#34;, &amp;#34;args&amp;#34;: &amp;#34;$args&amp;#34;, &amp;#34;server_protocol&amp;#34;: &amp;#34;$server_protocol&amp;#34;, &amp;#34;bytes_sent&amp;#34;: $bytes_sent, &amp;#34;body_bytes_sent&amp;#34;: $body_bytes_sent, &amp;#34;status&amp;#34;: $status, &amp;#34;request_time&amp;#34;: $request_time, &amp;#34;http_referer&amp;#34;: &amp;#34;$http_referer&amp;#34;, &amp;#34;http_user_agent&amp;#34;: &amp;#34;$http_user_agent&amp;#34;, &amp;#34;http_x_tr_user_id&amp;#34;: &amp;#34;$http_x_tr_user_id&amp;#34;, &amp;#34;http_x_tr_pv_id&amp;#34;: &amp;#34;$http_x_tr_pv_id&amp;#34;, &amp;#34;http_x_tr_request_id&amp;#34;: &amp;#34;$req_id&amp;#34;, &amp;#34;http_x_tr_rpc_id&amp;#34;: &amp;#34;$http_x_tr_rpc_id&amp;#34;, &amp;#34;proxy_upstream_name&amp;#34;: &amp;#34;$proxy_upstream_name&amp;#34;, &amp;#34;upstream_addr&amp;#34;: &amp;#34;$upstream_addr&amp;#34;, &amp;#34;upstream_response_length&amp;#34;: &amp;#34;$upstream_response_length&amp;#34;, &amp;#34;upstream_response_time&amp;#34;: &amp;#34;$upstream_response_time&amp;#34;, &amp;#34;upstream_status&amp;#34;: &amp;#34;$upstream_status&amp;#34;}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="客户端通过snippet自定义nginxconf配置">客户端通过snippet自定义nginx.conf配置&lt;/h3>
&lt;p>客户端是指通过在ingress中编写annotations可以很灵活的自定义nginx.conf配置，如果是不可信用户则相当危险。&lt;/p>
&lt;p>功能开启或关闭是在 &amp;ldquo;nginx-configuration&amp;rdquo; 的configmap配置，&amp;ldquo;true&amp;quot;是开启状态：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kind: ConfigMap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: nginx-configuration
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> allow-snippet-annotations: &lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>可以通过以下几种注解分别自定义不同的配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>nginx.ingress.kubernetes.io/configuration-snippet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>nginx.ingress.kubernetes.io/server-snippet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>nginx.ingress.kubernetes.io/stream-snippet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>nginx.ingress.kubernetes.io/modsecurity-snippet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>在各 &amp;ldquo;server&amp;rdquo; 下 &amp;ldquo;location&amp;rdquo; 自定义配置&lt;/li>
&lt;/ul>
&lt;p>ingress注解&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: networking.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/configuration-snippet: &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#34;x-tr-request-id: &lt;/span>&lt;span style="color:#000">$req_id&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>nginx.tmpl模版内容&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$path&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* Add any additional configuration defined */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ConfigurationSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>生成的内容&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location / &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#34;Request-Id: &lt;/span>&lt;span style="color:#000">$req_id&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>在各 &amp;ldquo;server&amp;rdquo; 下添加自定义配置&lt;/li>
&lt;/ul>
&lt;p>ingress注解&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: networking.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/server-snippet: &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$agentflag&lt;/span> 0&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$http_user_agent&lt;/span> ~* &lt;span style="color:#4e9a06">&amp;#34;(Mobile)&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">){&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$agentflag&lt;/span> 1&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span> &lt;span style="color:#000">$agentflag&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">301&lt;/span> https://m.a-demo-web.site&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>nginx.tmpl模版内容&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.ServerSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured in the configuration configmap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ServerSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>生成的nginx.conf&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured for host api.a-demo-web.site&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$agentflag&lt;/span> 0&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$http_user_agent&lt;/span> ~* &lt;span style="color:#4e9a06">&amp;#34;(Mobile)&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">){&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$agentflag&lt;/span> 1&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span> &lt;span style="color:#000">$agentflag&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">301&lt;/span> https://m.a-demo-web.site&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>在各 &amp;ldquo;stream&amp;rdquo; 下添加自定义配置&lt;/li>
&lt;/ul>
&lt;p>ingress注解&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: networking.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/stream-snippet: &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen 8000&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass 127.0.0.1:80&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>nginx.tmpl模版内容&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>stream &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># TCP services&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$tcpServer&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .TCPBackends &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ....
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># UDP services&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$udpServer&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .UDPBackends &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ....
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Stream Snippets&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$snippet&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .StreamSnippets &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$snippet&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>在开启 &amp;ldquo;auth-url&amp;rdquo; 下添加自定义配置&lt;/li>
&lt;/ul>
&lt;p>ingress注解&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: networking.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/auth-url: http://a-demo-web.site/external-auth
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/auth-snippet: &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Foo-Header 42&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>nginx.tmpl模版内容&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> internal&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$externalAuth&lt;/span>.AuthSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.AuthSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>在开启 &amp;ldquo;modsecurity&amp;rdquo; 下添加自定义配置&lt;/li>
&lt;/ul>
&lt;p>ingress注解&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: networking.k8s.io/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/enable-modsecurity: &lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/modsecurity-snippet: &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SecRuleEngine On
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> SecDebugLog /tmp/modsec_debug.log
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>nginx.tmpl模版内容&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$path&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildModSecurityForLocation &lt;span style="color:#000">$all&lt;/span>.Cfg &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 各各站点的配置生成&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># internal/ingress/controller/template/template.go&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>func buildModSecurityForLocation&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>cfg config.Configuration, location *ingress.Location&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> string &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> isMSEnabledInLoc :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> location.ModSecurity.Enable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> isMSEnableSetInLoc :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> location.ModSecurity.EnableSet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> isMSEnabled :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> cfg.EnableModsecurity
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> location.ModSecurity.Snippet !&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> buffer.WriteString&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>fmt.Sprintf&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">`&lt;/span>modsecurity_rules &lt;span style="color:#4e9a06">&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">%v
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">`&lt;/span>, location.ModSecurity.Snippet&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> buffer.String&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>生成的nginx.conf&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_alternative_upstream_name&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> modsecurity on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> modsecurity_rules &lt;span style="color:#4e9a06">&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> SecRuleEngine On
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> SecDebugLog /tmp/modsec_debug.log
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> &amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> client_max_body_size 20m&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="服务端通过snippet自定义nginxconf配置">服务端通过snippet自定义nginx.conf配置&lt;/h3>
&lt;p>服务端是通过&amp;quot;ingress-controller&amp;quot;启动参数&lt;code>--configmap=$(POD_NAMESPACE)/nginx-configuration&lt;/code>所关联的&amp;quot;ConfigMap&amp;quot;资源来实现。&lt;/p>
&lt;p>可以通过以下几种注解分别自定义不同的配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>main-snippet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http-snippet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>server-snippet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>stream-snippet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>location-snippet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>daemon off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># main-snippet&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.MainSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.MainSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>events &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># http-snippet&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.HTTPSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured in the configuration configmap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.HTTPSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 该模版内同样包含一个&amp;#34;server snippet&amp;#34;，由客户端通过注解提交&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 以下属于 {{ template &amp;#34;SERVER&amp;#34; serverConfig $all $server }} 内容&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.ServerSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured for host {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ServerSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$path&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># location-snippet&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$all&lt;/span>.Cfg.LocationSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured in the configuration configmap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.LocationSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 以上属于 {{ template &amp;#34;SERVER&amp;#34; serverConfig $all $server }} 内容&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># server-snippet&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.ServerSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured in the configuration configmap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ServerSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> template &lt;span style="color:#4e9a06">&amp;#34;CUSTOM_ERRORS&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>buildCustomErrorDeps &lt;span style="color:#4e9a06">&amp;#34;upstream-default-backend&amp;#34;&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.CustomHTTPErrors &lt;span style="color:#000">$all&lt;/span>.EnableMetrics &lt;span style="color:#000">$cfg&lt;/span>.EnableModsecurity&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>stream &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># stream-snippet&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 客户端通过ingress提交注解也在次&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Stream Snippets&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$snippet&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .StreamSnippets &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$snippet&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="监听的几个端口">监听的几个端口&lt;/h3>
&lt;ul>
&lt;li>启动监听的端口&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>端口&lt;/th>
&lt;th>协议&lt;/th>
&lt;th>参数&lt;/th>
&lt;th>用途描述&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>80&lt;/td>
&lt;td>http&lt;/td>
&lt;td>http-port&lt;/td>
&lt;td>xxx&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>443&lt;/td>
&lt;td>https&lt;/td>
&lt;td>https-port&lt;/td>
&lt;td>xx&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8181&lt;/td>
&lt;td>http&lt;/td>
&lt;td>default-server-port&lt;/td>
&lt;td>默认服务&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>442&lt;/td>
&lt;td>https&lt;/td>
&lt;td>ssl-passthrough-proxy-port&lt;/td>
&lt;td>xxx&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10254&lt;/td>
&lt;td>http&lt;/td>
&lt;td>healthz-port&lt;/td>
&lt;td>/metrics, /healthz&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10245&lt;/td>
&lt;td>http&lt;/td>
&lt;td>profiler-port&lt;/td>
&lt;td>仅可在 127.0.0.1 监听； /debug/pprof/&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10246&lt;/td>
&lt;td>http&lt;/td>
&lt;td>status-port&lt;/td>
&lt;td>仅可在 127.0.0.1 监听；/healthz, /is-dynamic-lb-initialized, /nginx_status, /configuration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10247&lt;/td>
&lt;td>tcp&lt;/td>
&lt;td>stream-port&lt;/td>
&lt;td>仅可在 127.0.0.1 监听；用于更新 tcp-services 与 udp-services 后端&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;pre tabindex="0">&lt;code>rp := []int{
n.cfg.ListenPorts.HTTP,
n.cfg.ListenPorts.HTTPS,
n.cfg.ListenPorts.SSLProxy,
n.cfg.ListenPorts.Health,
n.cfg.ListenPorts.Default,
nginx.ProfilerPort,
nginx.StatusPort,
nginx.StreamPort,
}
&lt;/code>&lt;/pre>&lt;ul>
&lt;li>default-server-port&lt;/li>
&lt;/ul>
&lt;p>在nginx.conf模版中实现&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># backend for when default-backend-service is not configured or it does not have endpoints&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#0000cf;font-weight:bold">8181&lt;/span> default_server reuseport &lt;span style="color:#000">backlog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>4096&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;internal&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location / &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 404&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>profiler-port&lt;/li>
&lt;/ul>
&lt;p>在go代码中实现&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">if&lt;/span> conf.EnableProfiling &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> go metrics.RegisterProfiler&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;127.0.0.1&amp;#34;&lt;/span>, nginx.ProfilerPort&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>status-port&lt;/li>
&lt;/ul>
&lt;p>在nginx.conf模版中实现&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># default server, used for NGINX healthcheck and access to nginx stats&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen 127.0.0.1:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> .StatusPort &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;internal&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive_timeout 0&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gzip off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$healthzURI&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 200&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location /is-dynamic-lb-initialized &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> .StatusPath &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stub_status on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location /configuration &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location / &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> content_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.exit&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ngx.HTTP_NOT_FOUND&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>stream-port&lt;/li>
&lt;/ul>
&lt;p>在go代码中实现&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>streams :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> make&lt;span style="color:#ce5c00;font-weight:bold">([]&lt;/span>ingress.Backend, 0&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">for&lt;/span> _, ep :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> range TCPEndpoints &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> var service *apiv1.Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> ep.Service !&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> nil &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">service&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>apiv1.Service&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>Spec: ep.Service.Spec&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> key :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> fmt.Sprintf&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;tcp-%v-%v-%v&amp;#34;&lt;/span>, ep.Backend.Namespace, ep.Backend.Name, ep.Backend.Port.String&lt;span style="color:#ce5c00;font-weight:bold">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">streams&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> append&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>streams, ingress.Backend&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Name: key,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Endpoints: ep.Endpoints,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Port: intstr.FromInt&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ep.Port&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Service: service,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">})&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">for&lt;/span> _, ep :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> range UDPEndpoints &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> var service *apiv1.Service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> ep.Service !&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> nil &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">service&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>apiv1.Service&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>Spec: ep.Service.Spec&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> key :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> fmt.Sprintf&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;udp-%v-%v-%v&amp;#34;&lt;/span>, ep.Backend.Namespace, ep.Backend.Name, ep.Backend.Port.String&lt;span style="color:#ce5c00;font-weight:bold">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">streams&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> append&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>streams, ingress.Backend&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Name: key,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Endpoints: ep.Endpoints,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Port: intstr.FromInt&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ep.Port&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Service: service,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">})&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>buf, err :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> json.Marshal&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>streams&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hostPort :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> net.JoinHostPort&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;127.0.0.1&amp;#34;&lt;/span>, fmt.Sprintf&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;%v&amp;#34;&lt;/span>, nginx.StreamPort&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>conn, err :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> net.Dial&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;tcp&amp;#34;&lt;/span>, hostPort&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>_, &lt;span style="color:#000">err&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> conn.Write&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>buf&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="配置404服务后端">配置404服务后端&lt;/h3>
&lt;p>如果请求域名未在集群中配置，则把流量返回至指定后端服务，比如官方默认的服务：&lt;/p>
&lt;blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>建议不要开启，当该后端服务不可用时，客户端需等待超时时间后才关闭，并以504返回；
客户等待的时间为：proxy-read-timeout * proxy-next-upstream-tries&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>kube-system/ingress-nginx-defaultbackend
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>镜像与代码&lt;/li>
&lt;/ul>
&lt;p>默认镜像&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>gcr.io/google-containers/defaultbackend:1.4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>源代码&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>https://github.com/kubernetes/ingress-gce/tree/master/cmd/404-server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;blockquote>
&lt;blockquote>
&lt;p>default backend 原始代码仓库为 ingress-nginx 之后被移到 ingress-gce 下面，&lt;a href="https://github.com/kubernetes/ingress-nginx/pull/3156">参考&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;/blockquote>
&lt;/blockquote>
&lt;ul>
&lt;li>controller 开启&lt;/li>
&lt;/ul>
&lt;p>在 /nginx-ingress-controller 添加 &lt;code>--default-backend-service&lt;/code> 参数指定 &lt;code>namespace&lt;/code> 下的 &lt;code>service&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>args:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- /nginx-ingress-controller
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- --default-backend-service&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>POD_NAMESPACE&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>/ingress-nginx-defaultbackend
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>响应示例：未配置任何404服务&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&amp;lt;html&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;404 Not Found&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;body&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;404 Not Found&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx&amp;lt;/center&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/body&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/html&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>响应示例：转发默认404服务&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>default backend - &lt;span style="color:#0000cf;font-weight:bold">404&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>响应示例：已配置404服务，但后端不可用&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&amp;lt;html&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;504 Gateway Time-out&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;body&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;504 Gateway Time-out&amp;lt;/h1&amp;gt;&amp;lt;/center&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;hr&amp;gt;&amp;lt;center&amp;gt;nginx&amp;lt;/center&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/body&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/html&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>需等待服务端配置的超时时间结束。&lt;/p>
&lt;h3 id="pod内核优化">POD内核优化&lt;/h3>
&lt;ul>
&lt;li>未调整前&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>/etc/nginx $ sysctl -a &lt;span style="color:#000;font-weight:bold">|&lt;/span> grep kernel.core_uses_pid
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kernel.core_uses_pid &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/etc/nginx $
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/etc/nginx $ sysctl -a &lt;span style="color:#000;font-weight:bold">|&lt;/span> grep net.core.somaxconn
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>net.core.somaxconn &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">4096&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/etc/nginx $
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/etc/nginx $ sysctl -a &lt;span style="color:#000;font-weight:bold">|&lt;/span> grep net.ipv4.ip_local_port_range
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>net.ipv4.ip_local_port_range &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> 32768 &lt;span style="color:#0000cf;font-weight:bold">60999&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/etc/nginx $ ^C
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="url重定向">URL重定向&lt;/h3>
&lt;ul>
&lt;li>需求&lt;/li>
&lt;/ul>
&lt;p>针对请求地址 &lt;code>api.a-demo-web.site/commons/cmdb/v1/host/search&lt;/code> 到后端需变更为 &lt;code>/host/search&lt;/code>，也就是移除前缀路径 &lt;code>/commons/cmdb/v1/&lt;/code>。&lt;/p>
&lt;ul>
&lt;li>实现&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>apiVersion: extensions/v1beta1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: Ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nginx.ingress.kubernetes.io/rewrite-target: &lt;span style="color:#4e9a06">&amp;#34;/&lt;/span>&lt;span style="color:#000">$1&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: commons-api
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ingressClassName: nginx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rules:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - host: api.a-demo-web.site
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> http:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> paths:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - path: /commons/cmdb/v1/&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>.*&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> backend:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> serviceName: commons-cmdb-v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> servicePort: &lt;span style="color:#0000cf;font-weight:bold">10080&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pathType: Prefix
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>主要添加 &amp;ldquo;rewrite-target&amp;rdquo; 注解，与 path 设置为正则，这里需注意下 ingress 的 &amp;ldquo;apiVersion&amp;rdquo;，不同版本间风格存在差异。&lt;/p>
&lt;h3 id="防止-xff-伪造">防止 xff 伪造&lt;/h3>
&lt;ul>
&lt;li>功能需求&lt;/li>
&lt;/ul>
&lt;p>客户端使用 &amp;ldquo;X-Forwarded-For&amp;rdquo; 自定了一些 ip 并提交了请求，此时服务端正常情况下会记录整个 ip 列表。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>curl -v -H &lt;span style="color:#4e9a06">&amp;#34;X-Forwarded-For: 1.1.1.1, 2.2.2.2&amp;#34;&lt;/span> https://www.baidu.com
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>服务端将会记录：&amp;ldquo;1.1.1.1, 2.2.2.2, 代理IP1, 代理IP2, &amp;hellip;&amp;hellip;&amp;quot;，此时希望能排除客户端自定的ip，期望为：&amp;ldquo;代理IP1, 代理IP2, &amp;hellip;&amp;hellip;&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>步骤实现&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>forwarded-for-header: &lt;span style="color:#4e9a06">&amp;#34;X-Forwarded-For&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>use-forwarded-headers: &lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>compute-full-forwarded-for: &lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>proxy-real-ip-cidr: &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>配置 &amp;ldquo;compute-full-forwarded-for&amp;rdquo; 值为 &amp;ldquo;true&amp;rdquo;，则在 ingress-nginx 这里会把当前 &amp;ldquo;X-Forwarded-For&amp;rdquo; 请求头的值拷贝并新增至 &amp;ldquo;X-Original-Forwarded-For&amp;rdquo;，同时重制 &amp;ldquo;X-Forwarded-For&amp;rdquo; 并把此时 nginx 认为的 remote addr 写入覆盖该头。&lt;/p>
&lt;ul>
&lt;li>原理分析&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#000">$cfg&lt;/span>.UseForwardedHeaders &lt;span style="color:#000">$cfg&lt;/span>.ComputeFullForwardedFor &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># We can&amp;#39;t use $proxy_add_x_forwarded_for because the realip module&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># replaces the remote_addr too soon&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> map &lt;span style="color:#000">$http_x_forwarded_for&lt;/span> &lt;span style="color:#000">$full_x_forwarded_for&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.UseProxyProtocol &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$http_x_forwarded_for&lt;/span>&lt;span style="color:#4e9a06">, &lt;/span>&lt;span style="color:#000">$proxy_protocol_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$proxy_protocol_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$http_x_forwarded_for&lt;/span>&lt;span style="color:#4e9a06">, &lt;/span>&lt;span style="color:#000">$realip_remote_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$realip_remote_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* definition of server-template to avoid repetitions with server-alias */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> define &lt;span style="color:#4e9a06">&amp;#34;SERVER&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#000">$all&lt;/span>.Cfg.UseForwardedHeaders &lt;span style="color:#000">$all&lt;/span>.Cfg.ComputeFullForwardedFor &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Forwarded-For &lt;span style="color:#000">$full_x_forwarded_for&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Forwarded-For &lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$path&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 如果同时设置了 &amp;#34;use-forwarded-headers&amp;#34; 与 &amp;#34;compute-full-forwarded-for&amp;#34; 则不进行 xff 的替换。&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#000">$all&lt;/span>.Cfg.UseForwardedHeaders &lt;span style="color:#000">$all&lt;/span>.Cfg.ComputeFullForwardedFor &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-For &lt;span style="color:#000">$full_x_forwarded_for&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-For &lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs: Nginx Template</title><link>https://opsaid.net/docs/cloud-native/networking/ingress-nginx/nginx-template/</link><pubDate>Thu, 22 Sep 2022 11:08:05 +0800</pubDate><guid>https://opsaid.net/docs/cloud-native/networking/ingress-nginx/nginx-template/</guid><description>
&lt;h2 id="ingress-nginx-模版内容">Ingress Nginx 模版内容&lt;/h2>
&lt;p>基于 controller-v1.3.1 版本&lt;/p>
&lt;h2 id="模版内容">模版内容&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> . &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$servers&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .Servers &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .Cfg &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$IsIPV6Enabled&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .IsIPV6Enabled &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$healthzURI&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .HealthzURI &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$backends&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .Backends &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxyHeaders&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .ProxySetHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$addHeaders&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .AddHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Configuration checksum: {{ $all.Cfg.Checksum }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># setup custom paths that do not require root access&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pid &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> .PID &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.UseGeoIP2 &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>load_module /etc/nginx/modules/ngx_http_geoip2_module.so&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.EnableBrotli &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>load_module /etc/nginx/modules/ngx_http_brotli_static_module.so&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>shouldLoadInfluxDBModule &lt;span style="color:#000">$servers&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>load_module /etc/nginx/modules/ngx_http_influxdb_module.so&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>shouldLoadAuthDigestModule &lt;span style="color:#000">$servers&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>load_module /etc/nginx/modules/ngx_http_auth_digest_module.so&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>shouldLoadModSecurityModule &lt;span style="color:#000">$cfg&lt;/span> &lt;span style="color:#000">$servers&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>load_module /etc/nginx/modules/ngx_http_modsecurity_module.so&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>shouldLoadOpentracingModule &lt;span style="color:#000">$cfg&lt;/span> &lt;span style="color:#000">$servers&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>load_module /etc/nginx/modules/ngx_http_opentracing_module.so&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>daemon off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>worker_processes &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.WorkerProcesses &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.WorkerCPUAffinity&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>worker_cpu_affinity &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.WorkerCPUAffinity &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>worker_rlimit_nofile &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.MaxWorkerOpenFiles &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* http://nginx.org/en/docs/ngx_core_module.html#worker_shutdown_timeout */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* avoid waiting too long during a reload */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>worker_shutdown_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.WorkerShutdownTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.MainSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.MainSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>events &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> multi_accept &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.EnableMultiAccept &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>on&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>off&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> worker_connections &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.MaxWorkerConnections &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> use epoll&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$index&lt;/span> , &lt;span style="color:#000">$v&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.DebugConnections &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> debug_connection &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$v&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lua_package_path &lt;span style="color:#4e9a06">&amp;#34;/etc/nginx/lua/?.lua;;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildLuaSharedDictionaries &lt;span style="color:#000">$cfg&lt;/span> &lt;span style="color:#000">$servers&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> init_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> collectgarbage&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;collect&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -- init modules
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> ok, res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;lua_ingress&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">lua_ingress&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lua_ingress.set_config&lt;span style="color:#ce5c00;font-weight:bold">({{&lt;/span> configForLua &lt;span style="color:#000">$all&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}})&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;configuration&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">configuration&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> configuration.prohibited_localhost_port &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;{{ .StatusPort }}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;balancer&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">balancer&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.EnableMetrics &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;monitor&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">monitor&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;certificate&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">certificate&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> certificate.is_ocsp_stapling_enabled &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.EnableOCSP &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;plugins&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">plugins&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -- load all plugins that&lt;span style="color:#4e9a06">&amp;#39;ll be used here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> plugins.init({ {{ range $idx, $plugin := $cfg.Plugins }}{{ if $idx }},{{ end }}{{ $plugin | quote }}{{ end }} })
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> init_worker_by_lua_block {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> lua_ingress.init_worker()
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> balancer.init_worker()
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $all.EnableMetrics }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> monitor.init_worker({{ $all.MonitorMaxBatchSize }})
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> plugins.run()
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{/* Enable the real_ip module only if we use either X-Forwarded headers or Proxy Protocol. */}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{/* we use the value of the real IP for the geo_ip module */}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if or (or $cfg.UseForwardedHeaders $cfg.UseProxyProtocol) $cfg.EnableRealIp }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.UseProxyProtocol }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> real_ip_header proxy_protocol;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ else }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> real_ip_header {{ $cfg.ForwardedForHeader }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> real_ip_recursive on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ range $trusted_ip := $cfg.ProxyRealIPCIDR }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> set_real_ip_from {{ $trusted_ip }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $all.Cfg.EnableModsecurity }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> modsecurity on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if (not (empty $all.Cfg.ModsecuritySnippet)) }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> modsecurity_rules &amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.ModsecuritySnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ else }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $all.Cfg.EnableOWASPCoreRules }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> modsecurity_rules_file /etc/nginx/owasp-modsecurity-crs/nginx-modsecurity.conf;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.UseGeoIP }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{/* databases used to determine the country depending on the client IP address */}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{/* http://nginx.org/en/docs/http/ngx_http_geoip_module.html */}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{/* this is require to calculate traffic for individual country using GeoIP in the status page */}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip_country /etc/nginx/geoip/GeoIP.dat;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip_org /etc/nginx/geoip/GeoIPASNum.dat;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip_proxy_recursive on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.UseGeoIP2 }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # https://github.com/leev/ngx_http_geoip2_module#example-usage
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ range $index, $file := $all.MaxmindEditionFiles }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoLite2-Country.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_country_code source=$remote_addr country iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_country_name source=$remote_addr country names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_continent_code source=$remote_addr continent code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_continent_name source=$remote_addr continent names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoIP2-Country.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoIP2-Country.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_country_code source=$remote_addr country iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_country_name source=$remote_addr country names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_continent_code source=$remote_addr continent code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_continent_name source=$remote_addr continent names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoLite2-City.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoLite2-City.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_city_country_code source=$remote_addr country iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_city_country_name source=$remote_addr country names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_city source=$remote_addr city names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_postal_code source=$remote_addr postal code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_dma_code source=$remote_addr location metro_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_latitude source=$remote_addr location latitude;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_longitude source=$remote_addr location longitude;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_time_zone source=$remote_addr location time_zone;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_region_code source=$remote_addr subdivisions 0 iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_region_name source=$remote_addr subdivisions 0 names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_subregion_code source=$remote_addr subdivisions 1 iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_subregion_name source=$remote_addr subdivisions 1 names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoIP2-City.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoIP2-City.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_city_country_code source=$remote_addr country iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_city_country_name source=$remote_addr country names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_city source=$remote_addr city names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_postal_code source=$remote_addr postal code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_dma_code source=$remote_addr location metro_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_latitude source=$remote_addr location latitude;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_longitude source=$remote_addr location longitude;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_time_zone source=$remote_addr location time_zone;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_region_code source=$remote_addr subdivisions 0 iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_region_name source=$remote_addr subdivisions 0 names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_subregion_code source=$remote_addr subdivisions 1 iso_code;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_subregion_name source=$remote_addr subdivisions 1 names en;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoLite2-ASN.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoLite2-ASN.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_asn source=$remote_addr autonomous_system_number;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_org source=$remote_addr autonomous_system_organization;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoIP2-ASN.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoIP2-ASN.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_asn source=$remote_addr autonomous_system_number;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_org source=$remote_addr autonomous_system_organization;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoIP2-ISP.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoIP2-ISP.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_isp source=$remote_addr isp;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_isp_org source=$remote_addr organization;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_asn source=$remote_addr default=0 autonomous_system_number;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoIP2-Connection-Type.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoIP2-Connection-Type.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_connection_type connection_type;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if eq $file &amp;#34;GeoIP2-Anonymous-IP.mmdb&amp;#34; }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> geoip2 /etc/nginx/geoip/GeoIP2-Anonymous-IP.mmdb {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_is_anon source=$remote_addr is_anonymous;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_is_anonymous source=$remote_addr default=0 is_anonymous;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_is_anonymous_vpn source=$remote_addr default=0 is_anonymous_vpn;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_is_hosting_provider source=$remote_addr default=0 is_hosting_provider;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_is_public_proxy source=$remote_addr default=0 is_public_proxy;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> $geoip2_is_tor_exit_node source=$remote_addr default=0 is_tor_exit_node;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> aio threads;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> aio_write on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> tcp_nopush on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> tcp_nodelay on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> log_subrequest on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> reset_timedout_connection on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> keepalive_timeout {{ $cfg.KeepAlive }}s;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> keepalive_requests {{ $cfg.KeepAliveRequests }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> client_body_temp_path /tmp/nginx/client-body;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> fastcgi_temp_path /tmp/nginx/fastcgi-temp;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> proxy_temp_path /tmp/nginx/proxy-temp;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> ajp_temp_path /tmp/nginx/ajp-temp;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> client_header_buffer_size {{ $cfg.ClientHeaderBufferSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> client_header_timeout {{ $cfg.ClientHeaderTimeout }}s;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> large_client_header_buffers {{ $cfg.LargeClientHeaderBuffers }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> client_body_buffer_size {{ $cfg.ClientBodyBufferSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> client_body_timeout {{ $cfg.ClientBodyTimeout }}s;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> http2_max_field_size {{ $cfg.HTTP2MaxFieldSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> http2_max_header_size {{ $cfg.HTTP2MaxHeaderSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> http2_max_requests {{ $cfg.HTTP2MaxRequests }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> http2_max_concurrent_streams {{ $cfg.HTTP2MaxConcurrentStreams }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> types_hash_max_size 2048;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> server_names_hash_max_size {{ $cfg.ServerNameHashMaxSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> server_names_hash_bucket_size {{ $cfg.ServerNameHashBucketSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> map_hash_bucket_size {{ $cfg.MapHashBucketSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> proxy_headers_hash_max_size {{ $cfg.ProxyHeadersHashMaxSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> proxy_headers_hash_bucket_size {{ $cfg.ProxyHeadersHashBucketSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> variables_hash_bucket_size {{ $cfg.VariablesHashBucketSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> variables_hash_max_size {{ $cfg.VariablesHashMaxSize }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> underscores_in_headers {{ if $cfg.EnableUnderscoresInHeaders }}on{{ else }}off{{ end }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> ignore_invalid_headers {{ if $cfg.IgnoreInvalidHeaders }}on{{ else }}off{{ end }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> limit_req_status {{ $cfg.LimitReqStatusCode }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> limit_conn_status {{ $cfg.LimitConnStatusCode }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ buildOpentracing $cfg $servers }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> include /etc/nginx/mime.types;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> default_type {{ $cfg.DefaultType }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.EnableBrotli }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> brotli on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> brotli_comp_level {{ $cfg.BrotliLevel }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> brotli_min_length {{ $cfg.BrotliMinLength }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> brotli_types {{ $cfg.BrotliTypes }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.UseGzip }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> gzip on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> gzip_comp_level {{ $cfg.GzipLevel }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> gzip_http_version 1.1;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> gzip_min_length {{ $cfg.GzipMinLength}};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> gzip_types {{ $cfg.GzipTypes }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> gzip_proxied any;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> gzip_vary on;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # Custom headers for response
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ range $k, $v := $addHeaders }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> more_set_headers {{ printf &amp;#34;%s: %s&amp;#34; $k $v | quote }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> server_tokens {{ if $cfg.ShowServerTokens }}on{{ else }}off{{ end }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if not $cfg.ShowServerTokens }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> more_clear_headers Server;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # disable warnings
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> uninitialized_variable_warn off;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # Additional available variables:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # $namespace
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # $ingress_name
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # $service_name
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # $service_port
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> log_format upstreaminfo {{ if $cfg.LogFormatEscapeJSON }}escape=json {{ end }}&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.LogFormatUpstream &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{/* map urls that should not appear in access.log */}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{/* http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log */}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> map $request_uri $loggable {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ range $reqUri := $cfg.SkipAccessLogURLs }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ $reqUri }} 0;{{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> default 1;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if or $cfg.DisableAccessLog $cfg.DisableHTTPAccessLog }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> access_log off;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ else }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.EnableSyslog }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> access_log syslog:server={{ $cfg.SyslogHost }}:{{ $cfg.SyslogPort }} upstreaminfo if=$loggable;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ else }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> access_log {{ or $cfg.HttpAccessLogPath $cfg.AccessLogPath }} upstreaminfo {{ $cfg.AccessLogParams }} if=$loggable;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.EnableSyslog }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> error_log syslog:server={{ $cfg.SyslogHost }}:{{ $cfg.SyslogPort }} {{ $cfg.ErrorLogLevel }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ else }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> error_log {{ $cfg.ErrorLogPath }} {{ $cfg.ErrorLogLevel }};
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ buildResolvers $cfg.Resolver $cfg.DisableIpv6DNS }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # See https://www.nginx.com/blog/websocket-nginx
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> map $http_upgrade $connection_upgrade {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> default upgrade;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if (gt $cfg.UpstreamKeepaliveConnections 0) }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # See http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> &amp;#39;&amp;#39; &amp;#39;&amp;#39;;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ else }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> &amp;#39;&amp;#39; close;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # Reverse proxies can detect if a client provides a X-Request-ID header, and pass it on to the backend server.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # If no such header is provided, it can provide a random value.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> map $http_x_request_id $req_id {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> default $http_x_request_id;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if $cfg.GenerateRequestID }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> &amp;#34;&amp;#34; $request_id;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ end }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> {{ if and $cfg.UseForwardedHeaders $cfg.ComputeFullForwardedFor }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> # We can&amp;#39;&lt;/span>t use &lt;span style="color:#000">$proxy_add_x_forwarded_for&lt;/span> because the realip module
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># replaces the remote_addr too soon&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> map &lt;span style="color:#000">$http_x_forwarded_for&lt;/span> &lt;span style="color:#000">$full_x_forwarded_for&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.UseProxyProtocol &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$http_x_forwarded_for&lt;/span>&lt;span style="color:#4e9a06">, &lt;/span>&lt;span style="color:#000">$proxy_protocol_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$proxy_protocol_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$http_x_forwarded_for&lt;/span>&lt;span style="color:#4e9a06">, &lt;/span>&lt;span style="color:#000">$realip_remote_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$realip_remote_addr&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Create a variable that contains the literal $ character.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># This works because the geo module will not resolve variables.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> geo &lt;span style="color:#000">$literal_dollar&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>$&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server_name_in_redirect off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> port_in_redirect off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_protocols &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLProtocols &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_early_data &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLEarlyData &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>on&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>off&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># turn on session caching to drastically improve performance&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLSessionCache &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_session_cache shared:SSL:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLSessionCacheSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_session_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLSessionTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># allow configuring ssl session tickets&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_session_tickets &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLSessionTickets &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>on&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>off&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.SSLSessionTicketKey &lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_session_ticket_key /etc/nginx/tickets.key&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># slightly reduce the time-to-first-byte&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_buffer_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLBufferSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.SSLCiphers&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># allow configuring custom ssl ciphers&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_ciphers &lt;span style="color:#4e9a06">&amp;#39;{{ $cfg.SSLCiphers }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_prefer_server_ciphers on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.SSLDHParam&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># allow custom DH file http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_dhparam&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_dhparam &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLDHParam &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_ecdh_curve &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.SSLECDHCurve &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># PEM sha: {{ $cfg.DefaultSSLCertificate.PemSHA }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_certificate &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.DefaultSSLCertificate.PemFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_certificate_key &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.DefaultSSLCertificate.PemFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.CustomHTTPErrors&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_intercept_errors on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$errCode&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.CustomHTTPErrors &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error_page &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$errCode&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> @custom_upstream-default-backend_&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$errCode&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_session_reuse on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.AllowBackendServerHeader &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass_header Server&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$header&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.HideHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>proxy_hide_header &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$header&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.HTTPSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured in the configuration configmap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.HTTPSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> upstream upstream_balancer &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">### Attention!!!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># We no longer create &amp;#34;upstream&amp;#34; section for every backend.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Backends are handled dynamically using Lua. If you would like to debug&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># and see what backends ingress-nginx has in its memory you can&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># install our kubectl plugin https://kubernetes.github.io/ingress-nginx/kubectl-plugin.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Once you have the plugin you can use &amp;#34;kubectl ingress-nginx backends&amp;#34; command to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># inspect current backends.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">###&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server 0.0.0.1&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># placeholder&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> balancer_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> balancer.balance&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>gt &lt;span style="color:#000">$cfg&lt;/span>.UpstreamKeepaliveConnections 0&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.UpstreamKeepaliveConnections &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive_time &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.UpstreamKeepaliveTime &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.UpstreamKeepaliveTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>s&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive_requests &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.UpstreamKeepaliveRequests &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$rl&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>filterRateLimits &lt;span style="color:#000">$servers&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Ratelimit {{ $rl.Name }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> geo &lt;span style="color:#000">$remote_addr&lt;/span> &lt;span style="color:#000">$whitelist_&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$rl&lt;/span>.ID &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default 0&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$ip&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$rl&lt;/span>.Whitelist &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ip&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> 1&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Ratelimit {{ $rl.Name }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> map &lt;span style="color:#000">$whitelist_&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$rl&lt;/span>.ID &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#000">$limit_&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$rl&lt;/span>.ID &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.LimitConnZoneVariable &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* build all the required rate limit zones. Each annotation requires a dedicated zone */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* 1MB -&amp;gt; &lt;span style="color:#0000cf;font-weight:bold">16&lt;/span> thousand 64-byte states or about &lt;span style="color:#0000cf;font-weight:bold">8&lt;/span> thousand 128-byte states */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$zone&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>buildRateLimitZones &lt;span style="color:#000">$servers&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$zone&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Cache for internal auth checks&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_cache_path /tmp/nginx/nginx-cache-auth &lt;span style="color:#000">levels&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>1:2 &lt;span style="color:#000">keys_zone&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>auth_cache:10m &lt;span style="color:#000">max_size&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>128m &lt;span style="color:#000">inactive&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>30m &lt;span style="color:#000">use_temp_path&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Global filters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$ip&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.BlockCIDRs &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>deny &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> trimSpace &lt;span style="color:#000">$ip&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.BlockUserAgents&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> map &lt;span style="color:#000">$http_user_agent&lt;/span> &lt;span style="color:#000">$block_ua&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default 0&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$ua&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.BlockUserAgents &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> trimSpace &lt;span style="color:#000">$ua&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> 1&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.BlockReferers&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> map &lt;span style="color:#000">$http_referer&lt;/span> &lt;span style="color:#000">$block_ref&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default 0&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$ref&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.BlockReferers &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> trimSpace &lt;span style="color:#000">$ref&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> 1&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* Build server redirects &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>from/to www&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$redirect&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .RedirectServers &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start server {{ $redirect.From }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server_name &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$redirect&lt;/span>.From &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildHTTPListener &lt;span style="color:#000">$all&lt;/span> &lt;span style="color:#000">$redirect&lt;/span>.From &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildHTTPSListener &lt;span style="color:#000">$all&lt;/span> &lt;span style="color:#000">$redirect&lt;/span>.From &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_certificate_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> certificate.call&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.BlockUserAgents&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$block_ua&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 403&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.BlockReferers&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$block_ref&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 403&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> set_by_lua_block &lt;span style="color:#000">$redirect_to&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> &lt;span style="color:#000">request_uri&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> ngx.var.request_uri
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> string.sub&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>request_uri, -1&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">==&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;/&amp;#34;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">request_uri&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> string.sub&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>request_uri, 1, -2&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.UseForwardedHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> redirectScheme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ngx.var.http_x_forwarded_proto &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">redirectScheme&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> ngx.var.scheme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">redirectScheme&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> ngx.var.http_x_forwarded_proto
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> &lt;span style="color:#000">redirectScheme&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> ngx.var.scheme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> ne &lt;span style="color:#000">$all&lt;/span>.ListenPorts.HTTPS &lt;span style="color:#0000cf;font-weight:bold">443&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$redirect_port&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87">printf&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;:%v&amp;#34;&lt;/span> &lt;span style="color:#000">$all&lt;/span>.ListenPorts.HTTPS&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> string.format&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;%s://%s%s%s&amp;#34;&lt;/span>, redirectScheme, &lt;span style="color:#4e9a06">&amp;#34;{{ &lt;/span>&lt;span style="color:#000">$redirect&lt;/span>&lt;span style="color:#4e9a06">.To }}&amp;#34;&lt;/span>, &lt;span style="color:#4e9a06">&amp;#34;{{ &lt;/span>&lt;span style="color:#000">$redirect_port&lt;/span>&lt;span style="color:#4e9a06"> }}&amp;#34;&lt;/span>, request_uri&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> string.format&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;%s://%s%s&amp;#34;&lt;/span>, redirectScheme, &lt;span style="color:#4e9a06">&amp;#34;{{ &lt;/span>&lt;span style="color:#000">$redirect&lt;/span>&lt;span style="color:#4e9a06">.To }}&amp;#34;&lt;/span>, request_uri&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.HTTPRedirectCode &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#000">$redirect_to&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end server {{ $redirect.From }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$server&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$servers&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$location&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$server&lt;/span>.Locations &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$applyGlobalAuth&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> shouldApplyGlobalAuth &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.GlobalExternalAuth.URL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$applyAuthUpstream&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> shouldApplyAuthUpstream &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$applyAuthUpstream&lt;/span> &lt;span style="color:#204a87">true&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$applyGlobalAuth&lt;/span> &lt;span style="color:#204a87">false&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start auth upstream {{ $server.Hostname }}{{ $location.Path }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> upstream &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildAuthUpstreamName &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- &lt;span style="color:#000">$externalAuth&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ExternalAuth &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> extractHostPort &lt;span style="color:#000">$externalAuth&lt;/span>.URL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.KeepaliveConnections &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive_requests &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.KeepaliveRequests &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.KeepaliveTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>s&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end auth upstream {{ $server.Hostname }}{{ $location.Path }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$server&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$servers&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## start server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server_name &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildServerName &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>range &lt;span style="color:#000">$server&lt;/span>.Aliases &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> . &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.BlockUserAgents&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$block_ua&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 403&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$cfg&lt;/span>.BlockReferers&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$block_ref&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 403&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> template &lt;span style="color:#4e9a06">&amp;#34;SERVER&amp;#34;&lt;/span> serverConfig &lt;span style="color:#000">$all&lt;/span> &lt;span style="color:#000">$server&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cfg&lt;/span>.ServerSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured in the configuration configmap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ServerSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> template &lt;span style="color:#4e9a06">&amp;#34;CUSTOM_ERRORS&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>buildCustomErrorDeps &lt;span style="color:#4e9a06">&amp;#34;upstream-default-backend&amp;#34;&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.CustomHTTPErrors &lt;span style="color:#000">$all&lt;/span>.EnableMetrics &lt;span style="color:#000">$cfg&lt;/span>.EnableModsecurity&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">## end server {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># backend for when default-backend-service is not configured or it does not have endpoints&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.ListenPorts.Default &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> default_server &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.ReusePort &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>reuseport&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#000">backlog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">={{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.BacklogSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$IsIPV6Enabled&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>listen &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>::&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.ListenPorts.Default &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> default_server &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.ReusePort &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>reuseport&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#000">backlog&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">={{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.BacklogSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;internal&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location / &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 404&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># default server, used for NGINX healthcheck and access to nginx stats&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen 127.0.0.1:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> .StatusPort &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;internal&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> keepalive_timeout 0&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> gzip off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.EnableOpentracing &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> opentracing off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$healthzURI&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 200&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location /is-dynamic-lb-initialized &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> content_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> &lt;span style="color:#000">configuration&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> require&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;configuration&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> &lt;span style="color:#000">backend_data&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> configuration.get_backends_data&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not backend_data &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.exit&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ngx.HTTP_INTERNAL_SERVER_ERROR&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.say&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;OK&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.exit&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ngx.HTTP_OK&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> .StatusPath &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stub_status on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location /configuration &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> client_max_body_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> luaConfigurationRequestBodySize &lt;span style="color:#000">$cfg&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> client_body_buffer_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> luaConfigurationRequestBodySize &lt;span style="color:#000">$cfg&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffering off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> content_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> configuration.call&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location / &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> content_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.exit&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ngx.HTTP_NOT_FOUND&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>stream &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lua_package_path &lt;span style="color:#4e9a06">&amp;#34;/etc/nginx/lua/?.lua;/etc/nginx/lua/vendor/?.lua;;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lua_shared_dict tcp_udp_configuration_data 5M&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> init_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> collectgarbage&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;collect&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -- init modules
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> ok, res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;configuration&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">configuration&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;tcp_udp_configuration&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">tcp_udp_configuration&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tcp_udp_configuration.prohibited_localhost_port &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;{{ .StatusPort }}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ok, &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> pcall&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>require, &lt;span style="color:#4e9a06">&amp;#34;tcp_udp_balancer&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not ok &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;require failed: &amp;#34;&lt;/span> .. tostring&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">tcp_udp_balancer&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> init_worker_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tcp_udp_balancer.init_worker&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lua_add_variable &lt;span style="color:#000">$proxy_upstream_name&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> log_format log_stream &lt;span style="color:#4e9a06">&amp;#39;{{ $cfg.LogFormatStream }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> or &lt;span style="color:#000">$cfg&lt;/span>.DisableAccessLog &lt;span style="color:#000">$cfg&lt;/span>.DisableStreamAccessLog &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> or &lt;span style="color:#000">$cfg&lt;/span>.StreamAccessLogPath &lt;span style="color:#000">$cfg&lt;/span>.AccessLogPath &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> log_stream &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.AccessLogParams &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error_log &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ErrorLogPath &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ErrorLogLevel &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.EnableRealIp &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$trusted_ip&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyRealIPCIDR &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> set_real_ip_from &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$trusted_ip&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> upstream upstream_balancer &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server 0.0.0.1:1234&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># placeholder&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> balancer_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tcp_udp_balancer.balance&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen 127.0.0.1:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> .StreamPort &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> content_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tcp_udp_configuration.call&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># TCP services&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$tcpServer&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .TCPBackends &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> preread_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.var.proxy_upstream_name&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;tcp-{{ &lt;/span>&lt;span style="color:#000">$tcpServer&lt;/span>&lt;span style="color:#4e9a06">.Backend.Namespace }}-{{ &lt;/span>&lt;span style="color:#000">$tcpServer&lt;/span>&lt;span style="color:#4e9a06">.Backend.Name }}-{{ &lt;/span>&lt;span style="color:#000">$tcpServer&lt;/span>&lt;span style="color:#4e9a06">.Backend.Port }}&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$address&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.BindAddressIpv4 &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$address&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Backend.ProxyProtocol.Decode &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> proxy_protocol&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Backend.ProxyProtocol.Decode &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> proxy_protocol&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$IsIPV6Enabled&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$address&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.BindAddressIpv6 &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$address&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Backend.ProxyProtocol.Decode &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> proxy_protocol&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>::&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Backend.ProxyProtocol.Decode &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> proxy_protocol&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamNextUpstream &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>on&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>off&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamNextUpstreamTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_tries &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamNextUpstreamTries &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass upstream_balancer&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$tcpServer&lt;/span>.Backend.ProxyProtocol.Encode &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_protocol on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># UDP services&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$udpServer&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .UDPBackends &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> preread_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.var.proxy_upstream_name&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;udp-{{ &lt;/span>&lt;span style="color:#000">$udpServer&lt;/span>&lt;span style="color:#4e9a06">.Backend.Namespace }}-{{ &lt;/span>&lt;span style="color:#000">$udpServer&lt;/span>&lt;span style="color:#4e9a06">.Backend.Name }}-{{ &lt;/span>&lt;span style="color:#000">$udpServer&lt;/span>&lt;span style="color:#4e9a06">.Backend.Port }}&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$address&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.BindAddressIpv4 &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$address&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$udpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> udp&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$udpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> udp&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$IsIPV6Enabled&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$address&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.BindAddressIpv6 &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$address&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$udpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> udp&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> listen &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>::&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>:&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$udpServer&lt;/span>.Port &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> udp&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_responses &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamResponses &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamNextUpstream &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>on&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>off&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamNextUpstreamTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_tries &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cfg&lt;/span>.ProxyStreamNextUpstreamTries &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass upstream_balancer&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Stream Snippets&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$snippet&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .StreamSnippets &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$snippet&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* definition of templates to avoid repetitions */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> define &lt;span style="color:#4e9a06">&amp;#34;CUSTOM_ERRORS&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$enableMetrics&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .EnableMetrics &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$modsecurityEnabled&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .ModsecurityEnabled &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$upstreamName&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .UpstreamName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$errCode&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .ErrorCodes &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location @custom_&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$upstreamName&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>_&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$errCode&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> internal&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Ensure that modsecurity will not run on custom error pages or they might be blocked&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$modsecurityEnabled&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> modsecurity off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_intercept_errors off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Code &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$errCode&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Format &lt;span style="color:#000">$http_accept&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Original-URI &lt;span style="color:#000">$request_uri&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Namespace &lt;span style="color:#000">$namespace&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Ingress-Name &lt;span style="color:#000">$ingress_name&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Service-Name &lt;span style="color:#000">$service_name&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Service-Port &lt;span style="color:#000">$service_port&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Request-ID &lt;span style="color:#000">$req_id&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Forwarded-For &lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Host &lt;span style="color:#000">$best_http_host&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$upstreamName&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rewrite &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>.*&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> / break&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass http://upstream_balancer&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> log_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$enableMetrics&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> monitor.call&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* CORS support from https://michielkalkman.com/snippets/nginx-cors-open-configuration.html */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> define &lt;span style="color:#4e9a06">&amp;#34;CORS&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$cors&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .CorsConfig &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Cors Preflight methods needs additional options and different Return Code&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cors&lt;/span>.CorsAllowOrigin &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildCorsOriginRegex &lt;span style="color:#000">$cors&lt;/span>.CorsAllowOrigin &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$request_method&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;OPTIONS&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$cors&lt;/span> &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">cors&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>options&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$cors&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Origin: $http_origin&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cors&lt;/span>.CorsAllowCredentials &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Credentials: {{ $cors.CorsAllowCredentials }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Methods: {{ $cors.CorsAllowMethods }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Headers: {{ $cors.CorsAllowHeaders }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cors&lt;/span>.CorsExposeHeaders&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Expose-Headers: {{ $cors.CorsExposeHeaders }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Max-Age: {{ $cors.CorsMaxAge }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$cors&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;trueoptions&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Origin: $http_origin&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$cors&lt;/span>.CorsAllowCredentials &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Credentials: {{ $cors.CorsAllowCredentials }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Methods: {{ $cors.CorsAllowMethods }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Allow-Headers: {{ $cors.CorsAllowHeaders }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$cors&lt;/span>.CorsExposeHeaders&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Expose-Headers: {{ $cors.CorsExposeHeaders }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Access-Control-Max-Age: {{ $cors.CorsMaxAge }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Content-Type: text/plain charset=UTF-8&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more_set_headers &lt;span style="color:#4e9a06">&amp;#39;Content-Length: 0&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 204&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* definition of server-template to avoid repetitions with server-alias */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> define &lt;span style="color:#4e9a06">&amp;#34;SERVER&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .First &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> .Second &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildHTTPListener &lt;span style="color:#000">$all&lt;/span> &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildHTTPSListener &lt;span style="color:#000">$all&lt;/span> &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;-&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span> empty &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.MatchCN &lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.MatchCN&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span> &lt;span style="color:#000">$ssl_client_s_dn&lt;/span> !~ &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.MatchCN &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">403&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;client certificate unauthorized&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> eq &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#4e9a06">&amp;#34;_&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_reject_handshake &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.SSLRejectHandshake &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>on&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>off&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_certificate_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> certificate.call&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.AuthTLSError&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># {{ $server.AuthTLSError }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 403&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.CAFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># PEM sha: {{ $server.CertificateAuth.CASHA }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_client_certificate &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.CAFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_verify_client &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.VerifyClient &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_verify_depth &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.ValidationDepth &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.CRLFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># PEM sha: {{ $server.CertificateAuth.CRLSHA }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_crl &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.CRLFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.ErrorPage&lt;span style="color:#ce5c00;font-weight:bold">)}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error_page &lt;span style="color:#0000cf;font-weight:bold">495&lt;/span> &lt;span style="color:#000">496&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.ErrorPage &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.ProxySSL.CAFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># PEM sha: {{ $server.ProxySSL.CASHA }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_trusted_certificate &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.CAFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_ciphers &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.Ciphers &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_protocols &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.Protocols &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_verify &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.Verify &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_verify_depth &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.VerifyDepth &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.ProxySSL.ProxySSLName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_name &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.ProxySSLName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_server_name &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.ProxySSLServerName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.ProxySSL.PemFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_certificate &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.PemFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_certificate_key &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ProxySSL.PemFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.SSLCiphers&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_ciphers &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.SSLCiphers &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.SSLPreferServerCiphers&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ssl_prefer_server_ciphers &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.SSLPreferServerCiphers &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.ServerSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured for host {{ $server.Hostname }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$server&lt;/span>.ServerSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$errorLocation&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>buildCustomErrorLocationsPerServer &lt;span style="color:#000">$server&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> template &lt;span style="color:#4e9a06">&amp;#34;CUSTOM_ERRORS&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>buildCustomErrorDeps &lt;span style="color:#000">$errorLocation&lt;/span>.UpstreamName &lt;span style="color:#000">$errorLocation&lt;/span>.Codes &lt;span style="color:#000">$all&lt;/span>.EnableMetrics &lt;span style="color:#000">$all&lt;/span>.Cfg.EnableModsecurity&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildMirrorLocations &lt;span style="color:#000">$server&lt;/span>.Locations &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$enforceRegex&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> enforceRegexModifier &lt;span style="color:#000">$server&lt;/span>.Locations &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$location&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$server&lt;/span>.Locations &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$path&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildLocation &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$enforceRegex&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> proxySetHeader &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildAuthLocation &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.GlobalExternalAuth.URL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$applyGlobalAuth&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> shouldApplyGlobalAuth &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.GlobalExternalAuth.URL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$applyAuthUpstream&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> shouldApplyAuthUpstream &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ExternalAuth &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> eq &lt;span style="color:#000">$applyGlobalAuth&lt;/span> &lt;span style="color:#204a87">true&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.GlobalExternalAuth &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.Rewrite.AppRoot&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#000">$uri&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> /&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">302&lt;/span> &lt;span style="color:#000">$scheme&lt;/span>://&lt;span style="color:#000">$http_host&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Rewrite.AppRoot &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> internal&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>or &lt;span style="color:#000">$all&lt;/span>.Cfg.EnableOpentracing &lt;span style="color:#000">$location&lt;/span>.Opentracing.Enabled&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> opentracing on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> opentracing_propagate_context&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Ensure that modsecurity will not run on an internal location as this is not accessible from outside&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.EnableModsecurity &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> modsecurity off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.AuthCacheKey &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$tmp_cache_key&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;{{ $server.Hostname }}{{ $authPath }}{{ $externalAuth.AuthCacheKey }}&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$cache_key&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rewrite_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.var.cache_key &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> ngx.encode_base64&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ngx.sha1_bin&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ngx.var.tmp_cache_key&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_cache auth_cache&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- range &lt;span style="color:#000">$dur&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.AuthCacheDuration &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_cache_valid &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$dur&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_cache_key &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$cache_key&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># ngx_auth_request module overrides variables in the parent request,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># therefore we have to explicitly set this variable again so that when the parent request&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># resumes it has the correct value set for this variable so that Lua can pick backend correctly&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildUpstreamName &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass_request_body off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Content-Length &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Forwarded-Proto &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Request-ID &lt;span style="color:#000">$req_id&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.Method &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_method &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.Method &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Original-URI &lt;span style="color:#000">$request_uri&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Scheme &lt;span style="color:#000">$pass_access_scheme&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Host &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.Host &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Original-URL &lt;span style="color:#000">$scheme&lt;/span>://&lt;span style="color:#000">$http_host$request_uri&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Original-Method &lt;span style="color:#000">$request_method&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Sent-From &lt;span style="color:#4e9a06">&amp;#34;nginx-ingress-controller&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Real-IP &lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#000">$all&lt;/span>.Cfg.UseForwardedHeaders &lt;span style="color:#000">$all&lt;/span>.Cfg.ComputeFullForwardedFor &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Forwarded-For &lt;span style="color:#000">$full_x_forwarded_for&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Forwarded-For &lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.RequestRedirect &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Auth-Request-Redirect &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.RequestRedirect &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Auth-Request-Redirect &lt;span style="color:#000">$request_uri&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.AuthCacheKey &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffering &lt;span style="color:#4e9a06">&amp;#34;on&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffering &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyBuffering &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffer_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BufferSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffers &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BuffersNumber &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BufferSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_request_buffering &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.RequestBuffering &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_server_name on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass_request_headers on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> isValidByteSize &lt;span style="color:#000">$location&lt;/span>.Proxy.BodySize &lt;span style="color:#204a87">true&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> client_max_body_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BodySize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> isValidByteSize &lt;span style="color:#000">$location&lt;/span>.ClientBodyBufferSize &lt;span style="color:#204a87">false&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> client_body_buffer_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ClientBodyBufferSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Pass the extracted client certificate to the auth provider&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.CAFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.PassCertToUpstream &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header ssl-client-cert &lt;span style="color:#000">$ssl_client_escaped_cert&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header ssl-client-verify &lt;span style="color:#000">$ssl_client_verify&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header ssl-client-subject-dn &lt;span style="color:#000">$ssl_client_s_dn&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header ssl-client-issuer-dn &lt;span style="color:#000">$ssl_client_i_dn&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- range &lt;span style="color:#000">$line&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildAuthProxySetHeaders &lt;span style="color:#000">$externalAuth&lt;/span>.ProxySetHeaders&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$line&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$externalAuth&lt;/span>.AuthSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.AuthSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$applyAuthUpstream&lt;/span> &lt;span style="color:#204a87">true&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$applyGlobalAuth&lt;/span> &lt;span style="color:#204a87">false&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$authUpstreamName&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildAuthUpstreamName &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># The target is an upstream with HTTP keepalive, that is why the&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Connection header is cleared and the HTTP version is set to 1.1 as&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># the Nginx documentation suggests:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_http_version 1.1&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header Connection &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$target&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> changeHostPort &lt;span style="color:#000">$externalAuth&lt;/span>.URL &lt;span style="color:#000">$authUpstreamName&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_http_version &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyHTTPVersion &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$target&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.URL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_pass &lt;span style="color:#000">$target&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> isLocationAllowed &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.SigninURL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildAuthSignURLLocation &lt;span style="color:#000">$location&lt;/span>.Path &lt;span style="color:#000">$externalAuth&lt;/span>.SigninURL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> internal&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> add_header Set-Cookie &lt;span style="color:#000">$auth_cookie&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Ensure that modsecurity will not run on an internal location as this is not accessible from outside&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.EnableModsecurity &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> modsecurity off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">302&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildAuthSignURL &lt;span style="color:#000">$externalAuth&lt;/span>.SigninURL &lt;span style="color:#000">$externalAuth&lt;/span>.SigninURLRedirectParam &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$path&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ing&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>getIngressInformation &lt;span style="color:#000">$location&lt;/span>.Ingress &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#000">$location&lt;/span>.IngressPath&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$namespace&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ing&lt;/span>.Namespace &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$ingress_name&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ing&lt;/span>.Rule &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$service_name&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ing&lt;/span>.Service &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$service_port&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ing&lt;/span>.ServicePort &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$location_path&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ing&lt;/span>.Path &lt;span style="color:#000;font-weight:bold">|&lt;/span> escapeLiteralDollar &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$global_rate_limit_exceeding&lt;/span> n&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildOpentracingForLocation &lt;span style="color:#000">$all&lt;/span>.Cfg.EnableOpentracing &lt;span style="color:#000">$all&lt;/span>.Cfg.OpentracingTrustIncomingSpan &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Mirror.Source &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mirror &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Mirror.Source &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> mirror_request_body &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Mirror.RequestBody &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rewrite_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lua_ingress.rewrite&lt;span style="color:#ce5c00;font-weight:bold">({{&lt;/span> locationConfigForLua &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$all&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}})&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> balancer.rewrite&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> plugins.run&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># will always succeed when there&amp;#39;s `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># other authentication method such as basic auth or external auth useless - all requests will be allowed.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">#access_by_lua_block {&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">#}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> header_filter_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> lua_ingress.header&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> plugins.run&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> body_filter_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> plugins.run&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> log_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> balancer.log&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.EnableMetrics &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> monitor.call&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> plugins.run&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#000">$location&lt;/span>.Logs.Access &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Logs.Rewrite &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rewrite_log on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.HTTP2PushPreload &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> http2_push_preload on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> port_in_redirect &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.UsePortInRedirects &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>on&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>off&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$balancer_ewma_score&lt;/span> -1&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildUpstreamName &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_host&lt;/span> &lt;span style="color:#000">$proxy_upstream_name&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$pass_access_scheme&lt;/span> &lt;span style="color:#000">$scheme&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.UseProxyProtocol &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$pass_server_port&lt;/span> &lt;span style="color:#000">$proxy_protocol_server_port&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$pass_server_port&lt;/span> &lt;span style="color:#000">$server_port&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$best_http_host&lt;/span> &lt;span style="color:#000">$http_host&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$pass_port&lt;/span> &lt;span style="color:#000">$pass_server_port&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$proxy_alternative_upstream_name&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildModSecurityForLocation &lt;span style="color:#000">$all&lt;/span>.Cfg &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> isLocationAllowed &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> gt &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>len &lt;span style="color:#000">$location&lt;/span>.Whitelist.CIDR&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$ip&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Whitelist.CIDR &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> allow &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$ip&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> deny all&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>isLocationInLocationList &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.NoAuthLocations&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># this location requires authentication&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$applyAuthUpstream&lt;/span> &lt;span style="color:#204a87">true&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$applyGlobalAuth&lt;/span> &lt;span style="color:#204a87">false&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">$auth_cookie&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> add_header Set-Cookie &lt;span style="color:#000">$auth_cookie&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- range &lt;span style="color:#000">$line&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildAuthResponseHeaders &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.ResponseHeaders &lt;span style="color:#204a87">true&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$line&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># `auth_request` module does not support HTTP keepalives in upstream block:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># https://trac.nginx.org/nginx/ticket/1579&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_by_lua_block &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">local&lt;/span> &lt;span style="color:#000">res&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> ngx.location.capture&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;{{ $authPath }}&amp;#39;&lt;/span>, &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> &lt;span style="color:#000">method&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> ngx.HTTP_GET, &lt;span style="color:#000">body&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">})&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> res.status &lt;span style="color:#ce5c00;font-weight:bold">==&lt;/span> ngx.HTTP_OK &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.var.auth_cookie &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> res.header&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;Set-Cookie&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- range &lt;span style="color:#000">$line&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildAuthUpstreamLuaHeaders &lt;span style="color:#000">$externalAuth&lt;/span>.ResponseHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$line&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> res.status &lt;span style="color:#ce5c00;font-weight:bold">==&lt;/span> ngx.HTTP_FORBIDDEN &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.exit&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>res.status&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> end
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ngx.exit&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>ngx.HTTP_INTERNAL_SERVER_ERROR&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_request &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$authPath&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_request_set &lt;span style="color:#000">$auth_cookie&lt;/span> &lt;span style="color:#000">$upstream_http_set_cookie&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.AlwaysSetCookie &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> add_header Set-Cookie &lt;span style="color:#000">$auth_cookie&lt;/span> always&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> add_header Set-Cookie &lt;span style="color:#000">$auth_cookie&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- range &lt;span style="color:#000">$line&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildAuthResponseHeaders &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.ResponseHeaders &lt;span style="color:#204a87">false&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$line&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$externalAuth&lt;/span>.SigninURL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> set_escape_uri &lt;span style="color:#000">$escaped_request_uri&lt;/span> &lt;span style="color:#000">$request_uri&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error_page &lt;span style="color:#000">401&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildAuthSignURLLocation &lt;span style="color:#000">$location&lt;/span>.Path &lt;span style="color:#000">$externalAuth&lt;/span>.SigninURL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.BasicDigestAuth.Secured &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> eq &lt;span style="color:#000">$location&lt;/span>.BasicDigestAuth.Type &lt;span style="color:#4e9a06">&amp;#34;basic&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_basic &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.BasicDigestAuth.Realm &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_basic_user_file &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.BasicDigestAuth.File &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.BasicDigestAuth.Realm &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> auth_digest_user_file &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.BasicDigestAuth.File &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> Authorization &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> the location contains a rate limit annotation, create one */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$limits&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> buildRateLimit &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$limit&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$limits&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$limit&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.CorsConfig.CorsEnabled &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> template &lt;span style="color:#4e9a06">&amp;#34;CORS&amp;#34;&lt;/span> &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildInfluxDB &lt;span style="color:#000">$location&lt;/span>.InfluxDB &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> isValidByteSize &lt;span style="color:#000">$location&lt;/span>.Proxy.BodySize &lt;span style="color:#204a87">true&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> client_max_body_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BodySize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> isValidByteSize &lt;span style="color:#000">$location&lt;/span>.ClientBodyBufferSize &lt;span style="color:#204a87">false&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> client_body_buffer_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ClientBodyBufferSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* By default use vhost as Host to upstream, but allow overrides */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;grpc_set_header&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.UpstreamVhost&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> Host &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.UpstreamVhost &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> Host &lt;span style="color:#000">$best_http_host&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Pass the extracted client certificate to the backend&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.CAFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$server&lt;/span>.CertificateAuth.PassCertToUpstream &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> ssl-client-cert &lt;span style="color:#000">$ssl_client_escaped_cert&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> ssl-client-verify &lt;span style="color:#000">$ssl_client_verify&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> ssl-client-subject-dn &lt;span style="color:#000">$ssl_client_s_dn&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> ssl-client-issuer-dn &lt;span style="color:#000">$ssl_client_i_dn&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Allow websocket connections&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> Upgrade &lt;span style="color:#000">$http_upgrade&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Connection.Enabled&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> Connection &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Connection.Header &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> Connection &lt;span style="color:#000">$connection_upgrade&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Request-ID &lt;span style="color:#000">$req_id&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Real-IP &lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> and &lt;span style="color:#000">$all&lt;/span>.Cfg.UseForwardedHeaders &lt;span style="color:#000">$all&lt;/span>.Cfg.ComputeFullForwardedFor &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-For &lt;span style="color:#000">$full_x_forwarded_for&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-For &lt;span style="color:#000">$remote_addr&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-Host &lt;span style="color:#000">$best_http_host&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-Port &lt;span style="color:#000">$pass_port&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-Proto &lt;span style="color:#000">$pass_access_scheme&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Forwarded-Scheme &lt;span style="color:#000">$pass_access_scheme&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.ProxyAddOriginalURIHeader &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Original-URI &lt;span style="color:#000">$request_uri&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Scheme &lt;span style="color:#000">$pass_access_scheme&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Pass the original X-Forwarded-For&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> X-Original-Forwarded-For &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildForwardedFor &lt;span style="color:#000">$all&lt;/span>.Cfg.ForwardedForHeader &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># mitigate HTTPoxy Vulnerability&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> Proxy &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom headers to proxied server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$k&lt;/span>, &lt;span style="color:#000">$v&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.ProxySetHeaders &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$proxySetHeader&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$k&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$v&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_connect_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ConnectTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>s&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_send_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.SendTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>s&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_read_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ReadTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>s&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffering &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyBuffering &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffer_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BufferSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_buffers &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BuffersNumber &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.BufferSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> isValidByteSize &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyMaxTempFileSize &lt;span style="color:#204a87">true&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_max_temp_file_size &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyMaxTempFileSize &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_request_buffering &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.RequestBuffering &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_http_version &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyHTTPVersion &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_cookie_domain &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.CookieDomain &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_cookie_path &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.CookiePath &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># In case of errors try the next upstream server before returning an error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildNextUpstream &lt;span style="color:#000">$location&lt;/span>.Proxy.NextUpstream &lt;span style="color:#000">$all&lt;/span>.Cfg.RetryNonIdempotent &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_timeout &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.NextUpstreamTimeout &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_next_upstream_tries &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.NextUpstreamTries &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* Add any additional configuration defined */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ConfigurationSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$all&lt;/span>.Cfg.LocationSnippet&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom code snippet configured in the configuration configmap&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.LocationSnippet &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> we are sending the request to a custom default backend, we add the required headers */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>hasPrefix &lt;span style="color:#000">$location&lt;/span>.Backend &lt;span style="color:#4e9a06">&amp;#34;custom-default-backend-&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Code 503&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Format &lt;span style="color:#000">$http_accept&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Namespace &lt;span style="color:#000">$namespace&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Ingress-Name &lt;span style="color:#000">$ingress_name&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Service-Name &lt;span style="color:#000">$service_name&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Service-Port &lt;span style="color:#000">$service_port&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_set_header X-Request-ID &lt;span style="color:#000">$req_id&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Satisfy &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> satisfy &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Satisfy &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>/* &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> a location-specific error override is set, add the proxy_intercept here */&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.CustomHTTPErrors &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Custom error pages per ingress&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_intercept_errors on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$errCode&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$location&lt;/span>.CustomHTTPErrors &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> error_page &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$errCode&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> @custom_&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.DefaultBackendUpstreamName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>_&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$errCode&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$location&lt;/span>.BackendProtocol &lt;span style="color:#4e9a06">&amp;#34;FCGI&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> include /etc/nginx/fastcgi_params&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$location&lt;/span>.FastCGI.Index -&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fastcgi_index &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.FastCGI.Index &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span>- end -&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$k&lt;/span>, &lt;span style="color:#000">$v&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$location&lt;/span>.FastCGI.Params &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> fastcgi_param &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$k&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$v&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> quote &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.Redirect.URL&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Redirect.Code &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Redirect.URL &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> buildProxyPass &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#000">$all&lt;/span>.Backends &lt;span style="color:#000">$location&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>or &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyRedirectFrom &lt;span style="color:#4e9a06">&amp;#34;default&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyRedirectFrom &lt;span style="color:#4e9a06">&amp;#34;off&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_redirect &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyRedirectFrom &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>eq &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyRedirectTo &lt;span style="color:#4e9a06">&amp;#34;off&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_redirect &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyRedirectFrom &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.Proxy.ProxyRedirectTo &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">else&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># Location denied. Reason: {{ $location.Denied | quote }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 503&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.ProxySSL.CAFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># PEM sha: {{ $location.ProxySSL.CASHA }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_trusted_certificate &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.CAFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_ciphers &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.Ciphers &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_protocols &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.Protocols &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_verify &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.Verify &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_verify_depth &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.VerifyDepth &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.ProxySSL.ProxySSLName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_name &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.ProxySSLName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.ProxySSL.ProxySSLServerName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_server_name &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.ProxySSLServerName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> not &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>empty &lt;span style="color:#000">$location&lt;/span>.ProxySSL.PemFileName&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_certificate &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.PemFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> proxy_ssl_certificate_key &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$location&lt;/span>.ProxySSL.PemFileName &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> eq &lt;span style="color:#000">$server&lt;/span>.Hostname &lt;span style="color:#4e9a06">&amp;#34;_&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># health checks in cloud providers require the use of port {{ $all.ListenPorts.HTTP }}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$all&lt;/span>.HealthzURI &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.EnableOpentracing &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> opentracing off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">return&lt;/span> 200&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># this is required to avoid error if nginx is being monitored&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># with an external software (like sysdig)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> location /nginx_status &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.Cfg.EnableOpentracing &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> opentracing off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$v&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.NginxStatusIpv4Whitelist &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> allow &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$v&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#000">$all&lt;/span>.IsIPV6Enabled -&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> range &lt;span style="color:#000">$v&lt;/span> :&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">$all&lt;/span>.NginxStatusIpv6Whitelist &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> allow &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> &lt;span style="color:#000">$v&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end -&lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> deny all&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> access_log off&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stub_status on&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{{&lt;/span> end &lt;span style="color:#ce5c00;font-weight:bold">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>