發表日期:2018-08 文章編輯:小燈 瀏覽次數:3170
Kong的默認配置在 /etc/kong/kong.conf.default 。如果你通過一個官方的安裝包來安裝Kong。您可以復制下面的文件,開始配置Kong:
$ cp /etc/kong/kong.conf.default /etc/kong/kong.conf 如果你的配置中的所有值都被考慮,那么Kong將使用默認配置運行。在開始時,Kong可能會查找的幾個缺省配置文件位置如下:
/etc/kong/kong.conf /etc/kong.conf 您可以通過在CLI中使用-c / -conf參數自定義配置文件路徑來覆蓋此默認配置:
$ kong start --conf /path/to/kong.conf 配置格式很簡單:注釋由字符 # 定義。布爾值可以被指定為 on/off 或者true/false。
您可以使用check命令來驗證設置的完整性:
$ kong check <path/to/kong.conf> configuration at <path/to/kong.conf> is valid 這個命令,將檢測您當前設置的環境變量,并且在您的設置錯誤時報錯。
此外,您還可以在調試模式下使用CLI,以便更深入地了解正在啟動的屬性:
$ kong start -c <kong.conf> --vv 2016/08/11 14:53:36 [verbose] no config file found at /etc/kong.conf 2016/08/11 14:53:36 [verbose] no config file found at /etc/kong/kong.conf 2016/08/11 14:53:36 [debug] admin_listen = "0.0.0.0:8001" 2016/08/11 14:53:36 [debug] database = "postgres" 2016/08/11 14:53:36 [debug] log_level = "notice" [...] 當從配置文件中加載屬性時,Kong也會查找相同名稱的環境變量。這允許您通過環境變量完全配置Kong。
所有環境變量的前綴 KONG_ ,大寫并帶有與設置相同的名稱將覆蓋默認配置。
例如:
log_level = debug # in kong.conf 會被如下設置覆蓋:
$ export KONG_LOG_LEVEL=error 調整Nginx配置是設置您的Kong實例的一個重要部分,因為它允許您優化其性能,或者將Kong嵌入到已經運行的OpenResty實例中。
Kong可以用 --nginx-conf 的參數啟動,重新加載和重新啟動,該參數必須指定Nginx配置模板。這樣的模板使用了Penlight模板引擎,它是使用給定的Kong配置編譯的,然后在開始Nginx之前被保存到您的Kong前綴目錄中。
默認模板可以在https://github.com/Kong/kong/tree/master/kong/templates
找到。它分為兩個Nginx配置文件:nginx.lua 和 nginx_kong.lua。前者是運行Kong的最低的配置要求,其會包括后者。當Kong開始運行時,在開始Nginx之前,它將這兩個文件復制到前綴目錄中,看起來是這樣的:
/usr/local/kong ├── nginx-kong.conf ├── nginx.conf 如果您希望在Nginx配置中包含其他服務模塊,或者您必須調整不受Kong配置影響的全局設置,這里有一個建議:
# --------------------- # custom_nginx.template # ---------------------worker_processes ${{NGINX_WORKER_PROCESSES}}; # can be set by kong.conf daemon ${{NGINX_DAEMON}}; # can be set by kong.confpid pids/nginx.pid;# this setting is 強制的 error_log logs/error.log ${{LOG_LEVEL}}; # can be set by kong.confevents { use epoll; # custom setting multi_accept on; }http { # include default Kong Nginx config include 'nginx-kong.conf';# custom server server { listen 8888; server_name custom_server;location / { ... # etc } } } 你可以這樣啟動Kong:
$ kong start -c kong.conf --nginx-conf custom_nginx.template 如果您希望自定義Kong的Nginx子配置文件,最終添加其他Lua處理程序或定制lua_*指令,您可以在custom_nginx.template內聯nginx_kong.lua這個配置。模板示例文件如下:
# --------------------- # custom_nginx.template # ---------------------worker_processes ${{NGINX_WORKER_PROCESSES}}; # can be set by kong.conf daemon ${{NGINX_DAEMON}}; # can be set by kong.confpid pids/nginx.pid;# this setting is mandatory error_log logs/error.log ${{LOG_LEVEL}}; # can be set by kong.confevents {}http { resolver ${{DNS_RESOLVER}} ipv6=off; charset UTF-8; error_log logs/error.log ${{LOG_LEVEL}}; access_log logs/access.log;... # etc } 如果您正在運行您自己的OpenResty服務器,您也可以通過使用include指令(類似于上一節的示例)來輕松地嵌入Kong。如果您有一個有效的頂級NGINX配置,那么就可以簡單的引入Kong的配置:
# my_nginx.confhttp { include 'nginx-kong.conf'; } 你可以像這樣開始你的實例:
$ nginx -p /usr/local/openresty -c my_nginx.conf 這樣Kong就會運行在你的實例中。(Kong的配置在nginx-kong.conf里)
API提供者的一個常見用例是讓Kong在代理端口上同時服務于一個網站和API本身——在生產中有80或443。例如:https://my-api.com(網站)和https://my-api.com/api/v1(API)。
為了實現這一點,我們不能簡單地聲明一個新的虛擬服務模塊,就像我們在上一節中所做的那樣。一個好的解決方案是使用一個定制的Nginx配置模板,該模板可以內聯nginx_kong.lua。添加一個新的location塊,與Kong代理location塊一起服務于網站:
# --------------------- # custom_nginx.template # ---------------------worker_processes ${{NGINX_WORKER_PROCESSES}}; # can be set by kong.conf daemon ${{NGINX_DAEMON}}; # can be set by kong.confpid pids/nginx.pid;# this setting is mandatory error_log logs/error.log ${{LOG_LEVEL}}; # can be set by kong.conf events {}http { # here, we inline the contents of nginx_kong.lua charset UTF-8;# any contents until Kong's Proxy server block ...# Kong's Proxy server block server { server_name kong;# any contents until the location / block ...# here, we declare our custom location serving our website # (or API portal) which we can optimize for serving static assets location / { root /var/www/my-api.com; index index.htm index.html; ... }# Kong's Proxy location / has been changed to /api/v1 location /api/v1 { set $upstream_host nil; set $upstream_scheme nil; set $upstream_uri nil;# Any remaining configuration for the Proxy location ... } }# Kong's Admin server block goes below } 可以新建配置文件/etc/kong/kong.conf進行添加修改。
prefix
工作目錄。相當于Nginx的前綴路徑,包含臨時文件和日志。每個流程必須有一個單獨的工作目錄。
默認:/usr/local/kong
log_level
Nginx服務器的日志級別??梢栽?code><prefix>/logs/error.log
請參閱 http://nginx.org/en/docs/ngx_core_module.html#error_log,以獲得公認的值列表。
默認:notice
proxy_access_log
代理端口請求訪問日志的路徑。設置為off以禁用日志代理請求。如果這個值是相對路徑,那么它將被放置于前綴路徑之下。
默認:logs/access.log
proxy_error_log
代理端口請求錯誤日志的路徑。這些日志的粒度由log_level指令進行調整。
默認:logs/error.log
admin_access_log
Admin API的路徑請求訪問日志。設置為off以禁用Admin API請求日志。如果這個值是相對路徑,那么它將被放置于前綴路徑之下。
默認:logs/admin_access.log
admin_error_log
Admin API請求錯誤日志的路徑。這些日志的粒度由log_level指令進行調整。
默認:logs/error.log
custom_plugins
這個節點應該加載的附加插件的逗號分隔列表。使用這個屬性來加載與Kong不捆綁的定制插件。插件將從kong.plugins.{name}.*命名空間加載。
默認:none
示例:my-plugin,hello-world,custom-rate-limiting
anonymous_reports
發送匿名的使用數據,比如錯誤堆棧跟蹤,以幫助改進Kong。
默認:on
proxy_listen
代理服務偵聽的地址和端口的逗號分隔的列表。代理服務是Kong的公共入口點,它代理從您的使用者到您的后端服務的流量。這個值接受IPv4、IPv6和主機名。
可以為每一對指定一些后綴:
ssl 將要求通過啟用TLS的特定地址/端口進行所有連接。http2 允許客戶端打開http/2連接到Kong的代理服務proxy_protocol 將為給定的地址/端口啟用代理協議。這個節點的代理端口,啟用了“控制面板”模式(沒有流量代理功能),可以配置連接到同一數據庫的節點集群。
查看 http://nginx.org/en/docs/http/ngx_http_core_module.html#listen 用于描述這個和其他*_listen值的接受格式。
默認:0.0.0.0:8000, 0.0.0.0:8443 ssl
示例:0.0.0.0:80, 0.0.0.0:81 http2, 0.0.0.0:443 ssl, 0.0.0.0:444 http2 ssl
admin_listen
管理接口監聽的地址和端口的逗號分隔的列表。Admin接口是允許您配置和管理Kong的API。對該接口的訪問應該僅限于Kong管理員。這個值接受IPv4、IPv6和主機名。可以為每一對指定一些后綴:
ssl 將要求通過啟用TLS的特定地址/端口進行所有連接。http2 允許客戶端打開http/2連接到Kong的代理服務proxy_protocol 將為給定的地址/端口啟用代理協議。這個值可以被設置為off,從而禁用這個節點的Admin接口,從而使“數據面板”模式(沒有配置功能)從數據庫中拉出它的配置更改。
默認:127.0.0.1:8001, 127.0.0.1:8444 ssl
示例:127.0.0.1:8444 http2 ssl
nginx_user
定義工作進程使用的用戶和組憑據。如果省略組,則使用名稱與用戶名相同的組。
默認:nobody nobody
示例:nginx www
nginx_worker_processes
確定Nginx生成的工作進程的數量。請參閱http://nginx.org/en/docs/ngx_core_module.html#worker 流程,以便詳細使用該指令和對已接受值的描述。
默認值:auto
nginx_daemon
確定Nginx是否會作為守護進程或前臺進程運行。主要用于開發或在Docker環境中運行Kong。
查閱 http://nginx.org/en/docs/ngx_core_module.html#daemon.
默認:on
mem_cache_size
數據庫實體內存緩存的大小。被接受的單位是k和m,最低推薦值為幾個MBs。
默認:128m
ssl_cipher_suite
定義Nginx提供的TLS密碼。可接受的值modern, intermediate, old, or custom。請參閱 https://wiki.mozilla.org/Security/Server_Side_TLS
,了解每個密碼套件的詳細描述。
默認值:modern
ssl_ciphers
定義一個由Nginx提供的LTS ciphers的自定義列表。這個列表必須符合openssl ciphers定義的模式。如果ssl_cipher_suite不是custom,那么這個值就會被忽略。
默認值:none
ssl_cert
啟用SSL時,proxy_listen的SSL證書的絕對路徑。
默認值:none
ssl_cert_key
啟用SSL時,proxy_listen的SSL key的絕對路徑。
默認值:none
client_ssl
當代理請求時,確定Nginx是否應該發送客戶端SSL證書。
默認值:off
client_ssl_cert
如果啟用了client_ssl,用于proxy_ssl_certificate配置的客戶端SSL證書的絕對路徑。注意,這個值是靜態地在節點上定義的,并且當前不能在每個api的基礎上配置。
默認值:none
client_ssl_cert_key
如果啟用了client_ssl,用于proxy_ssl_certificate_key配置的客戶端SSL證書的絕對路徑。注意,這個值是靜態地在節點上定義的,并且當前不能在每個api的基礎上配置。
默認值:none
admin_ssl_cert
啟用了SSL后, admin_listen 的SSL證書的絕對路徑。
默認值:none
admin_ssl_cert_key
啟用了SSL后, admin_listen 的SSL key的絕對路徑。
默認值:none
upstream_keepalive
在每個工作進程,設置緩存中保存的upstream服務的空閑keepalive連接的最大數量。當超過這個數字時,會關閉最近最少使用的連接。
默認值:60
server_tokens
在錯誤頁面,和Server或Via(如果請求被代理)的響應頭字段,啟用或禁用展示Kong的版本。
默認值:on
latency_tokens
在X-Kong-Proxy-Latency和X-Kong-Upstream-Latency響應頭字段中,啟用或禁用展示Kong的潛在信息。
默認值:on
trusted_ips
定義可信的IP地址塊,使其知道如何發送正確的 X-Forwarded-* 頭部信息。來自受信任的ip的請求使Kong轉發他們的 X-Forwarded-* headers upstream。不受信任的請求使Kong插入自己的 X-Forwarded-* headers。
該屬性還在Nginx配置中設置 set_real_ip_from指令(s)。它接受相同類型的值(CIDR塊),但它是一個逗號分隔的列表。
如果相信 all /!\ IPs,請把這個值設為0.0.0.0/0,::/0。
如果特殊值unix:被指定了,所有的unix域套接字都將被信任。
查閱the Nginx docs 了解 更詳細的set_real_ip_from配置資料。
Default: none
real_ip_header
定義請求頭字段,它的值將被用來替換客戶端地址。在Nginx配置中使用相同名稱的指令 ngx_http_realip_module 設置該值。
如果這個值接收到 proxy_protocol,那么 proxy_protocol 參數將被附加到Nginx模板的 listen 指令中。
查閱 the Nginx docs 尋找更詳細的描述。
默認值: X-Real-IP
real_ip_recursive
該值設置了Nginx配置中同名的ngx_http_realip_module 指令。
查閱 the Nginx docs 尋找更詳細的描述。
默認值: off
client_max_body_size
指定在 Content-Length 的請求頭中,定義Kong代理的請求的最大被允許的請求體大小。如果請求超過這個限度,Kong將返回413(請求實體太大)。將該值設置為0將禁用檢查請求體的大小。
提示: 查閱關于the Nginx docs 這個參數的進一步描述。數值可以用k或m后綴,表示限制是千字節,還是兆字節。
默認值:0
client_body_buffer_size
定義讀取請求主體的緩沖區大小。如果客戶端請求體大于這個值,則閥體將被緩沖到磁盤。請注意,當閥體被緩沖到磁盤的時候,訪問或操縱請求主體可能無法工作,因此最好將這個值設置為盡可能高的值。(例如,將其設置為client_max_body_size,以迫使請求體保持在內存中)。請注意,高并發性環境需要大量的內存分配來處理許多并發的大型請求體。
提示: 查閱關于 the Nginx docs 這個參數的進一步描述。數值可以用k或m后綴,表示限制是千字節,還是兆字節。
默認值:8k
error_default_type
當請求Accept標頭丟失時,使用默認的MIME類型,且Nginx為這個請求返回一個錯誤??山邮艿闹蛋?text/plain, text/html, application/json, 和application/xml.
默認值:text/plain
Kong將存儲所有的數據(如api、消費者和插件)到Cassandra或PostgreSQL。
屬于同一集群的所有Kong節點都必須連接到同一個數據庫。
從Kong0.12.0開始:
PostgreSQL 9.4支持應該被認為是棄用。鼓勵用戶升級到9.5+
應該考慮支持Cassandra 2.1的支持。鼓勵用戶升級到2.2+
database
確定這個節點將使用哪個PostgreSQL或Cassandra作為它的數據存儲。可以設置為:postgres 和 cassandra。
默認值:postgres
Postgres settings
| 名稱 | 描述 |
|---|---|
| pg_host | Postgres服務器的主機 |
| pg_port | Postgres服務器的端口 |
| pg_user | Postgres用戶 |
| pg_password | Postgres用戶的密碼 |
| pg_database | 數據庫連接。必須存在 |
| pg_ssl | 啟用SSL連接到服務器 |
| pg_ssl_verify | 如果啟用了pg_ssl,則切換服務器證書驗證??吹?code>lua_ssl_trusted_certificate設置。 |
Cassandra settings
| 名稱 | 描述 |
|---|---|
| cassandra_contact_points | 指向您的Cassandra集群的鏈接點列表,使用逗號分割。 |
| cassandra_port | 你的節點監聽的端口 |
| cassandra_keyspace | 在集群中使用的關鍵空間。如果不存在,就會被創建。 |
| cassandra_consistency | 在閱讀/寫作時使用一致性設置。 |
| cassandra_timeout | 讀取/寫入 超時(ms)時間。 |
| cassandra_ssl | 啟用SSL連接到節點。 |
| cassandra_ssl_verify | 如果啟用了cassandra_ssl,則切換服務器證書驗證。查看 lua_ssl_trusted_certificate 設置。 |
| cassandra_username | 使用PasswordAuthenticator時的用戶名。 |
| cassandra_password | 在使用PasswordAuthenticator時的密碼。 |
| cassandra_consistency | 在讀取/寫入Cassandra集群時使用一致性設置。 |
| cassandra_lb_policy | 當在您的Cassandra集群中分布查詢時使用負載平衡策略??稍O置為 RoundRobin 和 DCAwareRoundRobin 。如果您使用的是多數據中心集群,則后者更好。如果是這樣,還要設置 cassandra_local_datacenter。 |
| cassandra_local_datacenter | 在使用DCAwareRoundRobin政策時,必須指定本地(最近)的集群名稱到這個Kong節點。 |
| cassandra_repl_strategy | 如果第一次創建密鑰空間,請指定復制策略。 |
| cassandra_repl_factor | 為SimpleStrategy指定一個復制因子。 |
| cassandra_data_centers | 為NetworkTopologyStrategy(網絡拓撲策略)指定數據中心。 |
| cassandra_schema_consensus_timeout | Cassandra節點之間同步scheme的超時( ms)時間。這個值只在數據遷移期間使用。 |
為了避免與數據存儲不必要的通信,Kong可配置緩存實體(比如api、消費者、憑證等等)的間隔時間。如果緩存實體被更新,它也會處理也會失效。
本節介紹關于配置Kong此類配置實體緩存。
db_update_frequency
頻率(以秒為單位),用于檢查帶有數據存儲的更新實體。當節點通過Admin API創建、更新或刪除實體時,其他節點需要等待下一次輪詢(由這個值配置),以清除舊的緩存實體并開始使用新的緩存。
默認值:5 seconds
db_update_propagation
在數據存儲中為實體所花費的時間(以秒為單位)被傳播到另一個數據中心的副本節點。當在分布式環境中,比如多數據中心Cassandra集群時,這個值應該是Cassandra將一行傳播到其他數據中心的最大秒數。當設置了該值,該屬性將增加Kong傳播實體變更所花費的時間。單數據中心設置或PostgreSQL服務器不應該受到這樣的延遲,并且這個值可以安全地設置為0。
默認值: 0 seconds
db_cache_ttl
該節點數據存儲實體緩存的生存時間(以秒為單位)。數據庫遺漏(沒有實體)也會根據這個設置進行緩存。如果設置為0,那么這種緩存的實體/遺漏永遠不會過期。
默認值:3600 seconds(1小時)
Kong將把主機名解析為 SRV 或 A 記錄(按照該順序,CNAME 記錄將在此過程中被取消)。如果一個名稱被解析為SRV記錄,它會通過從DNS服務器接收到端口以覆蓋給定的端口號。
DNS選項SEARCH和NDOTS(來自/etc/resolv.conf 文件)將被用于將短名稱擴展到完全限定的名稱。因此,它將首先嘗試完整 SEARCH SRV類型的列表,如果失敗,它將會嘗試SEARCH A記錄列表,等等。
在ttl的持續時間內,內部DNS解析器將對DNS記錄的條目上做負載均衡請求。對于SRV記錄,可以設置權重,但是它只會使用記錄中最低優先級字段條目。
dns_resolver
設置域名服務器列表,使用逗號分隔。格式如: ip[:port] 。如果沒有制定域名服務器,name就使用本地 resolv.conf 文件。端口默認為53。可以使用IPv4和IPv6地址。
默認值: none
dns_hostsfile
要使用的主機文件。這個文件只被讀取一次,然后會存儲在內存中。要在修改后想再次讀取該文件,必須重新加載Kong。
默認值:/etc/hosts
dns_order
解決不同記錄類型的順序。LAST類型指的是最后一次成功的查找的類型(對于指定的名稱)。格式是一個(大小寫不敏感)逗號分隔的列表。
默認值: LAST,SRV,A,CNAME
dns_stale_ttl
定義在緩存中保存DNS記錄的TTL時間。當新的DNS記錄在后臺獲取時,這個值將被使用。陳舊的數據將從記錄的過期時間使用,直到刷新查詢完成,或者dns_stale_ttl的秒數已經過去。
默認值:4
dns_not_found_ttl
空DNS響應和 "(3) name error" 響應的TTL時間(以秒為單位)
默認值:30
dns_error_ttl
錯誤響應的TTL時間(以秒為單位)
默認值:1
dns_no_sync
如果啟用了,那么在cache-miss時,每個請求都會觸發自己的dns查詢。當為相同的名稱/類型禁用多個請求時,將同步到單個查詢。
默認值: off
從lua-nginx-module繼承的附加設置,可以更靈活和更高級的使用。
有關更多信息,請參見lua-nginx-module文檔:https://github.com/openresty/lua-nginx-module
lua_ssl_trusted_certificate
在PEM格式的Lua cosockets的證書權威文件的絕對路徑。該證書將用于驗證Kong的數據庫連接,當啟用pg_ssl_verify或cassandra_ssl_verify時。
詳情查閱:https://github.com/openresty/lua-nginx-module#lua_ssl_trusted_certificate
默認值: none
lua_ssl_verify_depth
在Lua cosockets使用的服務器證書鏈中設置驗證深度,通過lua_ssl_trusted_certificate 設置。
這包括為Kong的數據庫連接配置的證書。
詳情查閱: https://github.com/openresty/lua-nginx-module#lua_ssl_verify_depth
默認值: 1
lua_package_path
設置Lua模塊搜索路徑(LUA_PATH)。在默認搜索路徑中,開發或使用不存儲的自定義插件時非常有用。
詳情查閱:https://github.com/openresty/lua-nginx-module#lua_package_path
默認值: none
lua_package_cpath
設置Lua C模塊搜索路徑(LUA_CPATH)。
詳情查閱:https://github.com/openresty/lua-nginx-module#lua_package_cpath
默認值: none
lua_socket_pool_size
指定與每個遠程服務器相關聯的每個cosocket連接池的大小限制。
詳情查閱:https://github.com/openresty/lua-nginx-module#lua_socket_pool_size
默認值:30
穿梭機:開源API網關系統(Kong教程)入門到精通