Nginx、OpenResty和Kong的基本概念与使用方法

2018年10月10日 22:46:08 李佶澳 阅读数 322更多

分类专栏: kubernetes
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

作者: 李佶澳   转载请保留:原文地址   发布时间:2018-09-29 15:41:50 +0800

说明

NginxOpenRestryKong这三个项目紧密相连: Nginx是模块化设计的反向代理软件,C语言开发; OpenResty是以Nginx为核心的Web开发平台,可以解析执行Lua脚本(OpenResty与Lua的关系,类似于Jvm与Java,不过Java可以做的事情太多了,OpenResty主要用来做Web、API等); Kong是一个OpenResty应用,是一个api gateway,具有API管理和请求代理的功能。

Nginx

Nginx是HTTP Server、反向代理服务器、邮件代理服务器、通用的TCP/UDP代理服务器。nginx features详细列出了nginx的功能特性。

Nginx配置文件,指令与变量

Nginx的配置文件由单指令(simple directive)块指令(block directive)组成,单指令只有一行,以“;”结尾,块指令后面是用“{ }”包裹的多行内容。

有些块指令后的花括号中可以继续包含单指令,这样的块指令被成为配置上下文(context),这样的指令有:events、http、server、location等。

context是嵌套的,最外层的context是main context,配置文件中不在{}的中指令都是位于main context中。

events和http指令位于main context,server位于http context,location位于server context:

  1.  
    main context
  2.  
    - events
  3.  
    - http
  4.  
    - server
  5.  
    - location

配置文件示例见: Beginner’s Guide,例如:

  1.  
    http {
  2.  
    server {
  3.  
    listen 8080; # server监听端口,不指定默认80
  4.  
    root /data/up1; # 默认文件查找根目录
  5.  
     
  6.  
    # 将请求按照uri进行分组处理
  7.  
    location / { # 选择最常匹配的location,如果不匹配任何location,返回404
  8.  
    root /data/www; # 文件查找根目录,覆盖server中的root配置
  9.  
    }
  10.  
     
  11.  
    # uri路径匹配,优先级低于下面的正则匹配!
  12.  
    location /images/ {
  13.  
    root /data;
  14.  
    }
  15.  
     
  16.  
    # 使用正则表达式匹配(必须带有"~ "前缀):匹配文件后缀名
  17.  
    location ~ \.(gif|jpg|png)$ { # 优先级高于uri路径匹配
  18.  
    root /data/images;
  19.  
    }
  20.  
     
  21.  
    # 作为代理服务器的配置方法
  22.  
    location /proxy/ { # 将uri匹配的请求转发到proxy_pass指定的地址
  23.  
    proxy_pass http://IP地址:8080;
  24.  
    }
  25.  
     
  26.  
    # 将请求代理到FastCGI
  27.  
    # fastcgi_param是按照FastCGI的要求传递的参数,可以有多个,后面的`$XXX`是Nginx变量,拼成了参数的值
  28.  
    location /fastcgi/ {
  29.  
    fastcgi_pass localhost:9000; # fastCGI服务的地址
  30.  
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 传给fastCGI服务的参数: SCRIPT_FILENAME
  31.  
    fastcgi_param QUERY_STRING $query_string; # 传给fastCGI服务的参数: QUERY_STRING
  32.  
    }
  33.  
    }
  34.  
    }

上面的例子中的proxy_passfactcgi_pass分别是nginx的http proxy modulehttp fastcgi moudle中指令。

Nginx有很多的module,在Nginx Documents中可以查看每个modules的用法。

Nginx: Alphabetical index of directives中列出了Nginx的所有指令。

Nginx: Alphabetical index of variables中列出了可以在配置文件中使用的所有变量。

在查看Nginx指令用法的时候,注意指令的context:

  1.  
    Syntax: gzip on | off;
  2.  
    Default: gzip off;
  3.  
    Context: http, server, location, if in location # 可以使用gzip指令的地方

Nginx作为TCP/UDP负载均衡器

Nginx原本只能做7层(http)代理,在1.9.0版本中增加了4层(TCP/UDP)代理功能。

4层代理功能在Nginx的ngx_stream_core_module模块中实现,但默认没有编译,需要在编译时指定: –with-stream。

