Apache HTTP Server가 왜 그렇게 복잡한가?


14

아파치 HTTP 서버는 상당히 큰 프로젝트 훨씬 더 큰 말,보다, lighthttp또는 nginx또는 확실히 "단순한 HTTP 서버가"당신은 C / C에서 주위에 떠 참조 ++ 자습서.

추가 코드는 무엇입니까? 보안 / 안정성을 추가합니까 (그렇다면 어떻게합니까?) 아니면 아파치 conf파일 파싱 / .htaccess유형 (및 추측 VirtualHosts등) 을 수행하기위한 것입니까?

나는 아파치를 비판하지 말라고 요청하지만, 나는 일종의 웹 서버를 작성하는데 관심이 있기 때문에 아마도 확실하지는 않지만 안전하고 안정적이며 빠른 웹 서버를 위해 기억해야하는 것들을 알고 싶다.


장비를 포장하지 않은 모든 사람들이 장비를 다루도록 도와줍니다.
Joel Etherton 2018 년

6
실제 답변은 아니지만 개발 초기에도 많은 공헌자가 있다는 사실에서 그 이름을 들었습니다. 많은 패치가 제공되어 패치 서버가되었습니다. 실화.
Jeremy

+1 @Joel Etherton : 좋은 이야기, 특히 사실입니다. 그러나 진실이 좋은 이야기를 방해하지 않도록하십시오 :)
therobyouknow

현상 유지에 대한 질문의 예는 +1 @aharon입니다. 그러나 "웹 서버 작성"? Apache뿐만 아니라 많은 오퍼링이있을 때 여기서 바퀴를 다시 발명하지 않습니까?
therobyouknow

답변:


20

다음과 같은 이유로 훨씬 더 복잡합니다.

  • 그건 나이 ,
  • 그것은있어 기능 세트의 큰 ( 기능 설정 비교 )
  • 그건 모듈 ,
  • 그것은있어 폭 넓은 플랫폼 지원 ( OS 지원 비교 )
  • 그것은있어 다수의 동작 모드 (멀티 프로세스, 멀티 스레드, 등 ...).

또한 :

  • 보다 적극적으로 개발되고 있습니다 ( 상태 비교 . 현재 2011 년 5 월 28 일 현재 Apache httpd는 최신 업데이트를 제공하지만 경쟁 업체와 달리 확장성에 의해 고유 릴리스 프로세스가 방해를받습니다.)

R.의 답변 에는 아키텍처에 대한 유효한 요점과 다른 웹 서버가 상대적인 명성을 얻는 이유가 포함되어 있습니다. 그것은 당신이 원하는 것에 달려 있습니다.

더 많은 자료 를 보려면 /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer참조하십시오 . 질문에 직접 대답하지는 않지만 전체 스레드는 많은 차이점을 지적합니다.


처음부터 웹 서버를 작성하는 데 관심이 있다면 Apache httpd를 공부하는 것이 좋습니다. 특히 시간이 지남에 따라 어떻게 진화했는지 되돌아 볼 수 있다면 더욱 그렇습니다. 또한 피해야 할 사항을 보여줍니다 (잘 다룬 점과 다른 사람이 능가하는 장소). 그러나 코드는 시작하기에 약간 복잡 할 수 있으며 더 작고 가벼운 서버를 선호 할 수 있습니다. 그러나 전체 아키텍처를 연구하고 다른 아키텍처와 비교하십시오.


1
+1 : 변경 로그 기록을 읽는 것만으로도 웹 서버 자체가 어떻게 발전했으며 팀이 몇 년 동안 어떤 문제를 겪었는지 배우는 데 매우 도움이 될 수 있습니다.
Joel Etherton 2018 년

1
+1 @haylem "상대적인 명성을 얻는 다른 웹 서버의 이점"-Apache와 호환되는 Apache의 대안에 대해 읽어보십시오. 즉, 거의 동일한 작업을 수행 할 것입니다.
therobyouknow

3

내 개인적인 견해로는 모든 기능이 있기 때문입니다. nginx 또는 lighthttpd로 지금 할 수 없었던 Apache로 할 수 있습니다. Apache는 실제로 HTTP 지원과 함께 제공되는 플랫폼입니다. FTP 또는 SMTP와 같은 프로토콜을 구현할 수 있습니다 (예 : mod_echo 참조). mod_php는 필터 모듈이며 컨텐츠 제작자가 아니기 때문에 다음과 같이 필터를 지원합니다. 이것은 유용한 아이디어는 아니지만 일반적으로 필터를 사용하여 원본 컨텐츠 제작자를 조정할 필요없이 들어오고 나가는 컨텐츠를 변경할 수 있습니다. 더 이상 존재하지 않는 HTTP 클라이언트에 대한 조정이 있었지만 당시에는 Apache가 일관되고 버그가없는 방식으로 서비스를 제공하는 유일한 방법이었습니다. 요즘에는 많이 사용되지 않습니다.

