저는 주로 Java 개발자이며 개발자와 sysadmins의 차이를 둘러싼 질문을하게됩니다.
몇 년 전, Tomcat을 앱 서버로 실행하는 것이 참신한 일이었을 때 Apache와 함께 사용하는 것이 관례였습니다. 내가 이해하는 것처럼 이것은 다음과 같은 이유로 수행되었습니다.
- Java는 “느린”것으로 간주되어 Apache가 정적 컨텐츠를 직접 제공하도록하는 것이 도움이되었습니다.
- 루트로 실행하지 않으면 Tomcat이 포트 80/443을 수신 할 수 없었습니다.
Java는 더 이상 느린 것으로 간주되지 않으며 Apache를 믹스에 추가하면 실제로 속도를 높이는 데 도움이되지 않습니다.
포트 문제에 관해서는 요즘 앱 서버를 포트 80/443에 연결하는 더 간단한 방법이 있습니다.
그래서 제 질문은 요즘 Apache와 Java Webapps를 정면으로 맞설 때 어떤 이점이 있습니까? 그렇다면 아파치는 여전히 갈 길입니까? Nginx를 봐야합니까? Tomcat 대신 Glassfish를 사용하고 있습니다.
답변
대부분의 사람들은 정적 파일 때문에 앞에 뭔가가 필요하다고 말합니다.
다음과 같은 이유로 다소 바보입니다.
- APR에서 아파치와 동일한 IO를 사용하도록 Tomcat을 구성 할 수 있습니다.
- 어쨌든 CDN (콘텐츠 전송 네트워크)을 사용해야합니다.
부하 분산 및 장애 조치를 처리하기 위해 Tomcat / jetty / jboss 앞에 무언가가 필요한 실제 이유.
” … Tomcat 엔진은 전체 생태계의 아킬레스 건입니다 … “라는 말을 듣지 않는 것이 좋습니다. 우리 모두가 사실이 아님을 알기 때문에 데이터베이스와 연결 풀링은 그럴 것입니다.
답변
앱 주변의 생태계에 따라 다릅니다. 인트라넷 환경에서 Tomcat 앞에는 아무것도 필요하지 않습니다.
인터넷을 통해 대중을 대상으로하는 서비스 인 경우에 따라 다릅니다. 아파치는 mod_security와 같은 모듈을 제공하기 때문에 좋습니다. 그러나 아파치 (또는 ngix)의 구성에 대해 잘 모르면 구성 오류로 인해 더 많은 공격이나 실패 지점에 노출 될 수 있습니다.
앞의 Apache는 webapp을 업그레이드하고 재시작을 기다려야하는 경우 중단 페이지를 제공하는 데 유용합니다. 그러나 재시작이 드물거나 올바르게 시간이 정해진 경우 Tomcat을 독립형으로 전환해야하는 또 다른 이유입니다.
Tomcat FAQ는 http://wiki.apache.org/tomcat/FAQ/Connectors#Q3과 같은 추가 사항을 다루는 이것에 대해서도 설명합니다
.
답변
Apache는 다중 프로세스 특성으로 인해 정적 컨텐츠를 제공하기에 적합하지 않습니다. Nginx는 비동기 I / O를 사용하여 요청을 처리하므로 더 적합합니다. 최신 Tomcat은 비동기 I / O (Java 용어의 NIO)도 사용할 수 있습니다. 예를 들어 tomcat-native
Tomcat이 비동기 I / O를 사용하도록 Fedora에 패키지를 설치해야합니다 .
답변
놀랍고, 이러한 답변 중 일부는 실제로 고성능 다중 계층 및 다중 서버 Tomcat 지원 웹 사이트를 운영하는 사람이 있습니까? OP, Tomcat이 “느린”것이 아니라는 당신의 원래 가정 … 와우. Tomcat 엔진은 전체 생태계의 아킬레스 건입니다.
예, 아파치를 앞두고 싶습니다. 웹 서버를 보호하는 htaccess 파일뿐만 아니라 가장 먼저 mod_rewrite (Tomcat에서 UrlRewriteFilter를 구현 했습니까?)를 제공합니다. Apache를 사용하면 Tomcat 노드 뒤에로드 밸런싱을 할 수 있고 정적 컨텐츠를 훨씬 빠르게 제공하고 Tomcat에서 비 Java (js / css / html / jpg / etc 등)로 요청 파이프를 오버로드하지 않기 때문에 Tomcat에서 더 나은 성능을 얻을 수 있습니다. 소지품. Apache에서 SSL을 오프로드 (하드웨어 LB에서 오프로드하지 않는 경우)하고 Java Keystore라는 트래픽을 처리하지 않아도됩니다. 많은 승리가 있습니다-일반적으로 평균 Java 코더로 대규모 트래픽을 처리 할 수 없기 때문에 mod_jk를 백엔드 노드로 조정하여 Java의 빈약 한 작은 두뇌를 과도하게 피할 수 있습니다
아파치 (또는 nginx 등)를 말하는 사람은 아파치 (Apache의 성능은 어쨌든 Tomcat보다 뛰어나므로 중요하지 않습니다)는 Tomcat 앞에서 좋은 생각이 아닙니다.
답변
Tomcat을 사용할 때 루트 권한이없는 권한 포트 바인딩의 문제 인 경우 Apache httpd로 앞면을 가리지 않아도됩니다. Tomcat은 기본적 jsvc
으로 컴파일해야합니다.
jsvc
Tomcat을 서비스로 시작하는 Java 서비스 래퍼입니다. 이 서비스는 루트로 시작하지만 일반 사용자로 Tomcat을 시작합니다. 따라서 Tomcat을 권한있는 포트에 바인딩 할 수 있습니다.
Glassfish에 대해서는 잘 모르지만 솔루션이 있는지 확인하고 그렇지 않은 경우 포트 전달 기술 (iptables 등)을 반드시 사용할 수 있습니다.
웹 서버 (예 : Apache httpd)로 응용 프로그램 서버를 선택하는 것은 웹 서버로만로드 밸런싱, 클러스터링 또는 정적 리소스 및 응용 프로그램 서버로 동적 리소스를 제공하는 것입니다.