Openresty ไม่ใช่แค่ http แล้ว

ความเก่งของ Nginx อย่างนึงคือ Config ที่ยืดหยุ่นสามารถปรับแต่งให้ทำงานเหมือนเขียนโปรแกรมเลยทีเดียว ยิ่งมี Lua เข้ามาช่วยยิ่งทำให้ Nginx หลายเป็น Web App Server ที่ทำงานได้เร็วและมีประสิทธิภาพมากขึ้นไปอีก แต่ทั้งหมดที่เราพูดถึงมันคือ http server เมื่อเวลาผ่านไป แค่ http เล็กไปซะแล้วสำหรับ Nginx
การเปิดตัว Nginx Stream Module ที่ลงไปรองรับ TCP , UDP (ลิงค์) ได้ตรงๆถือเป็น Feature ใหม่ที่น่าจับตามอง นั่นหมายความว่า Nginx สามารถลงไปแทน HAProxy เพื่อจะทำ Proxy และ Loadbalance ให้กับทุก Service ไม่ว่าจะเป็น MySQL , DNS Server และ อื่นๆ ลำพังแต่ Config เดิมของ Nginx ก็ใช้งานไ้ด้มีประสิทธิภาพดีอยู่แล้ว แต่ยังไม่จบแค่นั้น เมื่อ Openrety ได้พัฒนา Lua สำหรับ Nginx stream ( ลิงค์ ) ออกมา เพิ่มความสามารถให้กับ Nginx Stream ทำให้การพัฒนา feature เพิ้มเติมทำได้หลากหลายมากขึน

ตัวอย่าง Code SSL TCP Server

stream {
    server {
        listen 4343 ssl;

        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /path/to/cert.pem;
        ssl_certificate_key /path/to/cert.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        content_by_lua_block {
            local sock = assert(ngx.req.socket(true))
            local data = sock:receive()  -- read a line from downstream
            if data == "thunder!" then
                ngx.say("flash!")  -- output data
            else
                ngx.say("boom!")
            end
            ngx.say("the end...")
        }
    }
}