Nice programing

Glassfish 또는 Tomcat 앞에서 Apache Web Server를 사용하는 이유는 무엇입니까?

nicepro 2021. 1. 10. 19:55
반응형

Glassfish 또는 Tomcat 앞에서 Apache Web Server를 사용하는 이유는 무엇입니까?


GF 또는 Tomcat 앞에서 Apache Webserver를 사용하는 것이 좋은 생각입니까? 성능 / 보안이 향상됩니까?

아니면 GF와 함께 Apache Web Server를 사용할 이유가 없습니까?


http://wiki.apache.org/tomcat/FAQ/Connectors#Q3 에서 가져옴

  • 클러스터링. Apache HTTP를 프런트 엔드로 사용하면 Apache HTTP가 여러 Apache Tomcat 인스턴스에 대한 콘텐츠의 프런트 도어 역할을 할 수 있습니다. Apache Tomcat 중 하나가 실패하면 Apache HTTP가이를 무시하고 Sysadmin은 밤새 잠을 잘 수 있습니다. 하드웨어 부하 분산 장치와 Apache Tomcat의 클러스터링 기능을 사용하는 경우이 지점은 무시할 수 있습니다.
  • 클러스터링 / 보안. Apache를 다른 URL 네임 스페이스 (/ app1 /, / app2 /, / app3 / 또는 가상 호스트)에 대해 다른 Apache Tomcat에 대한 프론트 도어로 사용할 수도 있습니다. 그러면 Apache Tomcat이 각각 보호 영역에있을 수 있으며 보안 관점에서 Apache HTTP 서버에 대해서만 걱정하면됩니다. 본질적으로 Apache는 스마트 프록시 서버가됩니다.
  • 보안. 이 주제는 어느 쪽이든 흔들릴 수 있습니다. Java에는 보안 관리자가 있고 Apache는 보안과 관련하여 더 큰 마인드 쉐어와 트릭을 가지고 있습니다. 더 자세히 설명하지는 않겠지 만 Google을 친구로 삼으십시오. 시나리오에 따라 하나가 다른 것보다 나을 수 있습니다. 그러나 또한 Tomcat과 함께 Apache를 실행하는 경우 방어 할 시스템이 하나가 아니라 두 개라는 점을 명심하십시오.
  • 부가 기능. CGI, perl, PHP를 추가하는 것은 Apache에 매우 자연스러운 일입니다. Tomcat에 대한 느리고 더 많은 kludge. Apache HTTP에는 또한 마음대로 플러그인 할 수있는 수백 개의 모듈이 있습니다. Apache Tomcat에는이 기능이있을 수 있지만 코드는 아직 작성되지 않았습니다.
  • 데코레이터! Apache Tomcat 앞에 Apache HTTP를 사용하면 Apache Tomcat이 지원하지 않거나 즉각적인 코드 지원이없는 데코레이터를 얼마든지 수행 할 수 있습니다. 예를 들어, mod_headers, mod_rewrite 및 mod_alias는 Apache Tomcat 용으로 작성 될 수 있지만 Apache HTTP가이 작업을 잘 수행했을 때 휠을 재발 명하는 이유는 무엇입니까?
  • 속도. Apache HTTP는 Apache Tomcat보다 정적 콘텐츠를 제공하는 데 더 빠릅니다. 그러나 트래픽이 많은 사이트가 아니라면이 지점은 쓸모가 없습니다. 그러나 일부 시나리오에서는 Apache Tomcat이 Apache httpd보다 빠를 수 있습니다. 따라서 귀하의 사이트를 벤치마킹하십시오. Apache Tomcat은 적절한 커넥터 (sendFile이 활성화 된 APR)를 사용할 때 httpd 속도로 수행 할 수 있습니다. Apache httpd와 Tomcat 중에서 선택할 때 속도를 고려해서는 안됩니다.
  • 소켓 처리 / 시스템 안정성. Apache HTTP는 Apache Tomcat보다 오류 조건과 관련하여 더 나은 소켓 처리를 제공합니다. 주된 이유는 Apache Tomcat이 교차 플랫폼이어야하는 JVM을 통해 모든 소켓 처리를 수행해야하기 때문입니다. 문제는 소켓 최적화가 플랫폼 특정 시련이라는 것입니다. 대부분의 경우 Java 코드는 괜찮지 만 연결 끊김, 유효하지 않은 패킷, 유효하지 않은 IP의 유효하지 않은 요청으로 폭격을 당할 때 Apache HTTP는 JVM 기반 프로그램보다 이러한 오류 조건을 삭제하는 데 더 효과적입니다. (YMMV)

