nginx playground
(jvns.ca)<p>- เพลย์กราวด์สำหรับทดสอบที่สามารถแก้ไขการตั้งค่า nginx ได้ตามต้องการ <br />
→ ป้อน config และคำสั่ง `curl`/`http` แล้วกด Run เพื่อรัน<br />
→ แสดงผลลัพธ์ของคำสั่งที่รันและ nginx error log <br />
- ฟรอนต์เอนด์ Vue.js + แบ็กเอนด์ Go (เปิดเผยเฉพาะโค้ดฝั่งเซิร์ฟเวอร์ผ่าน Gist)<br />
- เมื่อกดปุ่มรัน แบ็กเอนด์ Go จะทำสิ่งต่อไปนี้ <br />
→ บันทึกไฟล์ config เป็นไฟล์ temp<br />
→ สร้าง network namespace ใหม่ <br />
ip netns add $RANDOM_NAMESPACE_NAME<br />
→ รัน go-httpbin บนพอร์ต 777<br />
→ เริ่ม nginx<br />
→ รอ 100ms จนกว่า nginx จะเริ่มทำงานได้อย่างถูกต้อง ถ้าล้มเหลวจะส่งคืน nginx error log<br />
→ รันคำสั่งที่ผู้ใช้ป้อน (ตรวจสอบว่าเป็น `curl` / `http` หรือไม่)<br />
→ ส่งคืนเอาต์พุตของคำขอ <br />
- จัดการทุกคำขอด้วยเซิร์ฟเวอร์ที่ใช้ร่วมกันเพียงเครื่องเดียว <br />
<br />
- แนวทางด้านความปลอดภัย: แยกส่วนเล็กน้อย และ YOLO เล็กน้อย <br />
→ ฟรอนต์เอนด์โฮสต์อยู่บน CDN <br />
→ ไม่ใช้ DB ใช้เฉพาะ local storage ของเบราว์เซอร์<br />
→ ให้ nginx แต่ละตัวอยู่ใน network namespace ของตัวเอง และปิดกั้นไม่ให้ออกอินเทอร์เน็ต <br />
→ ใช้ free tier ของ fly.io <br />
→ ใส่ไว้ใน FAQ ให้ทุกคนทำตัวดี ๆ ต่อกัน <br />
<br />
- ประสิทธิภาพ<br />
→ อินสแตนซ์ขนาดเล็กมาก (1 shared CPU, RAM 256MB)<br />
→ ฟรอนต์เอนด์อยู่บน CDN ดังนั้นแบ็กเอนด์จะทำงานเฉพาะตอนใช้งานจริงเท่านั้น<br />
→ หนึ่งคำขอใช้เวลาประมาณ 400ms ก็ถือว่าไม่เลว <br />
→ httpbin เวอร์ชัน Go เบากว่าเวอร์ชัน Python ต้นฉบับ <br />
→ ประสิทธิภาพฝั่งฟรอนต์เอนด์ไม่ค่อยดีนัก </p>
ยังไม่มีความคิดเห็น