ทำไมเซิร์ฟเวอร์ Apache HTTP จึงซับซ้อน?


14

เซิร์ฟเวอร์ Apache HTTP เป็นโครงการที่ค่อนข้างใหญ่ - ใหญ่กว่าพูดlighthttpหรือnginxหรือแน่นอน "เซิร์ฟเวอร์ HTTP ธรรมดา" ที่คุณเห็นลอยอยู่ในบทช่วยสอน C / C ++

รหัสพิเศษสำหรับคืออะไร? มันเพิ่มความปลอดภัย / เสถียรภาพ (และถ้าเป็นเช่นนั้นได้อย่างไร) หรือเป็นเพียงการทำสิ่งต่าง ๆ เช่นการแยกconfไฟล์Apache / .htaccessพิมพ์สิ่งต่าง ๆ (และฉันเดาVirtualHostsฯลฯ )

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


ช่วยกำจัดทุกคนที่ไม่ได้บรรจุอุปกรณ์เพื่อจัดการมัน
Joel Etherton

6
มันไม่ใช่คำตอบที่แท้จริง - แต่ฉันได้ยินชื่อมาจากความจริงที่ว่ามันมีผู้มีส่วนร่วมจำนวนมากแม้ในช่วงต้นของการพัฒนา มีการแก้ไขเป็นจำนวนมากทำให้เป็นเซิร์ฟเวอร์ Patchy เรื่องจริง.
Jeremy

+1 @Joel Etherton: เป็นเรื่องที่ดีโดยเฉพาะอย่างยิ่งมันเป็นเรื่องจริง แต่อย่าปล่อยให้ความจริงเข้ามาขวางเรื่องดี :)
therobyouknow

+1 @aharon สำหรับตัวอย่างของการซักถามสถานะเดิม แต่ "เขียนเว็บเซิร์ฟเวอร์"? เราไม่คิดค้นล้อใหม่ที่นี่เมื่อมีข้อเสนอมากมายเช่นเดียวกับ Apache
therobyouknow

คำตอบ:


20

มันซับซ้อนมากขึ้นเพราะ:

แต่ยัง:

  • มันได้รับการพัฒนาอย่างแข็งขันมากขึ้น ( การเปรียบเทียบสถานะณ วันนี้ 2011-05-28, Apache httpd มีการอัปเดตล่าสุดแม้ว่ากระบวนการปล่อยโดยธรรมชาติของมันควรจะถูกขัดขวางโดยความซับซ้อนที่เพิ่มขึ้นเมื่อเทียบกับคู่แข่ง)

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

คุณอาจต้องการดูที่/programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administerเพื่อหาเนื้อหาเพิ่มเติม แม้ว่าจะไม่ตอบคำถามของคุณโดยตรง แต่กระทู้ทั้งหมดชี้ให้เห็นความแตกต่างมากมาย


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


1
+1: เพียงแค่อ่านประวัติของการเปลี่ยนแปลงสามารถให้คำแนะนำอย่างไม่น่าเชื่อในการเรียนรู้ว่าเว็บเซิร์ฟเวอร์มีการพัฒนาตัวเองอย่างไรและสิ่งที่ท้าทายทีมที่ผ่านมาหลายปี
Joel Etherton

1
+1 @haylem "เว็บเซิร์ฟเวอร์อื่น ๆ บางอย่างได้รับประโยชน์จากชื่อเสียง" - ให้ความมั่นใจในการอ่านเกี่ยวกับทางเลือกอื่น ๆ ของ Apache ที่ได้รับการกล่าวถึงว่าเข้ากันได้กับ Apache ซึ่งจะทำงานในลักษณะเดียวกัน
therobyouknow

3

ในความเห็นส่วนตัวของฉันมันเป็นเพราะคุณสมบัติทั้งหมดที่มี คุณสามารถทำสิ่งต่าง ๆ กับ Apache ตอนนี้คุณไม่สามารถทำได้ด้วย nginx หรือ lighthttpd Apache เป็นแพลตฟอร์มที่เกิดขึ้นจริงพร้อมกับรองรับ HTTP คุณสามารถใช้โปรโตคอลใดก็ได้เช่น FTP หรือ SMTP (ดูตัวอย่าง mod_echo) มันมีการสนับสนุนสำหรับตัวกรองที่ช่วยให้คุณเช่น: ให้บริการรหัส PHP ปิดฐานข้อมูลแทนไฟล์ (เนื่องจาก mod_php เป็นโมดูลตัวกรองและไม่ใช่ผู้ผลิตเนื้อหา) นี่อาจดูเหมือนไม่เป็นความคิดที่มีประโยชน์มาก แต่โดยทั่วไปคุณสามารถใช้ตัวกรองเพื่อแก้ไขเนื้อหาใด ๆ ที่เข้าหรือออกโดยไม่จำเป็นต้องปรับแต่งผู้สร้างเนื้อหาดั้งเดิม มันมีการปรับแต่งสำหรับไคลเอนต์ HTTP ที่ไม่ได้อยู่ที่นั่นอีกต่อไป แต่เมื่อก่อนนั้น Apache เป็นวิธีเดียวที่จะให้บริการพวกเขาในลักษณะที่สอดคล้องและปราศจากข้อบกพร่อง ส่วนใหญ่มันไม่ได้ใช้ในปัจจุบัน