모두가 왜 당신에게 이유를 준 이후 톰캣 앞에 아파치를 넣어은 내가 당신에게 몇 가지 이유 이유를 제공 할 수 없습니다 로를 :

  • AJP 커넥터는 Comet , Websockets 등을 의미하지 않는 고급 IO를 지원하지 않으며 지원하지 않을 것입니다 .
  • AJP를 사용하지 않는 경우 Apache에 mod_proxy를 사용할 때 상당히 큰 프록시 오버 헤드가 있음을 알았습니다. 따라서 대기 시간이 짧은 Apache를 찾고 있다면 좋지 않을 것입니다.
  • Apache는 Nginx 또는 Lighttpd 등에 비해 다소 큰 발자국을 가지고 있습니다.

Apache를 앞에 두는 것은 아닙니다 .

Apache가 제공하는 것은 더 많은 플러그인이며 다른 웹 기술을 실행할 수 있도록합니다.

Tomcat 만 필요한 경우 HAProxy 또는 Nginx를로드 밸런서로 사용하는 것이 더 적합합니다.


  • 확장 성 -Amir와 user384706이 지적했듯이 Apache 뒤에서 애플리케이션의 여러 인스턴스를로드 밸런싱 할 수 있습니다. 이렇게하면 더 많은 볼륨을 처리하고 인스턴스 중 하나가 다운되는 경우 안정성을 높일 수 있습니다.

  • 보안 -Apache, Tomcat 및 Glassfish는 모두 SSL을 지원하지만 Apache를 사용하기로 결정한 경우에는 SSL을 구성해야 할 가능성이 높습니다. 공격 (DoS, XSS, SQL 삽입 등)에 대한 추가 보호를 원하는 경우 mod_security 웹 애플리케이션 방화벽을 설치할 수 있습니다 .

  • 추가 기능 -아파치는 URL 재 작성, 다른 프로그래밍 언어와의 인터페이스, 인증 및 기타 다양한 기능에 사용할 수있는 멋진 모듈이 많이 있습니다.

  • 성능 -정적 콘텐츠가 많은 경우 Apache와 함께 제공하면 성능이 향상됩니다. 대부분의 콘텐츠가 동적 인 경우 Tomcat 또는 Glassfish 만 사용하는 것이 그만큼 빠릅니다 (아마 더 빠름). ( 이 질문 에 대한 답변에서 지적했듯이 더 이상 사실이 아닙니다.)


Apache를 Tomcat 앞에 배치하는 한 가지 이유는로드 균형 조정 때문입니다.
요청은 Apache 서버 앞에 도달하고 로드 및 가용성에 따라 백엔드 Tomcat 컨테이너배포됩니다 .
클라이언트는 하나의 IP (Apache) 만 알고 있지만 요청은 여러 컨테이너에 분산됩니다.
따라서 이것은 일종의 분산 웹 응용 프로그램을 배포하고 강력한 것이 필요한 경우입니다.
질문이 간단한 웹 응용 프로그램에 관한 것이라면 dbyrne 답변을 참조하십시오.


LAMP 스택을 실행하는 경우 아파치에서 PHP / Ruby 항목을 실행하고 mod_jk를 사용하여 자바 항목을 tomcat에 전달할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/5122345/why-use-apache-web-server-in-front-of-glassfish-or-tomcat

반응형