Websockets Support for Apache & NGINX

WebSockets เป็นเทคโนโลยีไคลเอนต์-เซิร์ฟเวอร์ที่แพร่หลายซึ่งจะช่วยในการแลกเปลี่ยนข้อความและโต้ตอบแบบทันทีภายในแอปพลิเคชันของคุณโดยสร้างการเชื่อมต่อ TCP แบบ full-duplex อย่างต่อเนื่องระหว่างเซิร์ฟเวอร์และเบราว์เซอร์ของไคลเอ็นต์ การใช้ช่องทางการสื่อสารดังกล่าวส่งผลให้ latency ต่ำมากและเกิดการโต้ตอบที่รวดเร็ว ทำให้มั่นใจได้ว่า streaming ผ่าน proxies และfirewalls ทั้ง upstream และ downstream ในเวลาเดียวกัน

Ruk-Com Cloud จัดเตรียม WebSockets ขั้นสูงและเสริมด้วยการผสานรวมเทคโนโลยีนี้เข้ากับ Shared Load Balancer and NGINX-balancer คุณจึงสามารถใช้งานได้แม้ไม่มี IP address ภายนอกแนบกับเซิร์ฟเวอร์ของคุณโดยการรับ proxy พอร์ตต่างๆที่แอป WebSockets ใช้ไปยังพอร์ตเดียว – 80 สำหรับ HTTP และ 443 สำหรับ HTTPS

วิธีการใช้ WebSockets ที่ง่ายที่สุดสำหรับแอปพลิเคชันคือวาง NGINX balancer ไว้ข้างหน้า – สามารถดูรายละเอียดได้ที่นี่ อย่างไรก็ตามวิธีการดังกล่าวอาจไม่สอดคล้องกับความต้องการของคุณในขณะที่แอปพลิเคชันยังคงต้องการใช้เทคโนโลยีนี้เพื่อนำไปปฏิบัติ ในกรณีนี้เรารองรับ WebSockets อย่างเต็มรูปแบบสำหรับแอปพลิเคชันเซิร์ฟเวอร์ที่มีอยู่ ซึ่งรวมถึง Apache (สำหรับให้บริการแอป PHP, Ruby และ Python) และ NGINX (สำหรับแอป PHP และ Ruby)

กระบวนการรวม WebSockets อาจแตกต่างกันไปในแต่ละแอปพลิเคชัน แต่สำหรับการตั้งค่าฝั่งเซิร์ฟเวอร์ Jelastic ได้จัดเตรียมตัวอย่างการกำหนดค่าสำหรับแต่ละโหนดที่กล่าวถึงข้างต้น ดังนั้นคุณสามารถ uncomment และแก้ไขเล็กน้อยตามข้อกำหนดของแอปพลิเคชันคุณ (เช่น หมายเลข listening port)

การสร้าง Environment และการ Deploy Application

1. คลิกปุ่ม New Environment ด้านบนซ้ายของแดชบอร์ด

2. ภายในหน้าต่าง Environment Wizard ที่ปรากฏขึ้นให้สลับไปที่แท็บภาษาและเลือกแอปพลิเคชันเซิร์ฟเวอร์ที่คุณต้องการ (ยกตัวอย่างแอปพลิเคชัน Apache PHP) จากนั้นเลื่อน cloudlets เพื่อกำหนดจำนวนทรัพยากร ตั้งชื่อ environment ของคุณแล้วคลิก Create

environment wizard

3. ภายในไม่กี่นาที environment ของคุณจะปรากฏในหน้าแดชบอร์ด

environment for WebSockets created

4. อัปโหลดและ deploy แอปพลิเคชันของคุณที่ Deployment Manager หรือผ่านที่จัดเก็บระยะไกล GIT/SVN (คุณสามารถดูคำแนะนำเพิ่มเติมได้ที่คู่มือ deployment)

WebSockets application deployed

โปรเจกต์ที่คุณทำการ deploy แล้วจะแสดงรายการในส่วนด้านล่างของแผงควบคุม environment

