Tại sao Máy chủ HTTP Apache lại phức tạp như vậy?


14

Máy chủ HTTP Apache là một dự án khá lớn, lớn hơn nhiều so với, lighthttphoặc nginx, chắc chắn là "máy chủ HTTP đơn giản" mà bạn thấy trôi nổi trong các hướng dẫn về C / C ++.

Mã bổ sung để làm gì? Nó có thêm bảo mật / ổn định (và nếu vậy, làm thế nào?) Hoặc chỉ để làm những việc như phân tích conftệp / .htaccessloại tệp Apache (và, tôi đoán, VirtualHostsv.v.).

Tôi yêu cầu không phê bình Apache, nhưng vì tôi thích viết một máy chủ web và tôi muốn biết những điều mà trong khi có lẽ không rõ ràng là điều quan trọng cần nhớ đối với một máy chủ web an toàn, ổn định và nhanh chóng.


Nó giúp loại bỏ tất cả những người không đóng gói thiết bị để xử lý nó.
Joel Etherton

6
Đây không phải là một câu trả lời thực sự - nhưng tôi nghe thấy cái tên này xuất phát từ thực tế là nó có rất nhiều người đóng góp ngay cả khi mới phát triển. Rất nhiều bản vá đã được đóng góp, biến nó thành một máy chủ Patchy. Câu chuyện có thật.
Jeremy

+1 @Joel Etherton: Câu chuyện hay, đặc biệt là sự thật. Nhưng đừng bao giờ để sự thật cản trở một câu chuyện hay :)
ngày

+1 @aharon cho một ví dụ về việc đặt câu hỏi về hiện trạng. Nhưng "viết một máy chủ web"? Không phải chúng ta đã phát minh lại bánh xe ở đây khi có nhiều dịch vụ cũng như Apache sao?
Therobyouledge

Câu trả lời:


20

Nó phức tạp hơn nhiều vì:

Nhưng cũng:

  • được phát triển tích cực hơn ( So sánh trạng thái . Kể từ hôm nay 2011-05-28, Apache httpd có bản cập nhật gần đây nhất, mặc dù quá trình phát hành vốn có của nó nên bị cản trở bởi sự phức tạp mở rộng của nó so với các đối thủ cạnh tranh.)

Điều đó đang được nói, câu trả lời của R. chứa các điểm hợp lệ về kiến ​​trúc của nó và tại sao một số máy chủ web khác cũng được hưởng lợi từ sự nổi tiếng tương đối. Nó phụ thuộc vào những gì bạn muốn.

Bạn cũng có thể muốn xem /programming/485386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-ad Manageer để biết thêm tài liệu. Mặc dù không trực tiếp trả lời câu hỏi của bạn, toàn bộ chủ đề chỉ ra rất nhiều sự khác biệt.


Nếu muốn viết một máy chủ web từ đầu, tôi muốn nói rằng nghiên cứu Apache httpd là một điều tốt, đặc biệt là nếu bạn có thể nhìn lại cách nó phát triển theo thời gian. Nó cũng cho bạn thấy những gì bạn cần tránh (cả về những điểm mà nó giải quyết tốt và những nơi mà nó vượt trội hơn những người khác). Tuy nhiên, mã có thể hơi phức tạp để bắt đầu và bạn có thể muốn xem xét các máy chủ nhỏ hơn, nhẹ hơn cho điều đó. Nhưng hãy nghiên cứu kiến ​​trúc tổng thể của nó và so sánh nó với những người khác.


1
+1: Chỉ cần đọc qua lịch sử thay đổi có thể cực kỳ hữu ích trong việc tìm hiểu cách thức máy chủ web phát triển và những thách thức mà nhóm đã trải qua trong những năm qua.
Joel Etherton

1
+1 @haylem "một số máy chủ web khác có lợi cho sự nổi tiếng tương đối" - thật yên tâm khi đọc về các lựa chọn thay thế cho Apache được cho là tương thích với Apache, nghĩa là sẽ làm cùng một công việc.
trị liệu

3

Theo ý kiến ​​cá nhân của tôi, tất cả là vì tất cả các tính năng của nó. Bạn có thể làm mọi thứ với Apache mà bạn không thể làm ngay bây giờ với cả nginx hoặc lighthttpd. Apache thực sự là một nền tảng xảy ra với sự hỗ trợ HTTP. Bạn có thể có bất kỳ giao thức nào được triển khai như FTP hoặc SMTP (xem ví dụ mod_echo). Nó có hỗ trợ cho các bộ lọc cho phép bạn ví dụ: phục vụ mã PHP tắt cơ sở dữ liệu thay vì các tệp (vì mod_php là mô-đun bộ lọc và không phải là nhà sản xuất nội dung). Điều này có vẻ như không phải là ý tưởng rất hữu ích, nhưng nói chung, bạn có thể sử dụng các bộ lọc để thay đổi bất kỳ nội dung nào đi vào hoặc ra mà không cần phải điều chỉnh nhà sản xuất nội dung gốc. Nó có các tinh chỉnh cho các máy khách HTTP không còn tồn tại nữa, nhưng trước đó, Apache là cách duy nhất để phục vụ chúng theo cách nhất quán và không có lỗi. Phần lớn nó không được sử dụng ngày nay.

