ค้นหาเว็บไซต์

เหตุใดฉันจึงพบว่า Nginx ดีกว่า Apache


จากการสำรวจเว็บเซิร์ฟเวอร์ล่าสุดโดย Netcraft ซึ่งดำเนินการในช่วงปลายปี 2560 (ในเดือนพฤศจิกายน) Apache และ Nginx เป็นเว็บเซิร์ฟเวอร์โอเพ่นซอร์สที่ใช้กันอย่างแพร่หลายที่สุดบนอินเทอร์เน็ต

Apache เป็นเซิร์ฟเวอร์ HTTP แบบโอเพ่นซอร์สฟรีสำหรับระบบปฏิบัติการแบบ Unix และ Windows ได้รับการออกแบบให้เป็นเซิร์ฟเวอร์ที่ปลอดภัย มีประสิทธิภาพ และขยายได้ ซึ่งให้บริการ HTTP ที่ซิงค์กับมาตรฐาน HTTP ที่มีอยู่

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

Nginx (อ่านว่า 'Engine-x') เป็นเซิร์ฟเวอร์ HTTP ฟรีแบบโอเพ่นซอร์ส ประสิทธิภาพสูง พร็อกซีย้อนกลับ และพร็อกซีเซิร์ฟเวอร์ IMAP/POP3 เช่นเดียวกับ Apache มันยังทำงานบนระบบปฏิบัติการที่เหมือน Unix และ Windows

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

ไซต์ที่ไม่ว่างบางแห่งขับเคลื่อนโดย:

  • Apache ได้แก่ PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com และอื่นๆ อีกมากมาย
  • Nginx ได้แก่ Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud และอื่นๆ อีกมากมาย

มีแหล่งข้อมูลมากมายที่เผยแพร่บนเว็บแล้วเกี่ยวกับการเปรียบเทียบระหว่าง Apache และ Nginx (ฉันหมายถึงบทความ 'Apache Vs Nginx' จริงๆ) มากมาย ซึ่งอธิบายรายละเอียดคุณสมบัติเด่นและการดำเนินงานภายใต้สถานการณ์ต่างๆ อย่างชัดเจน รวมถึงการวัดประสิทธิภาพในเกณฑ์มาตรฐานของห้องปฏิบัติการ ดังนั้นจะไม่ได้กล่าวถึงที่นี่

ฉันจะแบ่งปันประสบการณ์และความคิดของฉันเกี่ยวกับการอภิปรายทั้งหมด โดยได้ลองใช้ Apache และ Nginx ทั้งในสภาพแวดล้อมที่ใช้งานจริงตามข้อกำหนดสำหรับการโฮสต์แอปพลิเคชันเว็บสมัยใหม่ในครั้งต่อไป ส่วน.

เหตุผลที่ฉันพบว่า Nginx ดีกว่า Apache ในทางปฏิบัติ

ต่อไปนี้เป็นเหตุผลว่าทำไมฉันถึงชอบเว็บเซิร์ฟเวอร์ Nginx มากกว่า Apache สำหรับการจัดส่งเนื้อหาเว็บสมัยใหม่:

1. Nginx มีน้ำหนักเบา

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

เนื่องจาก Nginx รวบรวมคุณสมบัติหลักจำนวนหนึ่งไว้ด้วยกัน จึงอาศัยเว็บเซิร์ฟเวอร์อัพสตรีมของบุคคลที่สามโดยเฉพาะ เช่น เซิร์ฟเวอร์แบ็กเอนด์ Apache, FastCGI, Memcached, SCGI และ uWSGI หรือเซิร์ฟเวอร์แอปพลิเคชัน เช่น เซิร์ฟเวอร์เฉพาะภาษา เช่น Node.js, Tomcat ฯลฯ

ดังนั้นการใช้หน่วยความจำจึงเหมาะสมกับการปรับใช้ทรัพยากรที่จำกัดมากกว่า Apache

2. Nginx ได้รับการออกแบบมาเพื่อการทำงานพร้อมกันสูง

Nginx ใช้สถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ (อะซิงโครนัส) ซึ่งต่างจากสถาปัตยกรรมแบบเธรดหรือเชิงกระบวนการของ Apache (โมเดลการประมวลผลต่อการเชื่อมต่อหรือแบบเธรดต่อการเชื่อมต่อ) ใช้โมเดลกระบวนการที่ต้องรับผิดชอบซึ่งปรับให้เหมาะกับทรัพยากรฮาร์ดแวร์ที่มีอยู่

มีกระบวนการหลัก (ซึ่งดำเนินการดำเนินการพิเศษ เช่น การอ่านการกำหนดค่าและการเชื่อมโยงกับพอร์ต) และสร้างกระบวนการของผู้ปฏิบัติงานและผู้ช่วยเหลือหลายกระบวนการ

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

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

3. Nginx กำหนดค่าได้ง่าย

