---
title: "Configuring the Gateway"
date: 0001-01-01
summary: "Configuration #  The configuration of INFINI Gateway can be modified in multiple ways.
CLI Parameters #  INFINI Gateway provides the following CLI parameters:
✗ ./bin/gateway --help Usage of ./bin/gateway: -config string the location of config file, default: gateway.yml (default &quot;gateway.yml&quot;) -debug run in debug mode, gateway will quit with panic error -log string the log level,options:trace,debug,info,warn,error (default &quot;info&quot;) -v version The parameters are described as follows:
 config: Specifies the name of a configuration file."
---


# Configuration

The configuration of INFINI Gateway can be modified in multiple ways.

## CLI Parameters

INFINI Gateway provides the following CLI parameters:

```
✗ ./bin/gateway --help
Usage of ./bin/gateway:
  -config string
        the location of config file, default: gateway.yml (default "gateway.yml")
  -debug
        run in debug mode, gateway will quit with panic error
  -log string
        the log level,options:trace,debug,info,warn,error (default "info")
  -v    version
```

The parameters are described as follows:

- config: Specifies the name of a configuration file. The default configuration file name is `gateway.yml` in the directory where the currently executed command is located. If your configuration file is stored elsewhere, you can specify the parameter to select it.
- daemon: Switches the gateway to the background. It needs to be used jointly with `pidfile` to save the process ID and facilitate subsequent process operations.

## Configuration File

Most of the configuration of INFINI Gateway can be completed using `gateway.yml`. After the configuration is modified, the gateway program needs to be restarted to make the configuration take effect.

### Defining an Entry

Each gateway must expose at least one service entrance to receive operation requests of services. In INFINI Gateway, the service entrance is called an `entry`, which can be defined using the following parameters:

```
entry:
  - name: es_gateway
    enabled: true
    router: default
    network:
      binding: 0.0.0.0:8000
```

The above configuration defines one service entry named `es_gateway`, the address listened to is `0.0.0.0:8000`, and one router named `default` is used to process requests.

### Defining a Router

INFINI Gateway judges the flow direction based on routers. A typical example of router configuration is as follows:

```
router:
  - name: default
    default_flow: cache_first
```

This example defines one router named `default`, which is also the main flow for service handling. Request forwarding, filtering, caching, and other operations are performed in this flow.

### Defining a Flow

One request flow defines a series of work units for request handling. It adopts a typical pipeline work mode. One typical configuration example is as follows:

```
flow:
  - name: cache_first
    filter:
      - get_cache:
      - elasticsearch:
          elasticsearch: prod
      - set_cache:
```

The configuration example defines a flow named `cache_first`, which uses three different filters: `get_cache`, `elasticsearch`, and `set_cache`. These filters are executed in their configuration sequence. Note that each filter name must be appended with one colon (`:`).
The processing results of the filters are as follows:

- get_cache: This filter is mainly used to get data from the cache. If the same request has been received before and data is cached in the cache, which is within the validity period, this filter can directly take and return the cached data immediately, without further processing.
- elasticsearch: This filter is used to forward requests to back-end Elasticsearch clusters and further transfer responses returned by Elasticsearch.
- set_cache: This filter caches execution results to the local memory. It has some parameter restrictions such as the status code and request size, and expiration time is set for the filter so that results in the cache can be used directly when the same request is received next time. It is generally used together with `get_cache`.

### Defining a Resource

Resources here refer to Elasticsearch back-end server resources. INFINI Gateway supports multiple Elasticsearch clusters. It can forward requests to different clusters and supports blue/green deployment and smooth evolution under canary deployment of requests. The following example shows how to define an Elasticsearch back-end resource.

```
elasticsearch:
- name: prod
  enabled: true
  endpoint: http://192.168.3.201:9200
  discovery:
    enabled: true
    refresh:
      enabled: true
  basic_auth:
    username: elastic
    password: pass
```

The `endpoint` parameter is used to set the access address for Elasticsearch. If identity authentication is enabled for Elasticsearch, you can use `basic_auth` to specify the username and password and the user must have the permission to obtain cluster status information.
The `discover` parameter is used to enable automatic discovery to automatically detect the status of back-end nodes and identify new and offline nodes.

After these basic configurations have been completed, INFINI Gateway can normally handle Elasticsearch requests as a proxy. For details about parameters of each component, see the [Reference](../references/filters/).