Mã bổ sung cũng được sử dụng để bảo mật, bởi vì mod_log_forensics cùng với CoreDumpDirectory cung cấp một công cụ thực sự khi bạn cảm thấy ai đó đang khai thác khả năng bảo mật. Chưa từng nghe về bất cứ điều gì như thế trong trường hợp các máy chủ web khác. Về tính ổn định, nó xuất phát từ lõi kiến ​​trúc tốt, không phải một số mã bổ sung. Có những kẻ trong danh sách gửi thư của nhà phát triển Apache, được gọi là "bộ ổn định lõi". Họ rất kén chọn bất kỳ thay đổi nào trong lõi và có xu hướng đẩy chúng lên các mô-đun, điều này thực sự làm cho Apache khá ổn định. Nếu thất bại, phần lớn thời gian là lỗi mô-đun và không phải lỗi trong lõi máy chủ.


3

Tôi đã sử dụng Apache trong hơn mười hai năm với tư cách là quản trị viên và nhà phát triển cho các ứng dụng web Perl, Python và Ruby lớn. Apache là một máy chủ web vững chắc, có thiết kế sạch sẽ và mô đun UNIX mạnh mẽ. Một trong những tính năng mạnh mẽ nhất của nó là tính mô đun tuyệt đối và tài liệu tốt. Nó là một máy chủ web rất dễ quản lý. Nó trưởng thành và được chứng minh là có thể thấy rõ sau 15 năm chiếm lĩnh thị phần .

Mặc dù tài liệu người dùng rất tốt, nhưng không may là tài liệu nhỏ quý giá cho các nhà phát triển / người viết mô-đun và tôi nghĩ rằng điều này có xu hướng làm tổn thương một chút vì nó không thu hút được nhiều nhà phát triển nhất có thể. Nhưng điều đó không có nghĩa là nó được thiết kế kém - chỉ được ghi chép kém về mặt này. Có một cuốn sách của Nick Kew dường như là tài nguyên dứt khoát cho các nhà văn mô-đun. Nhưng thật tuyệt nếu bản thân dự án có một số tài liệu tốt hơn về tất cả các khía cạnh của việc viết các mô-đun.

Đối với nó được thiết kế quá mức - hogwash. Nó có một thiết kế tuyệt vời. Vâng, có một số mụn cóc ở đây và đó, nhưng điều đó đúng với tất cả các phần mềm. Việc sử dụng các nhóm bộ nhớ rất tuyệt vời, khả năng cắm vào các back-end khác nhau nói lên mức độ sạch và mô-đun của nó, nó có C-API tuyệt vời và APR làm cho nhiều thứ dễ dàng hơn không chỉ đối với dự án Apache cho nhà phát triển trong các dự án khác. Nếu bạn quan tâm bất cứ điều gì về tính di động, bạn sẽ đánh giá cao APR. Nó có thể không hoàn hảo, nhưng nó vẫn chắc chắn, được thiết kế tốt và rất thuận tiện.

Từ quan điểm của các tính năng tuyệt đối, tính linh hoạt, quản trị, hỗ trợ nền tảng, khả năng mở rộng, tài liệu và sự trưởng thành, Apache là một máy chủ web tuyệt vời.


-2

Đó là thiết kế quá mức / thiết kế quá mức. Tệ nhất là, nó sử dụng APR (Apache Portable Runtime), một lớp phình to kết thúc việc tiêu tốn nhiều cấp độ của các cuộc gọi chức năng và phân bổ bộ nhớ động và giải phóng để thực hiện tương đương với một printfcuộc gọi. Tất cả điều này dẫn đến nó là:

  • rất chậm
  • rất đói tài nguyên
  • không thể kiểm toán để bảo mật
  • khó hiểu và sửa đổi

5
Bạn chủ yếu chỉ ra những cạm bẫy của sự phức tạp của nó và (có thể tranh luận, phụ thuộc vào phần nào) thiết kế xấu; Tuy nhiên, những tuyên bố này có thể hợp lệ, chúng không phải là nguyên nhân cho sự phức tạp của nó.
haylem

1
-1 cho sự phình to APR. Tôi đã làm việc với APR trong kỷ nguyên 1.0 và trước đó, nó đã không giới thiệu bất kỳ sự phình to nào hơn so với trong cơ sở mã 1.3. Ngoài ra cấp phát bộ nhớ động trong APR ít nhiều là bản sao chính xác của mã bộ nhớ 1.3. Và ngay cả khi bạn đúng ... làm thế nào một sự phình to của bất kỳ loại nào làm cho một cái gì đó không thể được kiểm toán?
Jacek Prucia

đồng ý với @haylem (+1) và cả: bốn điểm trong câu trả lời của @R ..: làm sao bạn biết? Bạn đang so sánh với cái gì Bạn có thể đúng nhưng điểm của bạn sẽ tương đối, tức là "rất chậm" - nhưng so với cái gì? Một máy chủ khác như được đề cập ở đây? Nếu vậy xin vui lòng trích dẫn chúng.
trị liệu

Tôi tin rằng trang web thttpd có một số số liệu tốt cho nội dung tĩnh. Điều đáng ngạc nhiên hơn là, từ kinh nghiệm cá nhân chạy hệ thống bài tập về nhà của sinh viên dựa trên web, Apache cũng chậm hơn rất nhiều so với mod_perlthoggd chỉ chạy một cá thể perl mới cho mỗi khách hàng. Đây là một thời gian dài trước đây và tôi chưa bao giờ thực hiện kiểm tra nghiêm ngặt để theo dõi tất cả các nguyên nhân; Bộ phận vừa mua một máy chủ mới ...
R .. GitHub DỪNG GIÚP ICE

@R.: Một lần nữa, tại sao bạn lại chạy nó với mod_perl :)
haylem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.