การกำหนดค่าเซิร์ฟเวอร์และแอปพลิเคชัน

WebSockets ภายใน Apache server รองรับโมดูล proxy_wstunnel_module ซึ่งถูกเพิ่มโดยค่าเริ่มต้นเมื่อสร้างเซิร์ฟเวอร์ สำหรับ NGINX server นั้นจะใช้ความสามารถของการฝัง proxy ซึ่งการเชื่อมต่อ WebSockets คล้ายกับวิธีที่ NGINX-balancer ทำ ดังนั้นมาเริ่มต้นกำหนดค่าแอปพลิเคชันของคุณตามขั้นตอนนี้

1. คลิกปุ่ม Config ถัดจากโหนดแอปเซิร์ฟเวอร์ของคุณ

Apache config

2. ในแท็บ Configuration Manager ทำตามขั้นตอนดังนี้:

  • สำหรับ Apache app server

เข้าไปที่ไดเร็กทอรี conf แล้วหาไฟล์ httpd.conf  ยกเลิกคอมเมนต์คำสั่งด้านล่างนี้ (ประมาณบรรทัดที่ 962)

<Location /ws>  
   ProxyPass ws://127.0.0.1:<PORT>  
   ProxyPassReverse ws://127.0.0.1:<PORT>  
</Location>

จากนั้นเปลี่ยนพารามิเตอร์ทั้งสองเป็นหมายเลขพอร์ตที่แอปพลิเคชัน WebSockets ของคุณ listen (เช่น 9000)

ตรวจสอบให้แน่ใจว่าคุณได้กำหนดค่าเหมือนกับรูปภาพนี้

Apache httpd conf

กดปุ่ม Save ด้านบนเพื่อบันทึก

  • สำหรับ NGINX app server

เข้าไปที่ไดเร็กทอรี conf เลือกไฟล์ nginx.conf แล้วค้นหา #Websocket และยกเลิกคอมเมนต์คำสั่งต่อไปนี้:

upstream websocket {  
    server 127.0.0.1:<PORT>;  
 }  
…  
location /ws {  
        proxy_pass http://websocket;  
        proxy_http_version 1.1;  
        proxy_set_header Upgrade $http_upgrade;  
        proxy_set_header Connection "Upgrade";  
    }

จากนั้นแทนที่ค่า <PORT> ด้วยหมายเลขพอร์ตที่เกี่ยวข้องและกดปุ่ม Save

NGINX WebSockerts configs

3. ทั้งหมดนี้คือการกำหนดค่าเซิร์ฟเวอร์ที่คุณต้องทำ จากนั้นกำหนดค่าแอปพลิเคชันที่คุณ deploy โดยเข้าไปที่ไฟล์การกำหนดค่าของแอปพลิเคชันคุณเพื่อตั้งค่า WebSockets และปรับ ws path ที่มีอยู่ในไฟล์ตามรูปแบบถัดไป:

ws://{env_domain}{path_to_ws_file}

โดยที่

  • {env_url} แทนที่ด้วยโดเมนของ environment คุณ (สามารถดูได้ที่ใต้ชื่อ environment ที่แดชบอร์ด)
  • {path_to_ws_file}  จำเป็นต้องเปลี่ยนเส้นทางไปยังไฟล์ซึ่งควรเข้าถึงได้เมื่อสร้างการเชื่อมต่อ WebSockets

application WebSockets path

4. Save และ Restart แอปพลิเคชันเซิร์ฟเวอร์ของคุณ

Apache restart

5. หลังจากรีสตาร์ทเสร็จแล้วคลิกปุ่ม Open in Browser เพื่อเรียกใช้แอปพลิเคชันของคุณในแท็บเบราว์เซอร์ใหม่

open in browser

6. คุณจะเห็นว่าแอปพลิเคชันทำงานได้แล้ว

WebSockerts chat application

คุณจะได้รับประโยชน์จากการถ่ายโอนข้อความที่รวดเร็วอย่างเห็นได้ชัดจากการใช้ WebSockets Protocol