使用配置如下:

  1.  
    worker_processes auto;
  2.  
     
  3.  
    error_log /var/log/nginx/error.log info;
  4.  
     
  5.  
    events {
  6.  
    worker_connections 1024;
  7.  
    }
  8.  
     
  9.  
    stream {
  10.  
    upstream backend {
  11.  
    hash $remote_addr consistent;
  12.  
     
  13.  
    server backend1.example.com:12345 weight=5;
  14.  
    server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
  15.  
    server unix:/tmp/backend3;
  16.  
    }
  17.  
     
  18.  
    upstream dns {
  19.  
    server 192.168.0.1:53535;
  20.  
    server dns.example.com:53;
  21.  
    }
  22.  
     
  23.  
    server {
  24.  
    listen 12345;
  25.  
    proxy_connect_timeout 1s;
  26.  
    proxy_timeout 3s;
  27.  
    proxy_pass backend;
  28.  
    }
  29.  
     
  30.  
    server {
  31.  
    listen 127.0.0.1:53 udp reuseport;
  32.  
    proxy_timeout 20s;
  33.  
    proxy_pass dns;
  34.  
    }
  35.  
     
  36.  
    server {
  37.  
    listen [::1]:12345;
  38.  
    proxy_pass unix:/tmp/stream.socket;
  39.  
    }
  40.  
    }

Nginx模块

理解Nginx Module很重要,因为后面的OpenResty就是标准的Nginx加上很多Nginx Module。

Nginx是用C语言开发软件,采用模块化设计,可以通过开发模块扩展Nginx的功能。

Nginx Development guide中介绍了Nginx模块开发的方法Nginx Module develop

插件可以编译成.so以后动态加载,也可以直接编译到nginx中,编译是通过--add-module指定要集成的模块。

例如lua-nginx-module

  1.  
    ./configure --prefix=/opt/nginx \
  2.  
    --with-ld-opt="-Wl,-rpath,/path/to/luajit-or-lua/lib" \
  3.  
    --add-module=/path/to/ngx_devel_kit \
  4.  
    --add-module=/path/to/lua-nginx-module

OpenResty

OpenResty是一个集成了Nginx、LuaJIT和其它很多moudels的平台,用来托管完整的web应用——包含业务逻辑,而不单纯是静态文件服务器: OpenResty® aims to run your server-side web app completely in the Nginx server, leveraging Nginx’s event model to do non-blocking I/O not only with the HTTP clients, but also with remote backends like MySQL, PostgreSQL, Memcached, and Redis.

OpenResty Components中列出了OpenResty集成的组件,数量不少,这里就不列出来了。

先通过OpenResty Getting Started感受一下OpenResty是咋回事。

OpenResty安装

Centos安装方式:

  1.  
    sudo yum install yum-utils
  2.  
    sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
  3.  
    sudo yum install openresty
  4.  
    sudo yum install openresty-resty

通过源代码编译:

  1.  
    wget https://openresty.org/download/openresty-1.13.6.2.tar.gz
  2.  
    tar -xvf openresty-1.13.6.2.tar.gz
  3.  
    cd openresty-1.13.6.2/
  4.  
    ./configure --with-pcre-jit --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_v2_module
  5.  
    make -j2
  6.  
    make install //默认安装在/usr/local/bin/openresty
  7.  
    export PATH=/usr/local/openresty/bin:$PATH

为了后面顺利的使用kong,configure时要指定kong依赖的模块。

都包含以下文件:

  1.  
    $ tree -L 2 /usr/local/openresty/
  2.  
    /usr/local/openresty/
  3.  
    |-- bin
  4.  
    | |-- md2pod.pl
  5.  
    | |-- nginx-xml2pod
  6.  
    | |-- openresty -> /usr/local/openresty/nginx/sbin/nginx
  7.  
    | |-- opm
  8.  
    | |-- resty
  9.  
    | |-- restydoc
  10.  
    | `-- restydoc-index
  11.  
    |-- COPYRIGHT
  12.  
    |-- luajit
  13.  
    | |-- bin
  14.  
    | |-- include
  15.  
    | |-- lib
  16.  
    | `-- share
  17.  
    ...