รหัสพิเศษนี้ใช้เพื่อความปลอดภัยด้วยเช่นกันเพราะ mod_log_forensics ร่วมกับ CoreDumpDirectory เป็นเครื่องมือจริงเมื่อคุณรู้สึกว่ามีใครบางคนกำลังโจมตีช่องโหว่ด้านความปลอดภัย ไม่เคยได้ยินเรื่องแบบนี้ในกรณีของเว็บเซิร์ฟเวอร์อื่น ๆ สำหรับความเสถียรมันมาจากแกนกลางที่มีสถาปัตยกรรมที่ดีไม่ใช่รหัสพิเศษบางอย่าง มีผู้ชายอยู่ในรายชื่อรับเมลของ Apache dev ที่เรียกว่า "core stabilizers" พวกเขาค่อนข้างพิถีพิถันเกี่ยวกับการเปลี่ยนแปลงใด ๆ ในแกนกลางและมีแนวโน้มที่จะผลักดันพวกเขาไปยังโมดูลซึ่งจริงๆแล้วทำให้ Apache ค่อนข้างมีเสถียรภาพ ถ้ามันล้มเหลวส่วนใหญ่เป็นโมดูลที่ล้มเหลวและไม่ใช่บั๊กในเซิร์ฟเวอร์หลัก


3

ฉันใช้ Apache มานานกว่าสิบสองปีทั้งในฐานะผู้ดูแลระบบและผู้พัฒนาสำหรับแอปพลิเคชันเว็บ Perl, Python และ Ruby ขนาดใหญ่ Apache เป็นเว็บเซิร์ฟเวอร์ที่แข็งแกร่งซึ่งมีการออกแบบที่สะอาด / เป็นโมดูลและมีความแข็งแกร่งของ UNIX หนึ่งในคุณสมบัติที่ทรงพลังที่สุดคือความสามารถในการแยกส่วนและเอกสารที่ดี มันเป็นเว็บเซิร์ฟเวอร์ที่จัดการได้ง่ายมาก มันเติบโตและการพิสูจน์แล้วว่าสามารถมองเห็นได้อย่างชัดเจนโดย 15 ปีของส่วนแบ่งการตลาดที่โดดเด่น

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

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

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


-2

มันออกแบบมามากไป ที่เลวร้ายที่สุดของทั้งหมดก็ใช้เมษายน (Apache Runtime แบบพกพา) ชั้นบวมที่ปลายการใช้จ่ายหลายระดับของฟังก์ชั่นการโทรและการจัดสรรหน่วยความจำแบบไดนามิกและพ้นที่จะบรรลุเทียบเท่าเดียวprintfโทร ทั้งหมดนี้นำไปสู่การเป็น:

  • ช้ามาก
  • ทรัพยากรหิวมาก
  • ไม่สามารถตรวจสอบความปลอดภัยได้
  • ยากที่จะเข้าใจและแก้ไข

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

1
-1 สำหรับ APR bloat ฉันทำงานกับ APR ในช่วงก่อนยุค 1.0 และย้อนกลับไปตอนนั้นมันก็ไม่ได้แนะนำอะไรเพิ่มเติมเกินกว่าที่กำหนดไว้ในโค้ดเบส 1.3 การจัดสรรหน่วยความจำแบบไดนามิกใน APR ก็คือสำเนาที่ถูกต้องของรหัสหน่วยความจำ 1.3 และแม้ว่าคุณจะถูกต้อง ... การขยายตัวของรูปแบบใดทำให้เป็นไปไม่ได้ที่จะตรวจสอบ?
Jacek Prucia

เห็นด้วยกับ @haylem (+1) และ: จุดสี่จุดในคำตอบของ @R .. คุณรู้ได้อย่างไร คุณเปรียบเทียบกับอะไร คุณอาจจะถูก แต่คะแนนของคุณจะเป็นญาติเช่น "ช้ามาก" - แต่เมื่อเทียบกับอะไร เซิร์ฟเวอร์อื่น ๆ เช่นที่กล่าวถึงที่นี่? ถ้าเป็นเช่นนั้นโปรดอ้างอิงพวกเขา
therobyouknow

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

@R .: อีกครั้งว่าทำไมคุณจะใช้มันกับ mod_perl :)
haylem
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.