เซิร์ฟเวอร์ Apache vs Nginx: Lowdown บนเซิร์ฟเวอร์สองประเภทนี้

เผยแพร่แล้ว: 2022-01-03

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

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

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

Apache และ Nginx คืออะไร

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

  • อาปาเช่. นี่เป็นซอฟต์แวร์โอเพ่นซอร์สฟรีที่ติดตั้งมาพร้อมกับ 'distros' ของ Linux ส่วนใหญ่ มีมาตั้งแต่ปี 1995 และด้วยปัจจัยทั้งสองนี้ จึงทำให้มีสถานะเป็นผู้นำในตลาดเกือบ
  • งิ๊งซ์. ในขณะที่มันเป็นลูกญาติเมื่อเทียบกับซอฟต์แวร์เซิร์ฟเวอร์อื่น ๆ Nginx มีผู้ใช้จำนวนมาก ในการเขียนปัจจุบัน ซอฟต์แวร์เซิร์ฟเวอร์ยอดนิยมเกือบจะร่วมกับ Apache เป็นอันดับแรก (ซึ่งจะมีมากกว่านั้นในภายหลัง)

เป็นที่น่าสังเกตว่า Apache เป็นซอฟต์แวร์เซิร์ฟเวอร์ชั้นนำมานานหลายทศวรรษ และได้เห็นส่วนแบ่งการตลาดที่ใหญ่มากในช่วงเวลานั้น อย่างไรก็ตาม ตอนนี้ Nginx เป็น front-runner แม้ว่าจะไม่มากนักก็ตาม

กราฟ Google Trends แสดง Apache กับ Nginx

คำบรรยายภาพ: เส้นสีน้ำเงินที่นี่จาก google Trends หมายถึงการค้นหา Apache ตั้งแต่ปี 2004 ในขณะที่เส้นสีแดงเกี่ยวข้องกับ Nginx

สำหรับสิ่งที่ Apache และ Nginx นำมาสู่โต๊ะ สิ่งเหล่านี้สามารถเติมหนังสือหลายเล่มในหัวข้อนี้ได้ อย่างไรก็ตาม เราจะพยายามทำให้มีคำศัพท์น้อยกว่า 2,000 คำ โดยเริ่มจากชุดคุณลักษณะทั่วไปของทั้งสอง

คุณสมบัติทั่วไปของ Apache และ Nginx

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

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

ในส่วนที่เหลือของบทความนี้ เราจะแสดงให้คุณเห็นผ่านรายละเอียดทางเทคนิคสำหรับ Apache และ Nginx นี่คือสิ่งที่เราจะพูดถึง:

  • รายละเอียดทางเทคนิคของซอฟต์แวร์เซิร์ฟเวอร์แต่ละประเภท ซึ่งรวมถึงคำขอและการจัดการการเชื่อมต่อ เทคโนโลยีการแคช และอื่นๆ
  • การกำหนดค่าและขยาย Apache รวมถึงรายละเอียดเกี่ยวกับไฟล์ . .htaccess และโมดูล
  • วิธีที่คุณกำหนดค่า Nginx และความสามารถในการขยาย

ดูเหมือนจะไม่มากที่จะต้องพิจารณา แต่คุณสามารถแยกแต่ละส่วนออกเป็นส่วนย่อยอื่นๆ ได้ เราจะทำสิ่งนี้โดยเริ่มจากข้อแตกต่างทางเทคนิค

ความแตกต่างทางเทคนิคระหว่าง Apache และ Nginx

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

  1. Apache ใช้สถาปัตยกรรม 'ที่ขับเคลื่อนด้วยกระบวนการ' ในขณะที่ Nginx ใช้สถาปัตยกรรม 'ที่ขับเคลื่อนด้วยเหตุการณ์'
  2. แม้ว่าไฟล์สแตติกของเซิร์ฟเวอร์ทั้งสองประเภท (แม้ว่าจะแตกต่างกัน) Nginx จะไม่เซิร์ฟเวอร์เนื้อหาแบบไดนามิก
  3. ซอฟต์แวร์แต่ละประเภทตีความคำขอ HTTP ด้วยวิธีหลักที่แตกต่างกัน

เราจะพิจารณาบางแง่มุมเหล่านี้ โดยเริ่มจากข้อพิจารณาในการจัดการการเชื่อมต่อ

การจัดการการเชื่อมต่อ

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

อันที่จริง Apache ให้ความยืดหยุ่นมากมายสำหรับการสร้างอัลกอริธึมการจัดการการเชื่อมต่อเพื่อให้เหมาะกับความต้องการของคุณโดยใช้ mpm_prefork , mpm_worker และ mpm_event ในทางตรงกันข้าม การออกแบบของ Nginx นั้นพยายามลดประสิทธิภาพด้านลบของ Apache

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

ขอล่าม

ทั้ง Apache และ Nginx ต่างก็ใช้แนวทางที่แตกต่างกันในการตีความคำขอที่เซิร์ฟเวอร์จะได้รับ ตัวอย่างเช่น Nginx ใช้ Uniform Resource Identifier (URI) ของคำขอเพื่อแปลเป็นองค์ประกอบทางกายภาพของระบบไฟล์

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

 server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

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

ประสิทธิภาพคงที่เทียบกับไดนามิก

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

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

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

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

โมเดลการกำหนดค่าแบบกระจายของ Apache

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

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

ไฟล์ .htaccess แสดงโมดูล mod_rewrite พร้อมกับกฎการเขียนใหม่

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

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

โมดูลของ Apache

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

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

  • การจำกัดที่อยู่ IP
  • การเปลี่ยนโฮมโฟลเดอร์สำหรับไซต์ของคุณ
  • ดำเนินการเปลี่ยนเส้นทาง 301
  • การตั้งค่าโฮมเพจเริ่มต้น

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

โมเดลการกำหนดค่าจากส่วนกลางของ Nginx

Nginx ใช้แนวทางแบบรวมศูนย์ในการกำหนดค่าเซิร์ฟเวอร์ ซึ่งหมายความว่ามีไฟล์การกำหนดค่าหนึ่งไฟล์ (ลงท้ายด้วยนามสกุล . .conf ) บางครั้งอาจค้นหาได้ยากขึ้นอยู่กับโครงสร้างเซิร์ฟเวอร์ของคุณ

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

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

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

โมดูลของ Nginx

มันยุติธรรมที่จะบอกว่าระบบโมดูลของ Nginx ไม่มีที่ไหนใกล้ที่อนุญาตหรือยืดหยุ่นเท่ากับ Apache แม้ว่าจะมีฟังก์ชันการทำงานแบบเดียวกันก็ตาม ตัวอย่างเช่น ใช้กฎการเปลี่ยนเส้นทางของ Nginx:

 server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }

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

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

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

ทำไมคุณถึงใช้ Apache หรือ Nginx

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

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

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

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

สรุป

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

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

คุณมีความคิดเห็นเกี่ยวกับ Apache กับ Nginx หรือไม่? แบ่งปันความคิดของคุณกับเราในส่วนความคิดเห็นด้านล่าง!