注意openresty命令就是nginx命令,OpenResty可以理解为一个集成了很多模块的定制版nginx:

  1.  
    $ openresty -h
  2.  
    nginx version: openresty/1.13.6.2
  3.  
    Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
  4.  
     
  5.  
    Options:
  6.  
    -?,-h : this help
  7.  
    -v : show version and exit
  8.  
    -V : show version and configure options then exit
  9.  
    -t : test configuration and exit
  10.  
    -T : test configuration, dump it and exit
  11.  
    -q : suppress non-error messages during configuration testing
  12.  
    -s signal : send signal to a master process: stop, quit, reopen, reload
  13.  
    -p prefix : set prefix path (default: /usr/local/openresty/nginx/)
  14.  
    -c filename : set configuration file (default: conf/nginx.conf)
  15.  
    -g directives : set global directives out of configuration file

可以在openresty的配置文件中写入lua代码:

  1.  
    $ cat nginx.conf
  2.  
    worker_processes 1;
  3.  
    error_log logs/error.log;
  4.  
    events {
  5.  
    worker_connections 1024;
  6.  
    }
  7.  
    http {
  8.  
    server {
  9.  
    listen 8080;
  10.  
    location / {
  11.  
    default_type text/html;
  12.  
    content_by_lua '
  13.  
    ngx.say("<p>hello, world</p>")
  14.  
    ';
  15.  
    }
  16.  
    }
  17.  
    }

启动:

openresty -p `pwd` -c nginx.conf

然后访问”127.0.0.1:8080”,可以看到输出:

  1.  
    $ curl 127.0.0.1:8080
  2.  
    <p>hello, world</p>

Kong

Kong是一个OpenResty应用,用来管理api。

Kong编译安装

Kong编译安装时需要先安装有OpenResty。

还需要lua包管理工具luarocks:

  1.  
    git clone git://github.com/luarocks/luarocks.git
  2.  
    ./configure --lua-suffix=jit --with-lua=/usr/local/openresty/luajit --with-lua-include=/usr/local/openresty/luajit/include/luajit-2.1
  3.  
    make install

下载kong代码编译:

  1.  
    git clone https://github.com/Kong/kong.git
  2.  
    cd kong
  3.  
    make install

编译完成之后会在当前目录生成一个bin目录:

  1.  
    $ ls bin/
  2.  
    busted kong

查看bin/kong的内容,可以发现这是一个用resty执行的脚本文件:

  1.  
    $ cat bin/kong
  2.  
    #!/usr/bin/env resty
  3.  
     
  4.  
    require "luarocks.loader"
  5.  
     
  6.  
    package.path = "./?.lua;./?/init.lua;" .. package.path
  7.  
     
  8.  
    require("kong.cmd.init")(arg)

启动Kong

先准备数据库,kong支持PostgreSQL和Cassandra 3.x.x,这里使用PostgreSQL(需要版本在9.4及以上):

注意,如果使用其它版本的PostgreSQL,将下面的9.6换成对应版本号。

  1.  
    yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
  2.  
    yum install postgresql96
  3.  
    yum install postgresql96-server
  4.  
    export PATH=$PATH:/usr/pgsql-9.6/bin/
  5.  
    postgresql96-setup initdb
  6.  
    systemctl start postgresql-9.6
  7.  
    su - postgres
  8.  
    psql
  9.  
    CREATE USER kong; CREATE DATABASE kong OWNER kong;
  10.  
    alter user kong with encrypted password '123456';
  11.  
    \q

在/var/lib/pgsql/9.6/data/pg_hba.conf的开始处添加规则下面规则:

host    kong            kong            127.0.0.1/32            md5

然后重启PostgreSQL,确保下面的命令能登陆PostgreSQL:

  1.  
    # psql -h 127.0.0.1 -U kong kong -W
  2.  
    Password for user kong:
  3.  
    psql (9.6.10)
  4.  
    Type "help" for help.
  5.  
     
  6.  
    kong=>

PostgreSQL的部署使用和通过密码登陆方式的设置参考:PostgresSQL数据库的基本使用PostgreSQL的用户到底是这么回事?新用户怎样才能用密码登陆?

准备kong的配置文件,

  1.  
    cp kong.conf.default kong.conf
  2.  
    # 在kong.conf中填入数据地址、用户、密码等

创建kong的数据库:

./bin/kong migrations up -c ./kong.conf

启动kong:

./bin/kong start -c ./kong.conf

kong默认的代理地址是:

