Varnish Cache + NGINX Reverse Proxy ทำงานอย่างไร

เผยแพร่แล้ว: 2022-08-09

ในบทความนี้เราจะพูดถึง Varnish cache NGINX reverse proxy และวิธีตั้งค่า

พร็อกซีเซิร์ฟเวอร์ที่เน้นการแคช HTTP คือวานิช มันถูกสร้างขึ้นเพื่อเป็นตัวเร่ง HTTP และอาจทำหน้าที่เป็น reverse proxy สำหรับเว็บเซิร์ฟเวอร์ Apache หรือ NGINX ของคุณ เว็บไซต์ที่มีทราฟฟิกจำนวนมากและมีชื่อเสียงสูงได้ใช้วานิช

สารบัญ

วานิชแคชคืออะไร?

สำหรับบริษัทที่ทำงานบนเว็บ แคชมักเป็นซอฟต์แวร์ที่สำคัญที่สุด Varnish Cache เป็นเอ็นจิ้น HTTP แบบโอเพ่นซอร์สที่ทรงพลัง/พร็อกซี HTTP แบบย้อนกลับ ซึ่งทำหน้าที่ตรงตามชื่อของมันอย่างแท้จริง: แคช (หรือจัดเก็บ) สำเนาของหน้าเว็บในครั้งแรกที่ผู้เข้าชมดู อาจทำให้เว็บไซต์เร็วขึ้นถึง 1,000 เปอร์เซ็นต์ วานิชส่งคำขอไปยังเซิร์ฟเวอร์ของคุณเพียงครั้งเดียวเพื่อแคชหน้า หลังจากนั้นจะจัดการคำขอใดๆ ที่ตามมาสำหรับหน้าเดียวกัน ส่งผลให้มีการส่งเนื้อหาที่รวดเร็วอย่างไม่น่าเชื่อและความต้องการทรัพยากรเซิร์ฟเวอร์แบ็กเอนด์น้อยลง

  • ความสามารถหลักของวานิชคือความเร็วและประสิทธิภาพ
  • การประหยัดโครงสร้างพื้นฐานของเซิร์ฟเวอร์
  • ความสามารถในการปรับขนาด - วานิชช่วยให้ไซต์ของคุณตอบสนองความต้องการโดยไม่คำนึงถึงปริมาณผู้เยี่ยมชมหรือคำขอ
  • การป้องกันไฟดับ: วานิชยังคงให้บริการข้อมูลแคชแม้ว่าเซิร์ฟเวอร์ของคุณจะล่ม
  • ความยืดหยุ่น: ภาษาการกำหนดค่าวานิช (VCL) ช่วยให้สามารถสร้างโซลูชัน กฎเกณฑ์ และโมดูลเฉพาะได้
  • ปรับปรุงประสบการณ์ผู้ใช้

วานิชแคชทำงานอย่างไร

ก่อนที่มันจะไปถึงแบ็กเอนด์ของเว็บเซิร์ฟเวอร์ของคุณ วานิชจะประมวลผลคำขอที่เข้ามาทั้งหมด แคชของมันจัดการปริมาณการใช้งานเว็บทั้งหมดและตามค่าเริ่มต้นจะรีเฟรชทุกสองนาที

วานิชแคช Nginx Reverse Proxy

วานิชจะกำหนดเส้นทางคำขอไปยังแบ็กเอนด์ของเว็บเซิร์ฟเวอร์และแคชผลลัพธ์ ดังที่เราเพิ่งเห็นในย่อหน้า reverse proxy ทั่วไป หากคำขอไม่ได้ถูกแคชไว้

เมื่อคำขอถูกแคชแล้ว คำขอเหล่านั้นจะถูกใส่ลงในหน่วยความจำ และจากนั้นสามารถเรียกค้นและส่งไปยังลูกค้าได้อย่างรวดเร็ว วานิชใช้ภาษา VCL เพื่อแสดงการตั้งค่า นโยบายการแคช และกฎอื่นๆ (ภาษาการกำหนดค่าวานิช)

คุณสามารถตอบกลับคำขอแต่ละรายการได้โดยใช้ภาษานี้และรูปแบบต่างๆ ตัวอย่างเช่น คุณอาจส่งคำขอบางรายการไปยังแบ็กเอนด์เฉพาะหรือสั่งให้วานิชดำเนินการต่าง ๆ ตามลักษณะของคำขอที่เข้ามาหรือผลลัพธ์ของมัน

