首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mod_jk通过Apache webserver端口80访问web容器?

使用mod_jk通过Apache webserver端口80访问web容器?
EN

Stack Overflow用户
提问于 2012-02-10 08:16:34
回答 2查看 4.5K关注 0票数 2

我安装了GlassFish 3.1.1,并使用mod_jk将其设置为与Apache webserver2.2.x一起使用。使用8080端口时,一切都很正常。例如,部署在GlassFish上的example hello.war application在以下方面运行良好:

代码语言:javascript
复制
http://www.mydomain.com:8080/hello/

我的问题是,我需要更改(或添加)什么才能使用这样的地址访问hello.war应用程序(并使用端口80;这样我最终可以关闭端口8080):

代码语言:javascript
复制
http://www.mydomain.com/hello/

目标是让所有外部流量都通过Apache webserver端口80来访问GlassFish。使用this site's instructions作为灵感,我修改了httpd.conf,使其包含以下行(在www.mydomain.com的现有VirtualHost标记内)

代码语言:javascript
复制
JkMount /hello/* worker1
JkMount /hello worker1

然后,我重新启动Apache and服务器并转到:

代码语言:javascript
复制
http://www.mydomain.com/hello

网站挂起(旋转30秒)。可能的问题是什么?Apache和Glassfish之间没有防火墙,没有负载均衡,也没有集群。这是一个全新安装的CentOS 6.2服务器。

作为参考,我的httpd.conf文件包括以下内容(以及其他内容):

代码语言:javascript
复制
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文件是:

代码语言:javascript
复制
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

更新时间: 2/11/2012 8:30 11我修复了上面发布的原始问题。出现问题的原因是(1)存在GlassFish错误(请参阅下面凯文的答案以了解此发现),以及(2)我以某种方式无意中设置了多个正在侦听同一端口8009的http侦听器。当我删除所有的监听程序,然后创建一个我想要的监听程序时,我能够解决这篇文章的初衷。然而,在查看server.log时,我看到了另一个问题...

当我启动GlassFish服务器时,我发出以下命令(注意:Port4850只是GlassFish提供的一个管理web控制台;它需要用于某些命令(不确定具体是哪些命令),但它似乎不会对所有命令造成任何伤害):

代码语言:javascript
复制
# ./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 Administration Guide获取(点击PDF链接,翻到第150页)。这将开始“启用mod_jk”一节,具体参见第151页的步骤5和6)。

我在下面的GlassFish服务器日志中加入了一个片段,显示了一种类型的严重错误和最大线程数过低的警告。

代码语言:javascript
复制
[#|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时,我得到以下内容:

代码语言:javascript
复制
admin-thread-pool
http-thread-pool
thread-pool-1

我将Http线程池大小从默认值5更改为值200,然后重新启动GlassFish并查看server.log文件...没有任何变化(仍然得到上面相同的错误消息)。admin-thread-pool的最大线程数为50,而thread-pool-1的最大线程数为200。有什么办法解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-14 10:41:53

在GlassFish开源论坛的帮助下,我终于找出了问题所在(总结如下,供其他人参考)。在上面的原始帖子中,我使用了:

问题#1 ( mod_jk和GlassFish之间的AJP连接中断,最初发布的问题)

代码语言:javascript
复制
# ./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将使用一个名为here -http://docs.oracle.com/cd/E18930_01/html/821-2416/gfaad.html的变量。但是,此侦听器名称必须与步骤6中的jk-connector的使用一致。因此,在步骤5中,侦听器名称必须为jk-connector,或者在步骤5中,步骤6中的jk-connector必须为侦听器名称。在我的示例中(参见上面的原始发布代码),我在步骤5中将侦听器名称设置为gf_listener,并在步骤6中使用jk-connector。这造成了两个侦听器在同一端口上侦听的情况,这是不允许的。一种更好的解决方案是简单地避免发出create-http-server命令,该命令已被弃用,仅为了向后兼容而显示(尽管没有相关文档)。

问题#2 (上面提到的严重错误)

另一个问题是worker属性必须放入文件~/apache/conf/worker.properties,所有连接器属性(例如,没有worker属性)都放入domain-dir/conf/glassfish-jk.properties文件。这是令人困惑的,因为上面第153页的文档example 6-7明确声明了This example shows a workers.properties or glassfish-jk.properties file that is set for load balancing...,其中它们在glassfish-jk.properties文件中显示了setting worker属性。这是错误的(给定了上面在同一文档中使用的目录结构和命令)。

问题#3 (上面提到的线程池警告)

我删除了threadpool.max_threads_too_low的警告,因为我在web控制台中错误地增加了默认配置,而不是服务器配置的设置(在我增加服务器配置的设置后,警告消失了)。可以在命令行中增加此值,甚至可以使用web管理控制台(Configuration > server-config > thread pool)更轻松地增加此值。命令行方式是:

代码语言:javascript
复制
configs.config.server-config.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size=200

对于200个线程(示例)。

解决方案:

这是我对GlassFish的最后一次完整的介绍:

代码语言:javascript
复制
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相关。

票数 1
EN

Stack Overflow用户

发布于 2012-02-10 10:53:02

你的上下文根是什么?你的应用会响应uri "/glassfish-test“还是"/hello”吗?

如果是"/hello",首先尝试一些简单的东西,然后在它工作之后,你可以尝试重定向

JkMount /hello/* worker1

更新:刚看到你的错误信息。确保glassfish确实在监听端口8009。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9220969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档