如何配置Kong force HTTP重定向到HTTPS?

时间:2018-05-29 10:04:34

标签: kong

作为kong doc https://getkong.org/docs/0.13.x/admin-api/#add-certificate,如果我们希望我们的网站支持https,我们应该这样做:

curl -i -X POST \
  --url http://localhost:8001/certificates \
  --data 'cert =-----BEGIN CERTIFICATE-----...'
  --data 'key =-----BEGIN RSA PRIVATE KEY-----..'
  --data 'snis =example.com'

现在,该网站正在支持https,但它也支持http。 我们如何强制http重定向到https

ps:有一个插件(https://getkong.org/plugins/dynamic-ssl)。它有一个选项config.only_https=true。它似乎强制到https。但是,dynamic-ssl插件和/certificates api之间有什么区别。

5 个答案:

答案 0 :(得分:1)

我知道为时已晚,也许您找到了答案,这个答案是针对像我这样面临相同问题的其他人的:

在Kong中创建API时,如here所述,您可以强制协议为HTTPS,但是在将重定向 HTTP流量重定向到HTTPS的参考中似乎没有说明。我发现的唯一方法是更改​​Kong的nginx模板并将所有请求强制重定向到https,但这不是我想要的... 顺便说一句,您可以通过创建与this link中讨论的模板非常相似的模板并添加以下配置来实现此目的:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
    }

然后您应该使用kong start --nginx-conf custom_nginx.template

运行kong实例

然后,Kong将在nginx中使用您的服务器阻止规则。

答案 1 :(得分:0)

M-N 相同。我也想提供我的解决方案:

您可以使用以下Kong插件:https://github.com/dsteinkopf/kong-http-to-https-redirect。 这是一个分支,因为原始项目与Kong 1.x不兼容。

1)我将其克隆到/usr/local/share/lua/5.1/kong/plugins/http-to-https-redirect

2)我在Kong YAML配置中添加了此插件:

plugins:
  # ... my plugins
  name: http-to-https-redirect

希望有帮助。

答案 2 :(得分:0)

有点晚了,您可以使用功能前插件重定向到https

spring.jackson.serialization.write-durations-as-timestamps=false

https://github.com/Kong/kong/issues/1946#issuecomment-485830359

答案 3 :(得分:0)

转到您要重定向到https的服务,在插件上选择->添加插件->无服务器->功能前功能并将以下值粘贴到功能上。

local scheme = kong.request.get_scheme()
if scheme == "http" then
  local host = kong.request.get_host()
  local query = kong.request.get_path_with_query()
  local url = "https://" .. host ..query
  kong.response.set_header("Location",url)
  return kong.response.exit(302,url)
end

答案 4 :(得分:0)

您不需要覆盖完整的 NGINX 模板,也不需要使用任何插件。您可以编写包含指令并将代码片段包含在 Kong 配置文件的 HTTP 块中。

首先,编写HTTPS重定向规则。我将此文件放在 /etc/kong/nginx-https.conf:

server {
    listen      80;
    server_name api.mysite.com;
    return 301 https://$server_name$request_uri;
}

然后在 /etc/kong/kong.conf 的 Kong 配置文件中,我包含了代码片段:

........
........
nginx_http_include = /etc/kong/nginx-https.conf

然后我重新启动了 Kong 服务。有关这方面的更多信息,请访问官方网站 here