เนื้อหาที่แคชอาจยังคงให้บริการได้แม้ว่าเว็บเซิร์ฟเวอร์จะไม่พร้อมใช้งาน เนื่องจากคุณลักษณะในตัวที่เรียกว่าการโพลแบ็กเอนด์ ซึ่งเป็นฟังก์ชันวานิชที่น่าทึ่งอีกฟังก์ชันหนึ่ง วานิชจะยังคงจัดเตรียมเนื้อหาที่แคชไว้สำหรับกรอบเวลาที่เรียกว่าเวลาผ่อนผัน หากตรวจพบว่ามีการหยุดทำงาน การโพลแบ็กเอนด์สอบถามเซิร์ฟเวอร์ด้วยความถี่ที่คุณอาจตั้งค่าแบบยืดหยุ่นได้

Nginx คืออะไร?

NGINX เป็นซอฟต์แวร์โอเพนซอร์ซที่อาจใช้สำหรับการสตรีมวิดีโอ การแคช พร็อกซีย้อนกลับ การให้บริการเว็บ และฟังก์ชันอื่นๆ เดิมทีเริ่มต้นจากการเป็นเว็บเซิร์ฟเวอร์ที่สร้างขึ้นเพื่อความเร็วและความเชื่อถือได้สูงสุด NGINX อาจทำงานเป็นเซิร์ฟเวอร์ HTTP เซิร์ฟเวอร์พร็อกซีอีเมล (IMAP, POP3 และ SMTP) พร็อกซีย้อนกลับ และโหลดบาลานเซอร์สำหรับเซิร์ฟเวอร์ HTTP, TCP และ UDP นอกเหนือจากทำหน้าที่เป็นเซิร์ฟเวอร์ HTTP

พร็อกซีย้อนกลับคืออะไร?

หน้าที่หลักของ reverse proxy คือการป้องกันเว็บเซิร์ฟเวอร์จากการรับส่งข้อมูลที่เข้ามา คำขอเชื่อมต่อแต่ละรายการได้รับจากพร็อกซีย้อนกลับ ซึ่งจะส่งต่อผ่านเซิร์ฟเวอร์จำนวนมากก่อนที่จะเชื่อมต่อกับเซิร์ฟเวอร์ที่จัดการคำขอ

การดำเนินการ reverse proxy แต่ละรายการมีสามขั้นตอนหลัก:

  1. การรวบรวมคำขอเชื่อมต่อ: ที่ขอบของเครือข่าย reverse proxy ยอมรับคำขอที่เข้ามา
  2. การจับมือแบบสามทางของ TCP: การเชื่อมต่อกับพร็อกซีย้อนกลับจะถูกสร้างขึ้นหลังจากการจับมือแบบสามทางของ TCP และการเชื่อมต่อครั้งแรกถูกปิด
  3. การเชื่อมต่อเซิร์ฟเวอร์ต้นทาง: ใช้ที่อยู่ IP ปลอม พร็อกซีย้อนกลับเชื่อมต่อเซิร์ฟเวอร์ต้นทางกับคำขอของไคลเอ็นต์

ผู้ใช้ไม่สามารถเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ต้นทางได้ เนื่องจากการเชื่อมต่อเว็บเบราว์เซอร์ทั้งหมดกับเว็บแอปจะทำผ่านพร็อกซีย้อนกลับเสมอ

คุณจะตั้งค่า Varnish cache Nginx reverse proxy ได้อย่างไร?

ติดตั้ง Nginx บนเซิร์ฟเวอร์ของคุณ

ก่อนอื่นเราต้องติดตั้ง Nginx จากที่เก็บ Ubuntu โดยใช้คำสั่ง apt

 sudo apt update apt install nginx -y

หลังจากการติดตั้งเสร็จสมบูรณ์ เราต้องเริ่มและเปิดใช้งาน Nginx เพื่อเปิดใช้งานทุกครั้งที่บูตระบบโดยใช้คำสั่ง systemctl

 systemctl start nginx systemctl enable nginx

กำหนดค่า Nginx บนพอร์ต 88

เราจะตั้งค่า Nginx ให้ใช้พอร์ต HTTP 8080 ที่แปลกใหม่สำหรับการทำงาน ในการดำเนินการนี้ เราต้องแก้ไขไฟล์โฮสต์เสมือนที่อยู่ในไดเร็กทอรี "sites-available"

 nano /etc/nginx/sites-available/default

เปลี่ยนค่าบรรทัด 'ฟัง' เป็น 8080 บันทึกและออก

ตรวจสอบข้อผิดพลาดโดยทดสอบการตั้งค่า Nginx ทันที เริ่มบริการใหม่หลังจากนั้น

 nginx -t systemctl restart nginx

ตรวจสอบ Nginx อีกครั้งโดยใช้ netstat และยืนยันว่ากำลังทำงานบนพอร์ต HTTP ที่ไม่เป็นทางการ 8080

 netstat -plntu

