получить доступ к веб-контейнеру через порт 80 веб-сервера Apache, используя mod_jk? - PullRequest
2 голосов
/ 10 февраля 2012

Я установил GlassFish 3.1.1 и настроил его для работы с Apache Webserver 2.2.x, используя mod_jk.Все отлично работает при использовании порта 8080. Например, пример приложения hello.war , развернутого на GlassFish, прекрасно работает с:

http://www.mydomain.com:8080/hello/

Мой вопрос: что мне нужно изменить (или добавить) таким образом, чтобы я мог получить доступ к приложению hello.war, используя такой адрес (и используя порт 80; чтобы я мог в конечном итоге закрыть порт 8080):

http://www.mydomain.com/hello/

Цель состоит в том, чтобы получить весь внешний трафикПройдите через порт 80 веб-сервера Apache для доступа к GlassFish.Используя инструкции этого сайта в качестве вдохновения, я изменил httpd.conf, добавив в него следующие строки (внутри уже существующих тегов VirtualHost для www.mydomain.com)

JkMount /hello/* worker1
JkMount /hello worker1

Затем перезапускаюApache веб-сервер и перейдите по адресу:

http://www.mydomain.com/hello

и веб-сайт зависает (вращающееся колесо в течение 30 с).В чем может быть проблема?Между Apache и Glassfish нет брандмауэра, нет балансировки нагрузки и кластеризации.Это новый сервер CentOS 6.2 со всеми новыми установками.

Для справки, мой файл httpd.conf включает в себя следующее (помимо прочего):

LoadModule jk_module /etc/httpd/modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile /etc/httpd/logs/mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
...
Listen 0.0.0.0:80

, а файл glassfish-jk.properties:

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

ОБНОВЛЕНИЕ: 2/11/2012 20:30 Я исправил первоначальную проблему, опубликованную выше.Проблема возникла потому, что (1) была ошибка GlassFish (см. Ответ Кевина ниже об этом открытии), и (2) мне каким-то образом удалось непреднамеренно настроить несколько прослушивателей http, которые прослушивали один и тот же порт 8009. Когда я удалил всеСлушатели, а затем создали одного слушателя, которого я хотел, я смог решить первоначальную цель этой публикации.Однако при просмотре server.log я вижу другую проблему ...

Когда я запускаю сервер GlassFish, я выполняю следующие команды (примечание: порт 4850 - это просто административная веб-консоль, предоставляемая GlassFish;он должен быть там для некоторых команд (не знаю точно, какие именно), но, кажется, он ничем не мешает, будучи рядом со всеми):

# ./asadmin
asadmin> asadmin start-domain --port 4850
asadmin> deploy /path/to/file/hello.war --port 4850
asadmin> create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs server gf_listener --port 4850 
asadmin> create-network-listener --protocol http-listener-1 --listenerport 8009 --jkenabled true jk-connector --port 4850
asadmin> set server-config.network-config.network-listeners.network-listener.jk-connector.jk-configuration-file=/home/glassfish/glassfish3/glassfish/domains/domain1/config/glassfish-jk.properties --port 4850
asadmin> restart-domain --port 4850

Приведенные выше команды взяты непосредственно из Руководство администратора GlassFish (нажмите на ссылку PDF, перейдите на страницу 150. Откроется раздел «Включение mod_jk», см. Шаги 5 и 6 на странице 151).

Я включил фрагмент из журнала сервера GlassFish ниже, показывающий один тип СЕРЬЕЗНОЙ ошибки и ПРЕДУПРЕЖДЕНИЕ для макс. Потоков, слишком низких.

[#|2012-02-11T20:23:23.666-0800|INFO|glassfish3.1.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=14;_ThreadName=Thread-2;|Grizzly Framework 1.9.36 started in: 43ms - bound to [0.0.0.0:8080]|#]
[#|2012-02-11T20:23:23.666-0800|INFO|glassfish3.1.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=11;_ThreadName=Thread-2;|Grizzly Framework 1.9.36 started in: 6ms - bound to [0.0.0.0:3700]|#]
[#|2012-02-11T20:23:23.666-0800|INFO|glassfish3.1.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=12;_ThreadName=Thread-2;|Grizzly Framework 1.9.36 started in: 24ms - bound to [0.0.0.0:4850]|#]
[#|2012-02-11T20:23:23.668-0800|INFO|glassfish3.1.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=15;_ThreadName=Thread-2;|Grizzly Framework 1.9.36 started in: 2ms - bound to [0.0.0.0:7676]|#]
[#|2012-02-11T20:23:23.691-0800|INFO|glassfish3.1.1|javax.enterprise.system.core.com.sun.enterprise.v3.admin.adapter|_ThreadID=10;_ThreadName=Thread-2;|The Admin Console is already installed, but not yet loaded.|#]
[#|2012-02-11T20:23:23.781-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0169: Created HTTP listener [http-listener-1] on host/port [0.0.0.0:8080]|#]
[#|2012-02-11T20:23:23.788-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0169: Created HTTP listener [http-listener-2] on host/port [0.0.0.0:8181]|#]
[#|2012-02-11T20:23:23.793-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0169: Created HTTP listener [admin-listener] on host/port [0.0.0.0:4850]|#]
[#|2012-02-11T20:23:23.803-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0170: Apache mod_jk/jk2 attached to virtual-server [server]  listening on port [8,009]|#]
[#|2012-02-11T20:23:23.806-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0170: Apache mod_jk/jk2 attached to virtual-server [server]  listening on port [8,009]|#]
[#|2012-02-11T20:23:23.826-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0171: Created virtual server [server]|#]
[#|2012-02-11T20:23:23.828-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0171: Created virtual server [__asadmin]|#]
[#|2012-02-11T20:23:24.316-0800|INFO|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=10;_ThreadName=Thread-2;|WEB0172: Virtual server [server] loaded default web module []|#]
[#|2012-02-11T20:23:24.416-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker.worker1 worker|#]
[#|2012-02-11T20:23:24.416-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker.worker1 worker|#]
[#|2012-02-11T20:23:24.416-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker worker|#]
[#|2012-02-11T20:23:24.416-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker.worker1 worker|#]
[#|2012-02-11T20:23:24.417-0800|INFO|glassfish3.1.1|org.apache.jk.common.ChannelSocket|_ThreadID=10;_ThreadName=Thread-2;|JK: ajp13 listening on /0.0.0.0:8009|#]
[#|2012-02-11T20:23:24.426-0800|WARNING|glassfish3.1.1|org.apache.tomcat.util.threads.ThreadPool|_ThreadID=10;_ThreadName=Thread-2;|threadpool.max_threads_too_low|#]
[#|2012-02-11T20:23:24.428-0800|INFO|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|Jk running ID=0 time=0/25  config=null|#]
[#|2012-02-11T20:23:24.434-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker.worker1 worker|#]
[#|2012-02-11T20:23:24.434-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker.worker1 worker|#]
[#|2012-02-11T20:23:24.435-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker worker|#]
[#|2012-02-11T20:23:24.435-0800|SEVERE|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|No class name for worker.worker1 worker|#]
[#|2012-02-11T20:23:24.435-0800|INFO|glassfish3.1.1|org.apache.jk.common.ChannelSocket|_ThreadID=10;_ThreadName=Thread-2;|JK: ajp13 listening on /0.0.0.0:8009|#]
[#|2012-02-11T20:23:24.436-0800|WARNING|glassfish3.1.1|org.apache.tomcat.util.threads.ThreadPool|_ThreadID=10;_ThreadName=Thread-2;|threadpool.max_threads_too_low|#]
[#|2012-02-11T20:23:24.436-0800|INFO|glassfish3.1.1|org.apache.jk.server.JkMain|_ThreadID=10;_ThreadName=Thread-2;|Jk running ID=0 time=0/3  config=null|#]
and so on...

Кто-нибудь знает, как устранить СЕРЬЕЗНЫЕ ошибкидля No class name for worker.worker1 worker и как устранить threadpool.max_threads_too_low ПРЕДУПРЕЖДЕНИЕ?

К какому пулу потоков они относятся?Например, когда я набираю: asadmin> list-threadpools server, я получаю следующее:

admin-thread-pool
http-thread-pool
thread-pool-1

Я изменил размер http-thread-pool со значения по умолчанию 5 на значение 200, затем перезапустилGlassFish и посмотрел на файл server.log и ... ничего не меняется (все равно получаю то же сообщение об ошибке выше).Максимальное количество потоков для admin-thread-pool составляет 50, а для thread-pool-1 - 200. Есть идеи, как это исправить?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Какой у вас контекстный корень? Ваше приложение отвечает на uri "/ glassfish-test" или "/ hello"?

Если это "/ привет", попробуйте сначала что-то простое, и после того, как оно заработает, вы можете попытаться перенаправить

JkMount / hello / * worker1

Обновление: только что увидел ваше сообщение об ошибке. Убедитесь, что Glassfish действительно прослушивает порт 8009.

1 голос
/ 14 февраля 2012

Наконец-то выяснили, в чем проблема с помощью форума открытого исходного кода GlassFish (см. Ниже для ознакомления).В оригинальной публикации выше я использовал:

Проблема # 1 (разрыв соединения AJP между mod_jk и GlassFish, оригинальная опубликованная проблема)

# ./asadmin
asadmin> asadmin start-domain --port 4850
asadmin> deploy /path/to/file/hello.war --port 4850
asadmin> create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs  server gf_listener --port 4850 
asadmin> create-network-listener --protocol http-listener-1 --listenerport 8009 --jkenabled true jk-connector --port 4850
asadmin> set server-config.network-config.network-listeners.network-listener.jk-connector.jk-configuration-file=/home/glassfish/glassfish3/glassfish/domains/domain1/config/glassfish-jk.properties --port 4850
asadmin> restart-domain --port 4850

Это взято из Руководства администратора.Хотя HTML-файл правильный здесь (http://docs.oracle.com/cd/E18930_01/html/821-2416/gfaad.html),, если вы выберете PDF и перейдете на страницу 151, на шаге 5 используется переменная с именем имя-слушателя . Однако этот слушатель-name должен согласиться с использованием jk-соединителя на шаге 6. Таким образом, либо имя слушателя должно быть jk-соединителем на шаге 5, либо jk-соединитель на шаге 6 должен быть имя слушателя на шаге 5. В моем случае (см. оригинальный код публикации выше) я установил имя слушателя на gf_listener на шаге 5 и использовал jk-connector на шаге 6. Это создало ситуациюгде два слушателя прослушивали один и тот же порт, что недопустимо. Лучшее решение - просто избегать ввода команды create-http-server, которая не рекомендуется и отображается только для обратной совместимости (хотя и не документирована как таковая).

Проблема № 2 (более серьезные ошибки отмечены выше)

Другая проблема заключается в том, что рабочие свойства должны идти в файл ~ / apache / conf / worker.properties и все атрибуты коннектора (например, иНЕТСвойства работника) перейдите в файл domain-dir / conf / glassfish-jk.properties.Это сбивает с толку, поскольку в приведенном выше примере PDF документа 6-7 в документе 6-7 явно указывается This example shows a workers.properties or glassfish-jk.properties file that is set for load balancing..., где они показывают настройки рабочих свойств в файле glassfish-jk.properties.Это неправильно (учитывая структуру каталогов и команды, использованные выше в том же документе).

Проблема № 3 (ПРЕДУПРЕЖДЕНИЕ, отмеченное выше для пула потоков)

Я удалил ПРЕДУПРЕЖДЕНИЕ для threadpool.max_threads_too_low, потому что я по ошибке увеличил конфигурацию по умолчанию, а не настройки конфигурации сервера в веб-консоли (после того, как я увеличил настройки конфигурации сервера, предупреждение исчезло).Увеличение этого значения может быть сделано из командной строки или даже проще с помощью консоли веб-администратора (Конфигурация> server-config> пулы потоков).Путь командной строки:

configs.config.server-config.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size=200

для 200 потоков (пример).

Решение:

Вот мой последний и полный вывод для GlassFish:

asadmin> start-domain
asadmin> deploy /home/glassfish/apps/hello.war
asadmin> create-network-listener --protocol http-listener-1 --listenerport 8009 --jkenabled true jk-connector
asadmin> set server-config.network-config.network-listeners.network-listener.jk-connector.jk-configuration-file=/home/glassfish/glassfish3/glassfish/domains/domain1/config/glassfish-jk.properties
asadmin> restart-domain

Примечание: настройка create-jvm-options отсутствует (как указано в руководстве администратора PDF выше, шаг 7), поскольку это относится к http-listener, который больше здесь не используется.

...