CoreDumpDirectory와 함께 mod_log_forensics는 누군가가 보안 취약점을 악용한다고 생각할 때 실제 도구를 제공하기 때문에 추가 코드도 보안에 사용됩니다. 다른 웹 서버의 경우에는 그런 말을 듣지 못했습니다. 안정성에 관해서는 추가 코드가 아닌 잘 아키텍처 된 코어에서 비롯됩니다. Apache 개발 메일 링리스트에는 "코어 스태빌라이저"라고하는 사람들이 있습니다. 그들은 코어의 변화에 ​​대해 매우 까다 롭고 모듈로 푸시하는 경향이 있으며, 이는 실제로 Apache를 상당히 안정적으로 만듭니다. 실패하면 대부분 서버 코어의 버그가 아니라 모듈의 실패입니다.


3

필자는 12 년 이상 대규모 Perl, Python 및 Ruby 웹 응용 프로그램의 관리자 및 개발자로 Apache를 사용했습니다. 아파치는 깔끔하고 모듈화 된 디자인과 강력한 UNIX 구부러진 견고한 웹 서버입니다. 가장 강력한 기능 중 하나는 단순한 모듈 성과 좋은 문서입니다. 매우 관리하기 쉬운 웹 서버입니다. 15 년 동안 지배적 인 시장 점유율에서 분명히 볼 수있는 것처럼 성숙하고 입증되었습니다 .

사용자 문서는 매우 훌륭하지만 개발자 / 모듈 작성자를위한 귀중한 작은 문서가 있으며, 이것이 가능한 한 많은 개발자를 끌어 들이지 않기 때문에 조금 아프다고 생각합니다. 그러나 이것이 결코 제대로 설계되지 않았 음을 의미하지는 않습니다.이 점에서 제대로 문서화되지 않았습니다. Nick Kew의 책이 있습니다.이 책은 모듈 작가를위한 결정적인 자료입니다. 그러나 프로젝트 자체에 모듈 작성의 모든 측면에 대한 더 나은 문서가 있다면 좋을 것입니다.

과도하게 엔지니어링되고 있습니다. 디자인이 뛰어납니다. 그렇습니다. 여기 저기 사마귀가 있지만 모든 소프트웨어에 적용됩니다. 메모리 풀 사용은 환상적입니다. 다른 백엔드를 플러그인 할 수있는 능력은 얼마나 깨끗하고 모듈화되어 있는지, 훌륭한 C-API를 가지고 있으며 APR은 Apache 프로젝트뿐만 아니라 많은 것들을 훨씬 쉽게 만듭니다. 다른 프로젝트의 개발자. 이식성에 대해 관심이 있다면 APR에 감사드립니다. 완벽하지는 않지만 여전히 견고하고 잘 설계되어 있으며 매우 편리합니다.

단순한 기능, 유연성, 관리, 플랫폼 지원, 확장 성, 설명서 및 성숙도라는 관점에서 Apache는 환상적인 웹 서버입니다.


-2

과도하게 설계 / 설계되었습니다. 최악의 경우, APR (Apache Portable Runtime)을 사용합니다. APR (Apache Portable Runtime)은 많은 수준의 함수 호출 및 동적 메모리 할당을 소비하고 단일 printf호출 과 동등한 성능을 달성 할 수있는 팽창 층입니다 . 이 모든 것이 다음으로 이어집니다.

  • 아주 느린
  • 매우 배가 고프다
  • 보안 감사 불가능
  • 이해하고 수정하기 어렵다

5
당신은 대부분 그 복잡성의 함정과 나쁜 디자인 (어떤 부분에 따라 다름)을 지적합니다. 그러나 이러한 진술은 유효 할 수 있지만, 복잡한 이유 는 아닙니다 .
haylem

1
APR 팽창의 경우 -1입니다. 나는 1.0 이전 시대에 APR과 함께 일하고 있었고 이미 1.3 코드베이스보다 더 많은 부풀림을 일으키지 않았습니다. 또한 APR의 동적 메모리 할당은 1.3 메모리 코드의 정확한 사본입니다. 그리고 당신이 옳을지라도 ... 어떤 종류의 부풀림이 어떻게 감사를 할 수 없게 만드는가?
Jacek Prucia

@haylem (+1)에 동의하고 @R .. 답변의 네 가지 포인트 : 어떻게 알 수 있습니까? 무엇과 비교하고 있습니까? 당신은 옳을 지 모르지만 당신의 요점은 상대적으로 될 것입니다. 여기에 언급 된 것과 같은 다른 서버? 그렇다면 인용하십시오.
therobyouknow

나는 thttpd 웹 사이트에 정적 컨텐츠에 대한 좋은 수치가 있다고 생각합니다. 더 놀라운 점은 웹 기반 학생 숙제 시스템을 실행하는 개인적인 경험에서 Apache가 thttpd가 각 클라이언트에 대해 새로운 perl 인스턴스를 실행하는 것보다 훨씬 느리다는 mod_perl것입니다. 이것은 오래 전 일이었으며 모든 원인을 추적하기 위해 엄격한 테스트를 한 적이 없습니다. 부서에서 방금 새 서버를 구입했습니다 ...
R .. GitHub 중지 지원 얼음

@R .: 또 다시, 왜 mod_perl로 실행
하겠습니까
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.