Nginx มีโครงสร้างไฟล์การกำหนดค่าที่เรียบง่าย ทำให้กำหนดค่าได้ง่ายมาก ประกอบด้วยโมดูลที่ควบคุมโดยคำสั่งที่ระบุในไฟล์การกำหนดค่า นอกจากนี้ คำสั่งยังแบ่งออกเป็นคำสั่งแบบบล็อกและคำสั่งแบบง่าย

คำสั่งบล็อกถูกกำหนดโดยเครื่องหมายปีกกา ({ และ }) หากคำสั่งบล็อกสามารถมีคำสั่งอื่นภายในวงเล็บปีกกาได้ จะเรียกว่าบริบท เช่น เหตุการณ์, http, เซิร์ฟเวอร์ และตำแหน่ง

http {
	server {
		
	}
}

คำสั่งแบบง่ายประกอบด้วยชื่อและพารามิเตอร์ที่คั่นด้วยช่องว่างและลงท้ายด้วยเครื่องหมายอัฒภาค (;)

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

คุณสามารถรวมไฟล์การกำหนดค่าแบบกำหนดเองได้โดยใช้คำสั่ง include เป็นต้น

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

ตัวอย่างที่เป็นประโยชน์สำหรับฉันคือวิธีที่ฉันจัดการเพื่อกำหนดค่า Nginx ให้ใช้งานหลายเว็บไซต์ด้วย PHP เวอร์ชันที่แตกต่างกันได้อย่างง่ายดาย ซึ่งถือเป็นความท้าทายเล็กน้อยสำหรับ Apache

4. Nginx เป็นพร็อกซีส่วนหน้าที่ยอดเยี่ยม

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

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

5. Nginx มีความโดดเด่นในการให้บริการเนื้อหาแบบคงที่

โดยทั่วไปเนื้อหาหรือไฟล์แบบคงที่คือไฟล์ที่จัดเก็บไว้ในดิสก์บนคอมพิวเตอร์เซิร์ฟเวอร์ เช่น ไฟล์ CSS ไฟล์ JavaScript หรือรูปภาพ ลองพิจารณาสถานการณ์ที่คุณใช้ Nginx เป็นส่วนหน้าสำหรับ Nodejs (แอปพลิเคชันเซิร์ฟเวอร์)

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

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

6. Nginx คือ Load Balancer ที่มีประสิทธิภาพ

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

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

Nginx ใช้วิธีการปรับสมดุลโหลดต่อไปนี้:

  • round-robin (วิธีการเริ่มต้น) – คำขอไปยังเซิร์ฟเวอร์อัปสตรีมมีการกระจายในลักษณะ Round-robin (ตามลำดับรายการเซิร์ฟเวอร์ในพูลอัปสตรีม)
  • เชื่อมต่อน้อยที่สุด – ที่นี่คำขอถัดไปจะส่งพร็อกซีไปยังเซิร์ฟเวอร์ที่มีจำนวนการเชื่อมต่อที่ใช้งานน้อยที่สุด
  • ip-hash – ในที่นี้ฟังก์ชันแฮชใช้เพื่อกำหนดเซิร์ฟเวอร์ที่ควรเลือกสำหรับคำขอถัดไป (ขึ้นอยู่กับที่อยู่ IP ของไคลเอ็นต์)
  • แฮชทั่วไป – ภายใต้วิธีนี้ ผู้ดูแลระบบจะระบุแฮช (หรือคีย์) พร้อมด้วยข้อความที่กำหนด ตัวแปรของคำขอหรือรันไทม์ หรือการรวมกัน ตัวอย่างเช่น คีย์อาจเป็น IP ต้นทางและพอร์ต หรือ URI จากนั้น Nginx จะกระจายโหลดไปยังเซิร์ฟเวอร์อัปสตรีมโดยสร้างแฮชสำหรับคำขอปัจจุบันและวางไว้กับเซิร์ฟเวอร์อัปสตรีม
  • เวลาน้อยที่สุด (Nginx Plus) – กำหนดคำขอถัดไปให้กับเซิร์ฟเวอร์อัปสตรีมที่มีจำนวนการเชื่อมต่อปัจจุบันน้อยที่สุด แต่ให้ความสำคัญกับเซิร์ฟเวอร์ที่มีเวลาตอบสนองเฉลี่ยต่ำที่สุด

7. Nginx สามารถปรับขนาดได้สูง

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

บริษัทแห่งหนึ่งที่ได้รับประโยชน์จากคุณลักษณะความสามารถในการปรับขนาดที่น่าทึ่งของ Nginx คือ CloudFlare โดยบริษัทได้จัดการปรับขนาดแอปพลิเคชันเว็บเพื่อรองรับการดูหน้าเว็บมากกว่า 1.5 หมื่นล้านครั้งต่อเดือนด้วยโครงสร้างพื้นฐานที่ค่อนข้างเรียบง่าย ตามที่ Matthew Prince กล่าว ผู้ร่วมก่อตั้งและ CEO ของ CloudFare

หากต้องการคำอธิบายที่ครอบคลุมมากขึ้น โปรดอ่านบทความนี้ในบล็อก Nginx: NGINX กับ Apache: มุมมองของเราเกี่ยวกับคำถามเก่าในทศวรรษ

บทสรุป

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