Làm cách nào để Tomcat AJP-Connector hoạt động?


9

Tôi muốn truy cập Tomcat thông qua máy chủ web Apache bằng các trình kết nối. Tôi đã bám sát tài liệu: http://tomcat.apache.org/connector-doc/generic_howto/quick.html Tôi chỉ sửa đổi một chút để khớp với cấu trúc thư mục được sử dụng trên Debian- (Squeeze) -System.

Vì vậy, tôi đã thêm phần sau vào /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

Tôi đã nhận xét việc tải mô-đun, vì điều đó đã xảy ra, sau khi tôi cài đặt mod_jk thông qua hệ thống gói (libapache2-mod-jk).

Công nhân của tôi. Sản phẩm trông như thế này:

# 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 được cài đặt trực tiếp từ kho lưu trữ từ Apache, vì nó không phải là một gói trong Squeeze. Tomcat 7 đang chạy và có thể truy cập dưới cổng riêng của nó (8180, để không va chạm với tomcat6 từ hệ thống gói). Theo như tôi hiểu, bây giờ tôi sẽ thấy trang web tomcat với http: // host / tomcat7 / . Nhưng tôi nhận được một 404 thay thế. Chuyện gì thế?


Sau khi lượng tử gợi ý để đặt mức ghi nhật ký để gỡ lỗi (cảm ơn), tôi đã làm điều đó và tìm thấy thông báo lỗi sau trong mod_jk.log: 'jk_map_to_st Storage :: mod_jk.c (3585): thiếu bản đồ uri cho 176.9.9.55:/tomcat7 / '. Tôi đã googled cho điều đó và tìm thấy http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html

Vì vậy, các tùy chọn được đặt trong httpd.conf không được sử dụng trong Virtualhost. Tôi đã thêm 'JkMountCopy On' vào Virtualhost của mình - và lần đầu tiên nhận được Tomcat 404 (thay vì httpd 404). Vấn đề ở đây là anh ta cố gắng truy cập chính xác URI được gắn, vì vậy trong trường hợp của tôi / tomcat7. Tôi đã sử dụng thay vì tên của ứng dụng web là gắn kết và mọi thứ đều tốt cho tôi.

Câu trả lời:


4

Đảm bảo rằng:

  1. bạn gõ một dấu gạch chéo http: // host / tomcat7 / , không phải http: // host / tomcat7 .
  2. bạn có trình kết nối AJP 1.3 lắng nghe trên cổng 8009 trong server.xml:

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

Nếu nó vẫn không hoạt động, tôi khuyên bạn nên bật gỡ lỗi và xem xét mod_jk.log.


BIÊN TẬP:

Nếu bạn dùng:

JkMount  /tomcat7/* worker1

và truy cập qua http: // host / tomcat7 , tôi chắc chắn bạn sẽ gặp lỗi Apache 404.

Bạn có thể chỉ định JkMounttrong phần Máy chủ ảo mà bạn muốn:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

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

Tôi đã thử với và không có dấu gạch chéo và server.xml chứa dòng được đề cập. Mod_jk.log không chứa thứ gì đó thú vị, chỉ có thông báo, mod_jk đã được khởi tạo.
Mnementh

1
Bạn đã thiết lập JkLogLevelđể debugvà tải lại / khởi động lại Apache? Hãy thử điều này : http://host/tomcat7/xx. Đăng toàn bộ nội dung của server.xml.
lượng tử

Ah, cảm ơn vì gợi ý với cấp độ log.
Mnementh

Vui lòng kiểm tra câu trả lời được chỉnh sửa ở trên của tôi.
lượng tử

1

Tôi đã từng gặp vấn đề tương tự. Giải pháp là thay đổi JkMount /tomcat7* worker1thành JkMount /your-servlet-app* worker1. Bạn có thể có nhiều JkMountnhư bạn muốn.

Ví dụ: sau khi thêm JkMount /manager* worker1, bạn sẽ có thể truy cậphttp://host/manager/html

Tôi đã tìm ra vấn đề này sau khi tôi thử cả AJP và http. Tôi đã có nhật ký truy cập sau đây trong/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

Hai dòng nhật ký đầu tiên được tạo trong khi tôi sử dụng AJP. Ba cái cuối cùng được tạo ra trong khi tôi sử dụng http để truy cập trực tiếp vào tomcat. Vì vậy, apache đang chuyển toàn bộ URL cho tomcat, thay vì xóa tiền tố jkmount.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.