Bagaimana cara kerja Tomcat AJP-Connectors?

9

Saya ingin mengakses Tomcat melalui server-Apache menggunakan konektor. Saya tetap berpegang pada dokumentasi: http://tomcat.apache.org/connectors-doc/generic_howto/quick.html Saya hanya memodifikasinya sedikit agar sesuai dengan struktur direktori yang digunakan pada sistem Debian- (Squeeze) -System saya.

Jadi saya menambahkan yang berikut ini ke /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

Saya berkomentar keluar memuat modul, karena itu sudah terjadi, setelah saya menginstal mod_jk melalui sistem paket (libapache2-mod-jk).

Properti pekerja saya terlihat seperti ini:

# 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 diinstal langsung dari arsip dari Apache, karena itu bukan paket di Squeeze. Tomcat 7 berjalan dan dapat dijangkau di bawah portnya sendiri (8180, untuk tidak bertabrakan dengan tomcat6 dari sistem paket). Sejauh yang saya mengerti, saya harus melihat sekarang situs tomcat dengan http: // host / tomcat7 / . Tapi saya malah mendapat 404. Apa yang salah?


Setelah quanta mengisyaratkan untuk mengatur level log ke debug (terima kasih) saya melakukan itu dan menemukan pesan kesalahan berikut di mod_jk.log: 'jk_map_to_storage :: mod_jk.c (3585): hilang peta uri untuk 176.9.9.55:/tomcat7 / ' Saya mencari di Google untuk itu dan menemukan http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html

Jadi opsi yang diatur dalam httpd.conf tidak digunakan di VirtualHosts. Saya menambahkan 'JkMountCopy On' ke VirtualHost - dan mendapatkan Tomcat 404 (bukan httpd 404). Masalahnya di sini, bahwa ia mencoba mengakses URI yang sama persis terpasang, jadi dalam kasus saya / tomcat7. Saya menggunakan nama webapp sebagai mount dan semuanya baik-baik saja untuk saya.

Mnementh
sumber

Jawaban:

4

Pastikan bahwa:

  1. Anda mengetikkan garis miring http: // host / tomcat7 / , bukan http: // host / tomcat7 .
  2. Anda memiliki konektor AJP 1.3 untuk mendengarkan pada port 8009 di server.xml:

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

Jika masih tidak berhasil, saya sarankan Anda menyalakan debug dan lihatlah mod_jk.log.


EDIT:

Jika Anda menggunakan:

JkMount  /tomcat7/* worker1

dan akses melalui http: // host / tomcat7 , saya yakin Anda akan mendapatkan kesalahan Apache 404.

Anda dapat menentukan JkMountdi bagian Virtual Host yang Anda inginkan:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>
kuanta
sumber
Saya mencoba dengan dan tanpa garis miring dan server.xml berisi baris yang disebutkan. The mod_jk.log tidak mengandung sesuatu yang menarik, hanya pesan, mod_jk yang diinisialisasi.
Mnementh
1
Apakah Anda mengatur JkLogLevelke debugdan memuat kembali / restart Apache? Coba ini: http://host/tomcat7/xx. Poskan seluruh konten server.xml.
quanta
Ah, terima kasih atas petunjuknya dengan tingkat log.
Mnementh
Silakan periksa jawaban saya yang diedit di atas.
quanta
1

Saya memiliki masalah yang sama. Solusinya adalah berubah JkMount /tomcat7* worker1menjadi JkMount /your-servlet-app* worker1. Anda dapat memiliki sebanyak yang JkMountAnda inginkan.

Misalnya, setelah menambahkan JkMount /manager* worker1, Anda akan dapat mengakseshttp://host/manager/html

Saya menemukan masalah ini setelah saya mencoba AJP dan http. Saya memiliki log akses berikut di blog saya/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

Dua baris log pertama dihasilkan saat saya menggunakan AJP. Tiga yang terakhir dihasilkan ketika saya menggunakan http untuk secara langsung mengakses kucing jantan. Jadi apache meneruskan seluruh URL ke kucing jantan, alih-alih menghapus awalan jkmount.

Wu Yongzheng
sumber