ได้รับการติดตั้งแล้ว และกำลังใช้งานพอร์ต 8080 โดยเว็บเซิร์ฟเวอร์ Nginx

ติดตั้งวานิชบน Ubuntu

เราต้องลงน้ำยาเคลือบเงาด้วยคำสั่ง apt

 sudo apt install varnish -y

ใช้คำสั่ง systemctl ที่แสดงด้านล่าง เริ่มเคลือบเงาและตั้งค่าให้เริ่มทำงานโดยอัตโนมัติเมื่อระบบบู๊ต

 systemctl start varnish systemctl enable varnish

โดยค่าเริ่มต้น วานิชจะใช้พอร์ต 6082 สำหรับเว็บอินเตอร์เฟสของผู้ดูแลระบบ และพอร์ต 6081 สำหรับการเข้าถึงแบบสาธารณะ ตรวจสอบให้แน่ใจว่าพอร์ตบางพอร์ตอยู่ในรายการโดยใช้คำสั่ง netstat เพื่อตรวจสอบ

 netstat -plntu

ติดตั้งตัวเร่ง HTTP วานิชแล้ว

กำหนดค่าวานิชเป็น reverse proxy สำหรับ Nginx

ในฐานะพร็อกซีย้อนกลับสำหรับเว็บเซิร์ฟเวอร์ Nginx วานิชจะถูกใช้ เว็บเซิร์ฟเวอร์ Nginx จะทำงานบนพอร์ต HTTP 8080 ในขณะที่วานิชจะทำงานบนพอร์ต HTTP 80

ในขั้นตอนนี้ เราจะตั้งค่า Varnish สำหรับ Nginx ระบุเซิร์ฟเวอร์แบ็กเอนด์ และแก้ไข Varnish เพื่อให้ใช้พอร์ต HTTP 80 เป็นพอร์ตเริ่มต้น

แก้ไขไฟล์ "default.vcl" โดยไปที่ไดเร็กทอรีการกำหนดค่าเคลือบเงาทันที และตรวจสอบให้แน่ใจว่าโฮสต์เป็น 127.0.0.1 และพอร์ตเป็น8080

 nano /etc/varnish/default.vcl

การกำหนดค่าแบ็กเอนด์เสร็จสิ้น

ขั้นตอนต่อไปคือการตั้งค่าวานิชเพื่อใช้ HTTP พอร์ต 80 แก้ไขไฟล์การกำหนดค่าเคลือบเงาโดยไปที่ไดเร็กทอรี 'varnish' ในไดเร็กทอรี '/etc/default'

 nano /etc/default/varnish

ตรวจสอบให้แน่ใจว่าพอร์ตเริ่มต้นของคุณคือ 6081 และพอร์ต HTTP คือ80

ไฟล์บริการเคลือบเงาในไดเร็กทอรี '/lib/systemd/system' ควรได้รับการแก้ไขแล้ว แก้ไขไฟล์ varnish.service โดยไปที่ไดเร็กทอรีระบบ systemd

 cd /lib/systemd/system nano varnish.service

แทนที่พอร์ต HTTP 80 ด้วยพอร์ตวานิช 6081 ในบรรทัด 'ExecStart'

ตอนนี้โหลดการกำหนดค่า systemd ใหม่และรีสตาร์ทวานิช

 systemctl daemon-reload systemctl restart varnish

ตรวจสอบวานิชโดยใช้คำสั่ง netstat

 netstat -plntu

การกำหนดค่าวานิชเป็น reverse proxy สำหรับ Nginx เสร็จสิ้นแล้ว

กำหนดค่าไฟร์วอลล์ UFW

ไฟร์วอลล์เริ่มต้นที่มนุษย์อ่านได้บนระบบปฏิบัติการ Ubuntu เรียกว่า "UFW" ใช้คำสั่ง apt ที่แสดงด้านล่างเพื่อติดตั้งหากคุณยังไม่มีแพ็คเกจ

 sudo apt install ufw

เราจะเปิดไฟร์วอลล์และเปิดพอร์ต SSH, HTTP และ HTTPS ใหม่

คำสั่ง ufw ที่แสดงด้านล่าง

 ufw allow ssh ufw allow http ufw allow https

ตอนนี้เปิดไฟร์วอลล์และทำให้มันเริ่มทำงานตลอดเวลาเมื่อบูต

 ufw enable

ขณะนี้ไฟร์วอลล์ UFW ทำงานอยู่ ทั้งพอร์ต HTTP และ HTTPS สามารถเข้าถึงได้จากเครือข่ายภายนอก