การทำ 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
มันถึงจะรีไดเรคให้
จบละ เขียนไว้กันลืม