nginx-to-higress-migration by alibaba/higress
npx skills add https://github.com/alibaba/higress --skill nginx-to-higress-migration在 Kubernetes 环境中自动化从 ingress-nginx 迁移到 Higress。
开始之前: Higress 不 支持以下 nginx 注解:
nginx.ingress.kubernetes.io/server-snippetnginx.ingress.kubernetes.io/configuration-snippetnginx.ingress.kubernetes.io/http-snippet
这些注解将被 静默忽略 ,导致功能丢失!
迁移前检查(必需):
kubectl get ingress -A -o yaml | grep -E "snippet" | wc -l如果计数 > 0,你必须在迁移前规划 WASM 插件替代方案。替代方案请参见第 6 阶段。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
备份所有 Ingress 资源
kubectl get ingress -A -o yaml > ingress-backup.yaml
识别 snippet 使用情况(参见上方警告)
列出所有正在使用的 nginx 注解
kubectl get ingress -A -o yaml | grep "nginx.ingress.kubernetes.io" | sort | uniq -c
验证每个注解与 Higress 的兼容性(参见 annotation-mapping.md)
为不支持的功能规划 WASM 插件
准备测试环境(推荐使用 Kind/Minikube 进行测试)
# 检查 ingress-nginx 安装情况
kubectl get pods -A | grep ingress-nginx
kubectl get ingressclass
# 列出所有使用 nginx 类的 Ingress 资源
kubectl get ingress -A -o json | jq '.items[] | select(.spec.ingressClassName=="nginx" or .metadata.annotations["kubernetes.io/ingress.class"]=="nginx")'
# 获取 nginx ConfigMap
kubectl get configmap -n ingress-nginx ingress-nginx-controller -o yaml
运行分析脚本以识别不支持的功能:
./scripts/analyze-ingress.sh [namespace]
关键点:无需修改 Ingress!
Higress 原生支持 nginx.ingress.kubernetes.io/* 注解 - 你现有的 Ingress 资源可以直接工作。
支持的完整注解列表请参见 references/annotation-mapping.md。
不支持的注解(需要内置插件或自定义 WASM 插件):
nginx.ingress.kubernetes.io/server-snippetnginx.ingress.kubernetes.io/configuration-snippetnginx.ingress.kubernetes.io/lua-resty-waf*对于这些,请先检查 references/builtin-plugins.md - Higress 可能已经有相应的插件!
Higress 原生支持 nginx.ingress.kubernetes.io/* 注解。为了安全的并行测试,请 与 nginx 一起 安装 Higress。
# 1. 获取当前 nginx ingressClass 名称
INGRESS_CLASS=$(kubectl get ingressclass -o jsonpath='{.items[?(@.spec.controller=="k8s.io/ingress-nginx")].metadata.name}')
echo "Current nginx ingressClass: $INGRESS_CLASS"
# 2. 检测时区并选择最近的镜像仓库
# 中国/亚洲:higress-registry.cn-hangzhou.cr.aliyuncs.com (默认)
# 北美:higress-registry.us-west-1.cr.aliyuncs.com
# 东南亚:higress-registry.ap-southeast-7.cr.aliyuncs.com
TZ_OFFSET=$(date +%z)
case "$TZ_OFFSET" in
-1*|-0*) REGISTRY="higress-registry.us-west-1.cr.aliyuncs.com" ;; # 美洲
+07*|+08*|+09*) REGISTRY="higress-registry.cn-hangzhou.cr.aliyuncs.com" ;; # 亚洲
+05*|+06*) REGISTRY="higress-registry.ap-southeast-7.cr.aliyuncs.com" ;; # 东南亚
*) REGISTRY="higress-registry.cn-hangzhou.cr.aliyuncs.com" ;; # 默认
esac
echo "Using registry: $REGISTRY"
# 3. 添加 Higress 仓库
helm repo add higress https://higress.io/helm-charts
helm repo update
# 4. 使用并行安全设置安装 Higress
# 注意:覆盖所有组件的 hub 以使用选定的镜像仓库
helm install higress higress/higress \
-n higress-system --create-namespace \
--set global.ingressClass=${INGRESS_CLASS:-nginx} \
--set global.hub=${REGISTRY}/higress \
--set global.enableStatus=false \
--set higress-core.controller.hub=${REGISTRY}/higress \
--set higress-core.gateway.hub=${REGISTRY}/higress \
--set higress-core.pilot.hub=${REGISTRY}/higress \
--set higress-core.pluginServer.hub=${REGISTRY}/higress \
--set higress-core.gateway.replicas=2
关键 helm 参数:
global.ingressClass: 使用与 ingress-nginx 相同 的类global.hub: 镜像仓库(根据时区自动选择)global.enableStatus=false: 禁用 Ingress 状态更新 以避免与 nginx 冲突(减轻 API 服务器压力)nginx.ingress.kubernetes.io/* 注解⚠️ 注意:卸载 nginx 后,你可以启用状态更新:
helm upgrade higress higress/higress -n higress-system \
--reuse-values \
--set global.enableStatus=true
在 Kind 或本地 Kubernetes 集群中,LoadBalancer 服务将保持 PENDING 状态。使用以下方法之一:
选项 1:端口转发(测试推荐)
# 将 Higress 网关转发到本地端口
kubectl port-forward -n higress-system svc/higress-gateway 8080:80 8443:443 &
# 使用 Host 头进行测试
curl -H "Host: example.com" http://localhost:8080/
选项 2:NodePort
# 将服务修补为 NodePort
kubectl patch svc -n higress-system higress-gateway \
-p '{"spec":{"type":"NodePort"}}'
# 获取分配的端口
NODE_PORT=$(kubectl get svc -n higress-system higress-gateway \
-o jsonpath='{.spec.ports[?(@.port==80)].nodePort}')
# 测试(Kind 使用 docker 容器 IP)
curl -H "Host: example.com" http://localhost:${NODE_PORT}/
选项 3:带端口映射的 Kind(需要重新创建集群)
# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 80
- containerPort: 30443
hostPort: 443
Higress 运行后,生成一个覆盖所有 Ingress 路由的测试脚本:
# 生成测试脚本
./scripts/generate-migration-test.sh > migration-test.sh
chmod +x migration-test.sh
# 获取 Higress 网关地址
# 选项 A:如果支持 LoadBalancer
HIGRESS_IP=$(kubectl get svc -n higress-system higress-gateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# 选项 B:如果不支持 LoadBalancer,使用端口转发
kubectl port-forward -n higress-system svc/higress-gateway 8080:80 &
HIGRESS_IP="127.0.0.1:8080"
# 运行测试
./migration-test.sh ${HIGRESS_IP}
测试脚本将:
⚠️ 仅在所有测试通过后继续!
根据基础设施选择切换方法:
选项 A:DNS 切换
# 更新 DNS 记录指向 Higress 网关 IP
# 示例:example.com A 记录 -> ${HIGRESS_IP}
选项 B:第 4 层代理/负载均衡器切换
# 在你的 L4 代理中更新上游(例如,F5、HAProxy、云 LB)
# 从:nginx-ingress-controller 服务 IP
# 到:higress-gateway 服务 IP
选项 C:Kubernetes 服务切换(如果通过 Service 使用外部流量)
# 更新你的面向外部的 Service 选择器或端点
在编写自定义插件之前,先检查 Higress 是否有满足你需求的内置插件!
Higress 提供了许多内置插件。完整列表请查看 references/builtin-plugins.md。
nginx 功能的常见替代方案:
| nginx 功能 | Higress 内置插件 |
|---|---|
| Basic Auth snippet | basic-auth |
| IP 限制 | ip-restriction |
| 速率限制 | key-rate-limit, cluster-key-rate-limit |
| WAF/ModSecurity | waf |
| 请求验证 | request-validation |
| 机器人检测 | bot-detect |
| JWT 认证 | jwt-auth |
| CORS 头 | cors |
| 自定义响应 | custom-response |
| 请求/响应转换 | transformer |
| nginx snippet 模式 | Higress 解决方案 |
|---|---|
自定义健康端点 (location /health) | WASM 插件:custom-location |
| 添加响应头 | WASM 插件:custom-response-headers |
| 请求验证/阻止 | 带有 OnHttpRequestHeaders 的 WASM 插件 |
| Lua 速率限制 | key-rate-limit 插件 |
当 nginx snippets 或 Lua 逻辑没有内置等效方案时:
cd plugin-dir
go mod tidy
GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o main.wasm ./
4. 推送到镜像仓库:
如果你没有镜像仓库,请安装 Harbor:
./scripts/install-harbor.sh
# 按照提示在你的集群中安装 Harbor
如果你有自己的镜像仓库:
# 构建 OCI 镜像
docker build -t <registry>/higress-plugin-<name>:v1 .
docker push <registry>/higress-plugin-<name>:v1
5. 部署插件:
apiVersion: extensions.higress.io/v1alpha1
kind: WasmPlugin
metadata:
name: custom-plugin
namespace: higress-system
spec:
url: oci://<registry>/higress-plugin-<name>:v1
phase: UNSPECIFIED_PHASE
priority: 100
详细插件部署请参见 references/plugin-deployment.md。
# nginx snippet
more_set_headers "X-Custom: value";
→ 使用 headerControl 注解或使用 proxywasm.AddHttpResponseHeader() 生成插件。
# nginx snippet
if ($request_uri ~* "pattern") { return 403; }
→ 生成带有请求头/路径检查的 WASM 插件。
# nginx snippet with Lua
access_by_lua_block { ... }
→ 生成实现该逻辑的 WASM 插件。
常见模式请参见 references/snippet-patterns.md。
在流量切换之前,使用生成的测试脚本:
# 生成测试脚本
./scripts/generate-migration-test.sh > migration-test.sh
chmod +x migration-test.sh
# 获取 Higress 网关 IP
HIGRESS_IP=$(kubectl get svc -n higress-system higress-gateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# 运行所有测试
./migration-test.sh ${HIGRESS_IP}
测试脚本将:
仅在所有测试通过后进行流量切换!
症状: Ingress 显示 Ready,但 curl 返回 404
检查:
验证 IngressClass 是否与 Higress 配置匹配
kubectl get ingress <name> -o yaml | grep ingressClassName
检查控制器日志
kubectl logs -n higress-system -l app=higress-controller --tail=100
验证后端服务是否可达
kubectl run test --rm -it --image=curlimages/curl -- \
curl http://<service>.<namespace>.svc
症状: 路径未被重写,后端接收到原始路径
解决方案: 确保也设置了 use-regex: "true":
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
症状: 迁移后 nginx snippet 功能不工作
原因: Higress 不支持 snippet 注解(出于安全考虑的设计)
解决方案:
症状: HTTPS 不工作或证书错误
检查:
验证 Secret 存在且类型为 kubernetes.io/tls
kubectl get secret <secret-name> -o yaml
检查 Ingress 中的 TLS 配置
kubectl get ingress <name> -o jsonpath='{.spec.tls}'
# 查看 Higress 控制器日志
kubectl logs -n higress-system -l app=higress-controller -c higress-core
# 查看网关访问日志
kubectl logs -n higress-system -l app=higress-gateway | grep "GET\|POST"
# 检查 Envoy 配置转储
kubectl exec -n higress-system deploy/higress-gateway -c istio-proxy -- \
curl -s localhost:15000/config_dump | jq '.configs[2].dynamic_listeners'
# 查看网关统计信息
kubectl exec -n higress-system deploy/higress-gateway -c istio-proxy -- \
curl -s localhost:15000/stats | grep http
由于 nginx 在迁移期间保持运行,回滚只需将流量切换回去:
# 如果通过 DNS 切换流量:
# - 将 DNS 记录恢复为 nginx 网关 IP
# 如果通过 L4 代理切换流量:
# - 将上游恢复为 nginx 服务 IP
# Nginx 仍在运行,k8s 端无需操作
仅在流量完全迁移且稳定后:
# 1. 监控 Higress 一段时间(推荐:24-48 小时)
# 2. 备份 nginx 资源
kubectl get all -n ingress-nginx -o yaml > ingress-nginx-backup.yaml
# 3. 缩减 nginx 规模(保留用于紧急回滚)
kubectl scale deployment -n ingress-nginx ingress-nginx-controller --replicas=0
# 4. (可选)在长时间稳定运行后,移除 nginx
kubectl delete namespace ingress-nginx
每周安装次数
1
仓库
GitHub Stars
7.7K
首次出现
1 天前
安全审计
安装于
amp1
cline1
openclaw1
opencode1
cursor1
kimi-cli1
Automate migration from ingress-nginx to Higress in Kubernetes environments.
Before you begin: Higress does NOT support the following nginx annotations:
nginx.ingress.kubernetes.io/server-snippetnginx.ingress.kubernetes.io/configuration-snippetnginx.ingress.kubernetes.io/http-snippet
These annotations will be silently ignored , causing functionality loss!
Pre-migration check (REQUIRED):
kubectl get ingress -A -o yaml | grep -E "snippet" | wc -lIf count > 0, you MUST plan WASM plugin replacements before migration. See Phase 6 for alternatives.
Backup all Ingress resources
kubectl get ingress -A -o yaml > ingress-backup.yaml
Identify snippet usage (see warning above)
List all nginx annotations in use
kubectl get ingress -A -o yaml | grep "nginx.ingress.kubernetes.io" | sort | uniq -c
Verify Higress compatibility for each annotation (see annotation-mapping.md)
Plan WASM plugins for unsupported features
Prepare test environment (Kind/Minikube for testing recommended)
# Check for ingress-nginx installation
kubectl get pods -A | grep ingress-nginx
kubectl get ingressclass
# List all Ingress resources using nginx class
kubectl get ingress -A -o json | jq '.items[] | select(.spec.ingressClassName=="nginx" or .metadata.annotations["kubernetes.io/ingress.class"]=="nginx")'
# Get nginx ConfigMap
kubectl get configmap -n ingress-nginx ingress-nginx-controller -o yaml
Run the analysis script to identify unsupported features:
./scripts/analyze-ingress.sh [namespace]
Key point: No Ingress modification needed!
Higress natively supports nginx.ingress.kubernetes.io/* annotations - your existing Ingress resources work as-is.
See references/annotation-mapping.md for the complete list of supported annotations.
Unsupported annotations (require built-in plugin or custom WASM plugin):
nginx.ingress.kubernetes.io/server-snippetnginx.ingress.kubernetes.io/configuration-snippetnginx.ingress.kubernetes.io/lua-resty-waf*For these, check references/builtin-plugins.md first - Higress may already have a plugin!
Higress natively supports nginx.ingress.kubernetes.io/* annotations. Install Higress alongside nginx for safe parallel testing.
# 1. Get current nginx ingressClass name
INGRESS_CLASS=$(kubectl get ingressclass -o jsonpath='{.items[?(@.spec.controller=="k8s.io/ingress-nginx")].metadata.name}')
echo "Current nginx ingressClass: $INGRESS_CLASS"
# 2. Detect timezone and select nearest registry
# China/Asia: higress-registry.cn-hangzhou.cr.aliyuncs.com (default)
# North America: higress-registry.us-west-1.cr.aliyuncs.com
# Southeast Asia: higress-registry.ap-southeast-7.cr.aliyuncs.com
TZ_OFFSET=$(date +%z)
case "$TZ_OFFSET" in
-1*|-0*) REGISTRY="higress-registry.us-west-1.cr.aliyuncs.com" ;; # Americas
+07*|+08*|+09*) REGISTRY="higress-registry.cn-hangzhou.cr.aliyuncs.com" ;; # Asia
+05*|+06*) REGISTRY="higress-registry.ap-southeast-7.cr.aliyuncs.com" ;; # Southeast Asia
*) REGISTRY="higress-registry.cn-hangzhou.cr.aliyuncs.com" ;; # Default
esac
echo "Using registry: $REGISTRY"
# 3. Add Higress repo
helm repo add higress https://higress.io/helm-charts
helm repo update
# 4. Install Higress with parallel-safe settings
# Note: Override ALL component hubs to use the selected registry
helm install higress higress/higress \
-n higress-system --create-namespace \
--set global.ingressClass=${INGRESS_CLASS:-nginx} \
--set global.hub=${REGISTRY}/higress \
--set global.enableStatus=false \
--set higress-core.controller.hub=${REGISTRY}/higress \
--set higress-core.gateway.hub=${REGISTRY}/higress \
--set higress-core.pilot.hub=${REGISTRY}/higress \
--set higress-core.pluginServer.hub=${REGISTRY}/higress \
--set higress-core.gateway.replicas=2
Key helm values:
global.ingressClass: Use the same class as ingress-nginxglobal.hub: Image registry (auto-selected by timezone)global.enableStatus=false: Disable Ingress status updates to avoid conflicts with nginx (reduces API server pressure)nginx.ingress.kubernetes.io/* annotations⚠️ Note : After nginx is uninstalled, you can enable status updates:
helm upgrade higress higress/higress -n higress-system \
--reuse-values \
--set global.enableStatus=true
In Kind or local Kubernetes clusters, the LoadBalancer service will stay in PENDING state. Use one of these methods:
Option 1: Port Forward (Recommended for testing)
# Forward Higress gateway to local port
kubectl port-forward -n higress-system svc/higress-gateway 8080:80 8443:443 &
# Test with Host header
curl -H "Host: example.com" http://localhost:8080/
Option 2: NodePort
# Patch service to NodePort
kubectl patch svc -n higress-system higress-gateway \
-p '{"spec":{"type":"NodePort"}}'
# Get assigned port
NODE_PORT=$(kubectl get svc -n higress-system higress-gateway \
-o jsonpath='{.spec.ports[?(@.port==80)].nodePort}')
# Test (use docker container IP for Kind)
curl -H "Host: example.com" http://localhost:${NODE_PORT}/
Option 3: Kind with Port Mapping (Requires cluster recreation)
# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 80
- containerPort: 30443
hostPort: 443
After Higress is running, generate a test script covering all Ingress routes:
# Generate test script
./scripts/generate-migration-test.sh > migration-test.sh
chmod +x migration-test.sh
# Get Higress gateway address
# Option A: If LoadBalancer is supported
HIGRESS_IP=$(kubectl get svc -n higress-system higress-gateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# Option B: If LoadBalancer is NOT supported, use port-forward
kubectl port-forward -n higress-system svc/higress-gateway 8080:80 &
HIGRESS_IP="127.0.0.1:8080"
# Run tests
./migration-test.sh ${HIGRESS_IP}
The test script will:
⚠️ Only proceed after all tests pass!
Choose your cutover method based on infrastructure:
Option A: DNS Switch
# Update DNS records to point to Higress gateway IP
# Example: example.com A record -> ${HIGRESS_IP}
Option B: Layer 4 Proxy/Load Balancer Switch
# Update upstream in your L4 proxy (e.g., F5, HAProxy, cloud LB)
# From: nginx-ingress-controller service IP
# To: higress-gateway service IP
Option C: Kubernetes Service Switch (if using external traffic via Service)
# Update your external-facing Service selector or endpoints
Before writing custom plugins, check if Higress has a built-in plugin that meets your needs!
Higress provides many built-in plugins. Check references/builtin-plugins.md for the full list.
Common replacements for nginx features:
| nginx feature | Higress built-in plugin |
|---|---|
| Basic Auth snippet | basic-auth |
| IP restriction | ip-restriction |
| Rate limiting | key-rate-limit, cluster-key-rate-limit |
| WAF/ModSecurity | waf |
| Request validation | request-validation |
| Bot detection |
| nginx snippet pattern | Higress solution |
|---|---|
Custom health endpoint (location /health) | WASM plugin: custom-location |
| Add response headers | WASM plugin: custom-response-headers |
| Request validation/blocking | WASM plugin with OnHttpRequestHeaders |
| Lua rate limiting | key-rate-limit plugin |
When nginx snippets or Lua logic has no built-in equivalent:
cd plugin-dir
go mod tidy
GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o main.wasm ./
4. Push to registry :
If you don't have an image registry, install Harbor:
./scripts/install-harbor.sh
# Follow the prompts to install Harbor in your cluster
If you have your own registry:
# Build OCI image
docker build -t <registry>/higress-plugin-<name>:v1 .
docker push <registry>/higress-plugin-<name>:v1
5. Deploy plugin :
apiVersion: extensions.higress.io/v1alpha1
kind: WasmPlugin
metadata:
name: custom-plugin
namespace: higress-system
spec:
url: oci://<registry>/higress-plugin-<name>:v1
phase: UNSPECIFIED_PHASE
priority: 100
See references/plugin-deployment.md for detailed plugin deployment.
# nginx snippet
more_set_headers "X-Custom: value";
→ Use headerControl annotation or generate plugin with proxywasm.AddHttpResponseHeader().
# nginx snippet
if ($request_uri ~* "pattern") { return 403; }
→ Generate WASM plugin with request header/path check.
# nginx snippet with Lua
access_by_lua_block { ... }
→ Generate WASM plugin implementing the logic.
See references/snippet-patterns.md for common patterns.
Before traffic switch, use the generated test script:
# Generate test script
./scripts/generate-migration-test.sh > migration-test.sh
chmod +x migration-test.sh
# Get Higress gateway IP
HIGRESS_IP=$(kubectl get svc -n higress-system higress-gateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# Run all tests
./migration-test.sh ${HIGRESS_IP}
The test script will:
Only proceed with traffic cutover after all tests pass!
Symptoms: Ingress shows Ready, but curl returns 404
Check:
Verify IngressClass matches Higress config
kubectl get ingress <name> -o yaml | grep ingressClassName
Check controller logs
kubectl logs -n higress-system -l app=higress-controller --tail=100
Verify backend service is reachable
kubectl run test --rm -it --image=curlimages/curl -- \
curl http://<service>.<namespace>.svc
Symptoms: Path not being rewritten, backend receives original path
Solution: Ensure use-regex: "true" is also set:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
Symptoms: nginx snippet features not working after migration
Cause: Higress does not support snippet annotations (by design, for security)
Solution:
Symptoms: HTTPS not working or certificate errors
Check:
Verify Secret exists and is type kubernetes.io/tls
kubectl get secret <secret-name> -o yaml
Check TLS configuration in Ingress
kubectl get ingress <name> -o jsonpath='{.spec.tls}'
# View Higress controller logs
kubectl logs -n higress-system -l app=higress-controller -c higress-core
# View gateway access logs
kubectl logs -n higress-system -l app=higress-gateway | grep "GET\|POST"
# Check Envoy config dump
kubectl exec -n higress-system deploy/higress-gateway -c istio-proxy -- \
curl -s localhost:15000/config_dump | jq '.configs[2].dynamic_listeners'
# View gateway stats
kubectl exec -n higress-system deploy/higress-gateway -c istio-proxy -- \
curl -s localhost:15000/stats | grep http
Since nginx keeps running during migration, rollback is simply switching traffic back:
# If traffic was switched via DNS:
# - Revert DNS records to nginx gateway IP
# If traffic was switched via L4 proxy:
# - Revert upstream to nginx service IP
# Nginx is still running, no action needed on k8s side
Only after traffic has been fully migrated and stable:
# 1. Monitor Higress for a period (recommended: 24-48h)
# 2. Backup nginx resources
kubectl get all -n ingress-nginx -o yaml > ingress-nginx-backup.yaml
# 3. Scale down nginx (keep for emergency rollback)
kubectl scale deployment -n ingress-nginx ingress-nginx-controller --replicas=0
# 4. (Optional) After extended stable period, remove nginx
kubectl delete namespace ingress-nginx
Weekly Installs
1
Repository
GitHub Stars
7.7K
First Seen
1 day ago
Security Audits
Gen Agent Trust HubWarnSocketPassSnykWarn
Installed on
amp1
cline1
openclaw1
opencode1
cursor1
kimi-cli1
Azure Data Explorer (Kusto) 查询技能:KQL数据分析、日志遥测与时间序列处理
114,200 周安装
bot-detect| JWT auth | jwt-auth |
| CORS headers | cors |
| Custom response | custom-response |
| Request/Response transform | transformer |