Kong force HTTPS

API Gateway Aug 30, 2019

การทำ Redirect HTTP ไป HTTPS ใน NGINX จะใช้ คอนฟิกประมาณนี้

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

แล้ว Kong ละมันทำยังไง ?

มีคนถามไว้นานแล้ว ที่ Kong Nation ว่า "Redirect Kong non SSL to SSL" เมื่อตอน 20 April 2018 อห. นานแล้วนี่หว่า มีหลายๆคนมาคอนเม้นตอบ วิธีการ work around เช่น แก้ nginx custom template ของ kong หรือใช้ Pre-Function ที่เป็น Serverless Plugin ของ Kong ในการเช็ค scheme ก็ช่วยตัวเองกันไป

Kong ก็ฟังคนใช้แหละ แต่กว่าจะออกมารองรับ ก็ที่ Version 1.2.0 จิ้มไปดู CHANGELOG ได้ที่ https://github.com/Kong/kong/blob/master/CHANGELOG.md#core-6

จากบล็อกที่แล้ว เรื่อง "KONG DB-LESS HTTPS CONFIG" จะใช้ได้ทั้ง HTTP/HTTPS ถ้าอยากให้ใช้ได้แค่ HTTPS อย่างเดียว ถ้าเข้า HTTP ให้รีไดเรคไป HTTPS แก้คอนฟิกตามนี้

_format_version: '1.1'
services:
- name: httpbin-svc
  url: http://httpbin.org/
  routes:
  - name: httpbin-route
    hosts:
    - kong.dev
    protocols:
    - https
    https_redirect_status_code: 302

certificates:
- cert: "-----BEGIN CERTIFICATE-----..."
  key: "-----BEGIN PRIVATE KEY-----..."
  snis:
  - name: kong.dev

ที่เพิ่มมาคือ protocols และ https_redirect_status_code ซึ่ง 2 ตัวนี้มีค่า default ของมันอยู่ คือ

  • protocols: ["http", "https" ]
  • https_redirect_status_code: 426

ถ้าไม่แก้ protocols ให้เหลืออันเดียว มันจะใช้ได้ทั้ง HTTP/HTTPS ต้องแก้ และถ้าไม่แก้ https_redirect_status_code มันจะไม่รีไดเรค แต่จะได้ error นี้คือ

curl -v kong.dev
* Rebuilt URL to: kong.dev/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to kong.dev (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: kong.dev
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 426
< Date: Fri, 30 Aug 2019 11:33:37 GMT
< Content-Type: application/json; charset=utf-8
< Connection: keep-alive
< Connection: Upgrade
< Upgrade: TLS/1.2, HTTP/1.1
< Content-Length: 39
<
* Connection #0 to host kong.dev left intact
{"message":"Please use HTTPS protocol"}

ถ้าแก้ให้เป็น 301, 302 มันถึงจะรีไดเรคให้

จบละ เขียนไว้กันลืม

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.