Заявление об отказе от ответственности: не администратор сервера
Я ломал голову над этим уже несколько недель (не всегда обращаю внимание на то, что это было бы безумно). Я пытался подключить свой сервер apache2 к моему серверу tomcat до такой степени, что если кто-то встречает * .jsp или любой сервлет при навигации по моему веб-каталогу, он передается tomcat.
у меня есть оба Apache2.0 (port 9099)
и Tomcat6 (9089)
работает на Debian lenny на том же компьютере.
В настоящее время, mod_jk
включен с mod_jk.conf
в $apacheHOME/mods-enabled/
с содержанием:
# Where to find workers.properties
JkWorkersFile /etc/apache2/workers.properties
# Where to put jk shared memory
JkShmFile /var/log/at_jk/mod_jk.shm
# Where to put jk logs
JkLogFile /var/log/at_jk/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 servlet for context /examples to worker named worker1
JkMount /*/servlet/* worker1
# Send JSPs for context /examples to worker named worker1
JkMount /*.jsp worker1
мой workers.properties
находится в $apacheHOME/
с содержанием:
workers.tomcat_home=/var/lib/tomcat6
workers.java_home=/usr/lib/jdk1.6.0_23/db/
worker.list=worker1
ps=/
worker.worker1.port=9081
worker.worker1.host=localhost
worker.worker1.type=ajp13
мой web.xml
в $tomcatHOME/conf
включены следующие сервлеты
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-cla$
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
server.xml:
-> ->
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="9081" protocol="AJP/1.3" redirectPort="9088" />
mod_jk.log:
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_open_socket::jk_connect.c (566): connect to 127.0.0.1:9081 failed (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_connect_to_endpoint::jk_ajp_common.c (869): Failed opening socket to (127.0.0.1:9081) (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_send_request::jk_ajp_common.c (1359): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_service::jk_ajp_common.c (2194): (worker1) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_open_socket::jk_connect.c (566): connect to 127.0.0.1:9081 failed (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_connect_to_endpoint::jk_ajp_common.c (869): Failed opening socket to (127.0.0.1:9081) (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_send_request::jk_ajp_common.c (1359): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_service::jk_ajp_common.c (2194): (worker1) sending request to tomcat failed (recoverable), because of error during request sending (attempt=2)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_service::jk_ajp_common.c (2212): (worker1) Connecting to tomcat failed. Tomcat is probably not started or is listening on the wrong port
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_handler::mod_jk.c (2364): Service error=-3 for worker=worker1
Похоже, проблема с портом 9081, его не использует ни один процесс, поэтому я предполагаю, что он настроен неправильно. Хотя мой порт tomcat работает нормально.
ickronia:/var/log/at_jk# telnet localhost 9081
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
ickronia:/var/log/at_jk#
Насколько я могу судить, здесь нет ничего забавного, поскольку журналы apache2, tomcat и mod_jk отображаются зеленым цветом; но всякий раз, когда я перехожу к jsp, он просто отображает javascript.
Я не уверен, в чем именно заключается проблема, несмотря на то, что проливал журналы и документацию за помощью. Я совсем новичок в мире сервлетов.
Вы не говорите, выполнили ли вы JKMountCopy на виртуальном хосте или нет.
В моем поле ubuntu в / etc / apache2 / sites-enabled / 000-default-ssl
<VitualHost _default_:443>
JkMountCopy On
blah
blah
</VirtualHost>
Из http://tomcat.apache.org/connectors-doc/reference/apache.html Если вы найдете описание директивы JkMount, вы увидите, что глобальные директивы не унаследованный VirtualHosts. Вам нужно повторно указать, или, если вы хотите использовать все, что вам нужно, используйте JkMountCopy On.
Также убедитесь, что порт, к которому вы подключаетесь, имеет коннектор AJP, настроенный в server.xml. Порт перенаправления относится к порту ssl.
Из образца, включенного в Tomcat ...
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Я предполагаю, что server.xml в tomcat не использует CoyoteConnector для порта 9089, который говорит о протоколе ajp. Я подозреваю, что он говорит об этом http, и что если вы нажмете http: // сервер: 9089 / он загрузится.
Вы хотите, чтобы worker.properties использовал порт CoyoteConnector.
Ответьте два, так как вносится слишком много правок. Это моя рабочая установка: -
мод-jk.conf: -
JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkMount /portal worker1
JkMount /portal/* worker1
в сайтах с поддержкой: -
<VirtualHost _default_:443>
JkMountCopy On
blah
blah
</VirtualHost>
worker.properties (обычно он проходит через loadbalancer, но здесь упрощен): -
worker.list=worker1
worker.worker1.port=9009
worker.worker1.host=host_name
worker.worker1.type=ajp13
tomcat server.xml: -
<?xml version='1.0' encoding='utf-8'?>
<Server port="9005" shutdown="SHUTDOWN">
<!-- cut -->
<Service name="Catalina">
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="9443" />
<Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true"
keystoreFile="<path_to_keystore>.ks"
kestorePass="<password for keystore>"
maxThreads="200" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
Итак, Tomcat прослушивает http на 9080, https на 9443 и ajp на 9009.
Apache прослушивает https-порт 443. Все, что отправляется в контекст / portal на этом сервере, отправляется через mod_jk worker1, который перенаправляется на tomcat через ajp.
Надеюсь это поможет!