นอกเหนือจาก Apache แล้ว Nginx ยังเป็นเว็บเซิร์ฟเวอร์ที่ได้รับความนิยมสูงสุด นอกจากจะเป็นเว็บเซิร์ฟเวอร์แล้ว ยังสามารถใช้เป็นโหลดบาลานเซอร์หรือพร็อกซีย้อนกลับได้อีกด้วย ในบทช่วยสอนนี้Quantrimang.comจะแสดงให้คุณเห็นว่าคุณสามารถใช้ Nginx เป็นพร็อกซีย้อนกลับได้อย่างไร
พร็อกซีย้อนกลับคืออะไร?
พร็อกซีเซิร์ฟเวอร์ทำหน้าที่เป็นตัวกลางระหว่างไคลเอนต์และเซิร์ฟเวอร์อื่น พร็อกซีเซิร์ฟเวอร์ดึงทรัพยากรจากเซิร์ฟเวอร์ที่คุณต้องการเชื่อมต่อและส่งให้คุณดู พร็อกซีย้อนกลับทำงานในลักษณะเดียวกัน ยกเว้นบทบาทจะถูกกลับรายการ เมื่อคุณร้องขอข้อมูลจากเซิร์ฟเวอร์ พร็อกซีย้อนกลับจะเก็บคำขอและส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์ที่เหมาะสม ซึ่งช่วยให้ผู้ดูแลระบบสามารถใช้เซิร์ฟเวอร์สำหรับแอพพลิเคชั่นหลาย ๆ ตัว รวมถึงรับประกันการรับส่งข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ที่ราบรื่นยิ่งขึ้น
ประโยชน์ของพร็อกซีย้อนกลับ
คุณอาจมีกรณีการใช้พร็อกซีย้อนกลับที่แตกต่างกัน ขึ้นอยู่กับแอปพลิเคชันของคุณ
- Reverse Proxy ช่วยให้คุณสามารถเรียกใช้หลายแอปพลิเคชันบนเซิร์ฟเวอร์เดียวกัน - หากคุณมีหลายแอปพลิเคชันที่ทำงานบนเซิร์ฟเวอร์เดียวกัน แอปพลิเคชันเหล่านั้นจะไม่สามารถ "ฟัง" ทั้งหมดพร้อมกันบนพอร์ต 80 หรือ 433 ได้ ด้วย Reverse Proxy คุณสามารถกำหนดค่าได้ เพื่อเปลี่ยนเส้นทางการรับส่งข้อมูลไปยังแอปพลิเคชันแต่ละรายการหากจำเป็น
- โหลดบาลานซ์ - หากคุณมีเซิร์ฟเวอร์หลายเครื่องที่ใช้งานแอปพลิเคชันเดียวกัน คุณสามารถใช้พร็อกซีย้อนกลับเพื่อกระจายการรับส่งข้อมูลไปยังแต่ละเซิร์ฟเวอร์เท่าๆ กัน
- ไฟร์วอลล์แอปพลิเคชันเว็บ - คุณสามารถใช้พร็อกซีย้อนกลับเพื่อซ่อนแอปพลิเคชันของคุณและเพื่อกรอง IP สแปมหรือป้องกัน การ โจมตีDDOS
- การบันทึกและตรวจสอบที่ง่ายดาย - เนื่องจากการรับส่งข้อมูลขาเข้าทั้งหมดได้รับการจัดการโดย Reverse Proxy จึงง่ายต่อการบันทึกและตรวจสอบกระแสการรับส่งข้อมูล
กำหนดค่า Nginx เป็นพร็อกซีย้อนกลับ
หากต้องการตั้งค่า Nginx เป็นพร็อกซีแบบย้อนกลับ บทความนี้จะใช้ พารามิเตอร์ proxy_passในไฟล์การกำหนดค่า Nginx
หมายเหตุ : บทช่วยสอนนี้ถือว่าคุณมีความรู้เกี่ยวกับ Nginx และได้ติดตั้งและตั้งค่า Nginx ในเซิร์ฟเวอร์ของคุณแล้ว
ในกรณีการใช้งานส่วนใหญ่ Nginx จะเป็นเซิร์ฟเวอร์ส่วนหน้า “กำลังฟัง” ไปยังพอร์ต 80 (HTTP) หรือ 443 (HTTPS) สำหรับคำขอที่เข้ามา เนื่องจากสามารถมีได้เพียงบริการเดียวเท่านั้นที่ "กำลังฟัง" บนพอร์ต 80 หรือ 443 แอปพลิเคชันของคุณจะต้อง "ฟัง" บนพอร์ตอื่น เช่น พอร์ต 8081 การกำหนดค่าที่ง่ายที่สุดจะมีลักษณะดังนี้:
server {
listen 80;
listen [::]:80;
server_name myapp.com;
location / {
proxy_pass http://localhost:8081/;
}
}
ซึ่งหมายความว่าคำขอทั้งหมดไปยังmyapp.comที่พอร์ต80จะถูกเปลี่ยนเส้นทางไปยังพอร์ต8081
ตั้งค่าขั้นสูง
นอกจากคำสั่ง proxy_pass แล้วยังมีคำสั่งอื่นๆ อีกหลายรายการที่คุณสามารถใช้สำหรับการตั้งค่าขั้นสูงเพิ่มเติมได้
- proxy_set_header - สิ่งนี้ช่วยให้คุณตั้งค่าส่วนหัวเพื่อส่งไปยังแอปพลิเคชันพื้นหลัง ตัวอย่างเช่น ดูการกำหนดค่าต่อไปนี้:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
คุณสามารถตั้งค่าส่วนหัวของพร็อกซีที่จำเป็นเพื่อส่งผ่านไปยังแอปพลิเคชัน บอก IP คำขอและที่อยู่ระยะไกล จากนั้นส่งออกเนื้อหาที่ถูกต้องไปยังเว็บไซต์ที่ร้องขอ
- การหมดเวลาของพร็อกซี - สิ่งนี้ช่วยให้คุณสามารถตั้งค่าการหมดเวลาสำหรับการส่งและรับคำขอพร็อกซี ตัวอย่างเช่น:
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
- proxy_buffers - ช่วยให้ Nginx หยุดการตอบสนองของพร็อกซีเซิร์ฟเวอร์ชั่วคราว และส่งไปยังเซิร์ฟเวอร์ที่ร้องขอหลังจากที่พร็อกซีเซิร์ฟเวอร์เสร็จสิ้นการตอบสนองเท่านั้น ตัวอย่างเช่น:
proxy_buffers 32 4k;
หากแอปพลิเคชันของคุณส่งไฟล์จำนวนมาก คุณอาจต้องการปิดการใช้งาน proxy_buffers:
proxy_buffering off;
อย่างที่คุณเห็น Nginx เป็นพร็อกซีเซิร์ฟเวอร์ย้อนกลับที่มีประโยชน์หลายอย่าง ข้อดีที่ใหญ่ที่สุดคือกำหนดค่าได้ง่าย ใช้งานง่าย และยังช่วยให้คุณสามารถปรับขนาดในสถานการณ์ที่ซับซ้อนมากขึ้นได้ สำหรับรายละเอียดเพิ่มเติม คุณสามารถดูเอกสารประกอบโมดูลพร็อกซี Nginx (ที่https://nginx.org/en/docs/http/ngx_http_proxy_module.html)หรือตัวอย่างการกำหนดค่า (ที่https://www .nginx.com/resources/wiki /start/topics/examples/full/)
หวังว่าคุณจะประสบความสำเร็จ