proxy_listen = 0.0.0.0:8000, 0.0.0.0:8443

默认的管理地址是:

admin_listen = 127.0.0.1:8001, 127.0.0.1:8444 ssl

返回的是json字符串:

  1.  
    $ curl -i http://localhost:8001/
  2.  
    HTTP/1.1 200 OK
  3.  
    Date: Sat, 29 Sep 2018 08:56:51 GMT
  4.  
    Content-Type: application/json; charset=utf-8
  5.  
    Connection: keep-alive
  6.  
    Access-Control-Allow-Origin: *
  7.  
    Server: kong/0.14.1
  8.  
    Content-Length: 5667
  9.  
     
  10.  
    {"plugins":{"enabled_in_cluster":[],"availab...
  11.  
     

部署Kong Dashboard

PGBI/kong-dashboard是一个第三方的Dashboard。

  1.  
    docker run --rm -p 8080:8080 pgbi/kong-dashboard start \
  2.  
    --kong-url http://kong:8001
  3.  
    --basic-auth user1=password1 user2=password2

Kong的使用

停止:

kong stop

重新加载:

kong reload

注册API:添加服务、配置路由

添加服务Configuring a Service

添加一个名为example-service的服务,服务地址是http://mockbin.org

  1.  
    curl -i -X POST \
  2.  
    --url http://localhost:8001/services/ \
  3.  
    --data 'name=example-service' \
  4.  
    --data 'url=http://mockbin.org'

执行后返回:

  1.  
    {
  2.  
    "connect_timeout": 60000,
  3.  
    "created_at": 1538213979,
  4.  
    "host": "mockbin.org",
  5.  
    "id": "ebed2707-e2fb-4694-9e8e-fb66fe9dd7c8",
  6.  
    "name": "example-service",
  7.  
    "path": null,
  8.  
    "port": 80,
  9.  
    "protocol": "http",
  10.  
    "read_timeout": 60000,
  11.  
    "retries": 5,
  12.  
    "updated_at": 1538213979,
  13.  
    "write_timeout": 60000
  14.  
    }

example-service添加一个route,满足route的请求将被转发给example-service,执行:

  1.  
    curl -i -X POST \
  2.  
    --url http://localhost:8001/services/example-service/routes \
  3.  
    --data 'hosts[]=example.com'

这里配置的route条件是:host为example.com。

返回:

  1.  
    {
  2.  
    "created_at": 1538185340,
  3.  
    "hosts": [
  4.  
    "example.com"
  5.  
    ],
  6.  
    "id": "4738ae2c-b64a-4fe5-9e2a-5855e769a9e8",
  7.  
    "methods": null,
  8.  
    "paths": null,
  9.  
    "preserve_host": false,
  10.  
    "protocols": [
  11.  
    "http",
  12.  
    "https"
  13.  
    ],
  14.  
    "regex_priority": 0,
  15.  
    "service": {
  16.  
    "id": "ebed2707-e2fb-4694-9e8e-fb66fe9dd7c8"
  17.  
    },
  18.  
    "strip_path": true,
  19.  
    "updated_at": 1538185340
  20.  
    }

这时候访问kong的proxy地址时,如果host为example.com,请求被转发到http://mockbin.org

  1.  
    curl -i -X GET \
  2.  
    --url http://localhost:8000/ \
  3.  
    --header 'Host: example.com'

可以在/etc/hostsname中将example.com地址配置为kong所在的机器的地址:

10.10.192.35 example.com

然后就可以通过example.com:8000打开http://mockbin.org。

插件启用方法

插件是用来扩展API的,例如为API添加认证、设置ACL、限制速率等、集成oauth、ldap等。

Kong Plugins中列出了已有的所有插件。

这里演示key-auth插件的用法,Kong Enabling Plugins,。

  1.  
    curl -i -X POST \
  2.  
    --url http://localhost:8001/services/example-service/plugins/ \
  3.  
    --data 'name=key-auth'

返回:

  1.  
    {
  2.  
    "config": {
  3.  
    "anonymous": "",
  4.  
    "hide_credentials": false,
  5.  
    "key_in_body": false,
  6.  
    "key_names": [
  7.  
    "apikey"
  8.  
    ],
  9.  
    "run_on_preflight": true
  10.  
    },
  11.  
    "created_at": 1538218948000,
  12.  
    "enabled": true,
  13.  
    "id": "f25f3952-d0d4-4923-baac-860554fc2fc1",
  14.  
    "name": "key-auth",
  15.  
    "service_id": "ebed2707-e2fb-4694-9e8e-fb66fe9dd7c8"
  16.  
    }

这时候直接访问example.com,会返回401:

  1.  
    curl -i -X GET \
  2.  
    > --url http://localhost:8000/ \
  3.  
    > --header 'Host: example.com'
  4.  
    HTTP/1.1 401 Unauthorized
  5.  
    Date: Sat, 29 Sep 2018 11:03:55 GMT
  6.  
    Content-Type: application/json; charset=utf-8
  7.  
    Connection: keep-alive
  8.  
    WWW-Authenticate: Key realm="kong"
  9.  
    Server: kong/0.14.1
  10.  
    Content-Length: 41

在kong中创建一个名为Jason的用户:

  1.  
    curl -i -X POST \
  2.  
    --url http://localhost:8001/consumers/ \
  3.  
    --data "username=Jason"

返回:

  1.  
    {
  2.  
    "created_at": 1538219225,
  3.  
    "custom_id": null,
  4.  
    "id": "f2450962-e4bb-477f-8df6-85984eb94e09",
  5.  
    "username": "Jason"
  6.  
    }

将Jason的密码设置为123456:

  1.  
    curl -i -X POST \
  2.  
    --url http://localhost:8001/consumers/Jason/key-auth/ \
  3.  
    --data 'key=123456'

返回:

  1.  
    {
  2.  
    "consumer_id": "f2450962-e4bb-477f-8df6-85984eb94e09",
  3.  
    "created_at": 1538219311000,
  4.  
    "id": "0332d36f-61b9-425a-b563-510c11a85e85",
  5.  
    "key": "123456"
  6.  
    }

这时候可以用Jason的key访问API:

  1.  
    curl -i -X GET \
  2.  
    --url http://localhost:8000 \
  3.  
    --header "Host: example.com" \
  4.  
    --header "apikey: 123456"

返回的是mockbin.org的首页。

key-auth插件的详细用法参考Kong Plugin: key-auth。插件的作用范围可以是全局(global)、服务(service)、路由(router)。

启用key-auth后,通过认证的请求被转发给上游服务时,key-auth会增设下面的字段:

  1.  
    X-Consumer-ID, the ID of the Consumer on Kong
  2.  
    X-Consumer-Custom-ID, the custom_id of the Consumer (if set)
  3.  
    X-Consumer-Username, the username of the Consumer (if set)
  4.  
    X-Credential-Username, the username of the Credential (only if the consumer is not the 'anonymous' consumer)
  5.  
    X-Anonymous-Consumer, will be set to true when authentication failed, and the 'anonymous' consumer was set instead.

Kong的插件

Kong Plugins中列出了已有的所有插件,有些插件只能在企业版使用,有些插件是社区成员开发的,大部分是Kong公司开发,并集成到社区版中。

下面是社区版集成的、Kong公司维护的插件(2018-09-30 14:33:03):

认证插件:

  1.  
    Basic Auth
  2.  
    HMAC Auth
  3.  
    JWT Auth
  4.  
    Key Auth
  5.  
    LDAP Auth
  6.  
    OAuth 2.0 Auth

安全插件:

  1.  
    Bot Detection (机器人检测)
  2.  
    CORS (跨域请求)
  3.  
    IP Restriction (IP限制)

流控插件:

  1.  
    ACL (访问控制)
  2.  
    Rate Limiting (限速)
  3.  
    Request Size Limiting
  4.  
    Request Termination
  5.  
    Response Rate Limiting

微服务插件:

  1.  
    AWS Lambda
  2.  
    Azure Functions
  3.  
    Apache OpenWhisk
  4.  
    Serverless Functions

分析和监控插件:

  1.  
    Datadog
  2.  
    Prometheus
  3.  
    Zipkin

内容修改插件(Transformations):

  1.  
    Correlation ID
  2.  
    Request Transformer
  3.  
    Response Transformer

日志插件:

  1.  
    File Log
  2.  
    HTTP Log
  3.  
    Loggly
  4.  
    StatsD
  5.  
    Syslog
  6.  
    TCP Log
  7.  
    UDP Log

Kong与Kubernetes的集成

经过前面的学习,对Api网关是什么,以及Kong能够做什么已经有了足够的了解。现在Kubernetes一统计算资源与应用发布编排的趋势已经形成,我们更关心Kong能否和Kubernetes结合。

Kong是一个Api网关,也是一个特性更丰富的反向代理,既然它有代理流量的功能,那么能不能直接成为Kubernetes的流量入口?使Kubernetes内部的服务都通过Kong发布。

Kong实现了一个Kubernetes Ingress Controller来做这件事。在Kubernetes中部署kong的方法见Kong CE or EE on Kubernetes

这部分内容比较多,单独开篇了: Kubernetes与API网关Kong的集成

遇到的问题

ERROR: module ‘socket’ not found:No LuaRocks module found for socket

启动的时候:

  1.  
    # ./bin/kong start -c ./kong.conf
  2.  
    ...
  3.  
    ERROR: ./kong/globalpatches.lua:63: module 'socket' not found:No LuaRocks module found for socket
  4.  
    ...

这是因为编译kong之后,重新编译了luarocks,并且将luarocks安装在了其它位置。重新编译kong之后解决。

ERROR: function to_regclass(unknown) does not exist (8)

创建数据库的时候:

  1.  
    # kong migrations up -c ./kong.conf
  2.  
    ...
  3.  
    [postgres error] could not retrieve current migrations: [postgres error] ERROR: function to_regclass(unknown) does not exist (8)
  4.  
    ...

这是因为PostgreSQL的版本太低了,to_regclass在PostgreSQL 9.4及以上的版本中才存在。

  1.  
    yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
  2.  
    yum install postgresql96
  3.  
    yum install postgresql96-server

nginx: [emerg] unknown directive “real_ip_header” in /usr/local/kong/nginx-kong.conf:73

nginx: [emerg] unknown directive "real_ip_header" in /usr/local/kong/nginx-kong.conf:73

这是因为编译的openresty的时候,没有指定--with-http_realip_module,重新编译安装:

  1.  
    ./configure --with-pcre-jit --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_v2_module
  2.  
    make -j2
  3.  
    make install //默认安装在/usr/local/bin/openresty
  4.  
    export PATH=/usr/local/openresty/bin:$PATH

参考

  1. nginx website
  2. OpenResty website
  3. Kong website
  4. Kong Compile Source
  5. nginx features
  6. nginx documentation
  7. Nginx Example Configuration & Directives
  8. Nginx: Alphabetical index of directives
  9. Nginx: Alphabetical index of variables
  10. Beginner’s Guide
  11. Nginx: ngx_http_fastcgi_module
  12. Nginx: ngx_http_proxy_module
  13. Nginx Documents
  14. Nginx: Module ngx_stream_core_module
  15. OpenResty website
  16. OpenResty Components
  17. OpenResty Getting Started
  18. Nginx Development guide
  19. Nginx Module develop
  20. PostgreSQL的用户到底是这么回事?新用户怎样才能用密码登陆?
  21. PostgresSQL数据库的基本使用
  22. Kong Enabling Plugins
  23. Kong Plugin: key-auth
  24. Kong Plugins
  25. Kong CE or EE on Kubernetes
  26. Kong/kubernetes-ingress-controller
  27. PGBI/kong-dashboard

限时活动,每邀请一人即返回25元!

相关文章

《深入剖析Kubernetes》专栏的阅读笔记(持续更新)

Kubernetes网络方案Flannel的学习笔记

《左耳听风》陈皓专栏的阅读笔记(持续更新)

Kubernetes1.12从零开始(五):自己动手部署Kubernetes(待续)

Kubernetes1.12从零开始(四):必须先讲一下基本概念

Kubernetes1.12从零开始(三):用minikube与kubeadm部署

Kubernetes1.12从零开始(二):部署环境准备

Kubernetes1.12从零开始(一):官方文档汇总

API网关Kong与Kubernetes的集成方法

PostgreSQL的用户到底是这么回事?新用户怎样才能用密码登陆?

Nginx、OpenResty和Kong的基本概念与使用方法的更多相关文章

  1. Kong03-Nginx、OpenResty、Kong 的基本概念和区别联系

    Nginx.OpenRestry.Kong 这三个项目关系比较紧密: Nginx 是模块化设计的反向代理软件,C语言开发: OpenResty 是以 Nginx 为核心的 Web 开发平台,可以解析执 ...

  2. 我眼中的 Nginx(六):深入 Nginx/Openresty 服务里的 DNS 解析

    张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的 ...

  3. 使用NGINX+Openresty和unixhot_waf开源防火墙实现WAF功能

    使用NGINX+Openresty实现WAF功能 一.了解WAF1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: ...

  4. 基于 orange(nginx+openresty) + docker 实现微服务 网关功能

    摘要 基于 orange(nginx+openresty) + docker 实现微服务 网关功能 ;以实现 docker 独立容器 来跑 独立语言独立环境 在 同一个授权下 运行相关组合程序..年初 ...

  5. Nginx出现413 Request Entity Too Large错误解决方法

    Nginx出现的413 Request Entity Too Large错误,这个错误一般在上传文件的时候出现,打开nginx主配置文件nginx.conf,找到http{}段,添加 解决方法就是 打 ...

  6. AWS Python SDK boto3中的基本概念与使用方法

    最近在用boto3编写AWS的lamda函数,学习到了boto3中的一些基本概念与使用方法.在此进行总结. 1. boto3提供了两个级别的接口来访问AWS服务:High Level的Resource ...

  7. Nginx出现“413 Request Entity Too Large”错误解决方法

    Nginx出现“413 Request Entity Too Large”错误解决方法 2011-03-25 13:49:55|  分类: 默认分类 |  标签:413  request  entit ...

  8. UIImageView图片视图的基本概念和使用方法

    IOS学习笔记(十)之UIImageView图片视图的基本概念和使用方法(博客地址: http://blog.csdn.net/developer_jiangqq ) Author:hmjiangqq ...

  9. 使用nginx的rewrite实现代理指定文件夹命令方法

    使用nginx的rewrite实现代理指定文件夹命令方法 使用nginx代理Tomcat,Tomcat公布web的时候通常都是带着项目名称的. 比方项目名称为"aven".那么公布 ...

随机推荐

  1. From 7.29 To 8.4

    From 7.29 To 8.4 大纲 英语按时背 做点思维题 可能还有时间学点东西, 这周我也不知道应该干什么 7.29 上午考试, 终于有一回不是自闭的考试了 题目比较简单, 就不说了 7.30 ...

  2. CTF中PHP反序列化和命令注入的一次简单利用

    代码来自第六届防灾科技学院网络安全技能大赛,侵删. 目标 获取Linux服务器根目录下的flag 代码 /*home.php*/ class home{ private $method; privat ...

  3. DIV盒子模型介绍 div用法

  4. ADB命令指令控制Android系统的WIFI连接开启/关闭状态

    Android系统的usb调试已开启,连接电脑(有ADB环境) 1.在cmd中,进入shell指令模式 adb shell 2.进入ROOT指令模式 su 3. 打开WIFI指令 svc wifi e ...

  5. Nginx在Linux安装详解及问题处理

    Linux编译安装 1.nginx 依赖于prce库,要先安装pcre. #yum install prce pcre-devel 2.下载解压nginx #cd /usr/local/src/ #w ...

  6. LVS集群

    集群: 将许多小的,性能较低的服务器做成一个大的性能高的超级服务器 集群分为负载均衡集群,高可用集群,高性能运算集群 LVS体系结构与工作原理描述 LVS集群负载均衡器接受服务的所有入站客户端计算机请 ...

  7. wait_timeout 和 interactive_timeout

    wait_timeout 和 interactive_timeout Table of Contents 1. 参数说明 2. 原代码 3. interactive_timeout覆盖wait_tim ...

  8. Matlab获取一个文件夹下所有文件名

    Matlab获取一个文件夹下所有文件名: fileFolder=fullfile('D:\MATLAB\bin\trc'); dirOutput=dir(fullfile(fileFolder,'*. ...

  9. 1、vinc = vict 胜、征服

  10. Linux 查看CPU和内存的使用情况

    Linux 查看CPU和内存的使用情况 如何查看Linux机器的CPU和内存的使用情况. 可以通过如下方式: 1.查看CPU和内存的实时使用情况 使用如下命令: top 命令执行后,效果如下(资源的使 ...