ความเก่งของ 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...")
}
}
}