Tomcat AJP-Connectors를 어떻게 작동합니까?


9

커넥터를 사용하여 Apache 웹 서버를 통해 Tomcat에 액세스하고 싶습니다. 나는 문서 에 충실했다 : http://tomcat.apache.org/connectors-doc/generic_howto/quick.html Debian- (Squeeze) -System에서 사용되는 디렉토리 구조와 일치하도록 약간 수정했습니다.

그래서 /etc/apache2/httpd.conf에 다음을 추가했습니다.

# Load mod_jk module
# Update this path to match your modules location
#LoadModule    jk_module  libexec/mod_jk.so
# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
#AddModule     mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile /etc/apache2/workers.properties
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile     /var/log/apache2/mod_jk.shm
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile     /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel    info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount  /tomcat7/* worker1

패키지 시스템 (libapache2-mod-jk)을 통해 mod_jk를 설치 한 후에 이미 발생했기 때문에 모듈로드를 주석 처리했습니다.

내 workers.properties는 다음과 같습니다.

# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

Tomcat 7은 Squeeze의 패키지가 아니기 때문에 Apache의 아카이브에서 직접 설치됩니다. Tomcat 7은 자체 포트 (8180, 패키지 시스템의 tomcat6과 충돌하지 않음)에서 실행 중이며 연결할 수 있습니다. 내가 이해하는 한, 이제 http : // host / tomcat7 /으로 Tomcat 사이트를 볼 수 있습니다 . 그러나 대신 404를 얻습니다. 뭐가 잘못 되었 니?


quanta가 로그 수준을 디버그로 설정하도록 암시 한 후 (감사합니다) mod_jk.log에서 다음 오류 메시지를 발견했습니다. / '. 나는 그것을 검색하고 http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html을 발견했다.

따라서 httpd.conf에 설정된 옵션은 VirtualHosts에서 사용되지 않았습니다. 내 VirtualHost에 'JkMountCopy On'을 추가하고 먼저 httpd 404 대신 Tomcat 404를 얻었습니다. 여기서 문제는, 마운트 된 것과 똑같은 URI에 액세스하려고 시도하므로 내 경우에는 / tomcat7입니다. 대신 webapp의 이름을 마운트로 사용했는데 모든 것이 좋습니다.

답변:


4

다음을 확인하십시오.

  1. 당신은 뒤에 슬래시 입력 에 http : // 호스트 / tomcat7 / ,하지 에 http : // 호스트 / tomcat7 .
  2. 다음의 포트 8009에서 AJP 1.3 커넥터 청취가 있습니다 server.xml.

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    

그래도 작동하지 않으면 디버그를 켜고를 참조하십시오 mod_jk.log.


편집하다:

사용하는 경우 :

JkMount  /tomcat7/* worker1

http : // host / tomcat7을 통해 액세스 하면 Apache 404 오류가 발생합니다.

원하는 JkMount가상 호스트 섹션에서 지정할 수 있습니다 .

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>

슬래시를 사용하거나 사용하지 않고 시도했으며 server.xml에 언급 된 행이 포함되어 있습니다. mod_jk.log에는 mod_jk가 초기화되었다는 흥미로운 메시지 만 포함되어 있습니다.
Mnementh

1
당신은 설정 했는가 JkLogLeveldebug와 다시로드 / 아파치를 다시 시작? 이것을 시도하십시오 : http://host/tomcat7/xx. 의 전체 내용을 게시하십시오 server.xml.
quanta

아, 로그 수준의 힌트에 감사드립니다.
Mnementh

위의 편집 된 답변을 확인하십시오.
quanta

1

나는 같은 문제가 있었다. 해결책은로 변경 JkMount /tomcat7* worker1하는 것 JkMount /your-servlet-app* worker1입니다. JkMount원하는만큼 가질 수 있습니다 .

예를 들어을 추가 JkMount /manager* worker1하면 액세스 할 수 있습니다.http://host/manager/html

AJP와 http를 모두 시도한 후에이 문제를 파악했습니다. 내 로그인 로그는 다음과 같습니다./var/log/tomcat7/localhost_access_log.txt

10.215.22.132 - - [04/Mar/2016:13:14:39 +0800] "GET /tomcat-demo/manager/ HTTP/1.1" 404 1009
10.215.22.132 - - [04/Mar/2016:13:26:05 +0800] "GET /tomcat-demo/manager/http/ HTTP/1.1" 404 1019
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/ HTTP/1.1" 302 -
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 401 2474
10.215.22.132 - yz [04/Mar/2016:13:40:35 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 200 12405

AJP를 사용하는 동안 처음 두 개의 로그 라인이 생성되었습니다. 마지막 3은 http를 사용하여 tomcat에 직접 액세스하는 동안 생성되었습니다. 따라서 아파치는 jkmount 접두사를 제거하는 대신 전체 URL을 Tomcat에 전달합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.