Hi community,

      APISIX is using config file and apisix bin file to generate nginx
config file.

     This provides APISIX the capability of overriding nginx's default
configurations, but also introduces some problems:

   1. There is only one nginx server which supports the dynamic features of
   APISIX.
   2. Due to point 1, all listening ports are configured in the only server.
   3. As a consequence of this setting, some features from nginx can be
   difficult to support in APISIX. For example,
      1. Configuring mTLS is easy in nginx
         1. It's easy to configure a new server in apisix bin
         2. The new server will lose all the dynamic features of APISIX.
      2. Using proxy protocol and real ip module along with normal requests
      with a different real ip header
         1. If we use proxy protocol, normally the real ip header will be
         configured proxy_protocol
         2. The normal requests normally use x-forwarded-for or x-real-ip
         as real ip header
         3. It's impossible to configure both x-forwarded-for and
         proxy_protocol in apisix

      So I want to propose:

   1. Introduce a new kind of configuration in config.yaml: "server" under
   "apisix".
      1. "server" is almost the same as nginx's server.
      2. If a server is configured a port is necessary, no matter if it's
      http, https or proxy protocol http...
      3. "location" should not be included here since being dynamic often
      means dynamic to locations.
   2. All configurations configured directly under "apisix" are global
   configurations which will apply to all servers.
   3. All configurations can be overridden inside the server, the
   configuration is the same as under "apisix".

       With this, we can better embrace the features from both apisix and
nginx.

Reply via email to