【问题标题】:How to setup glassfish 4.1.1 behind apache on Ubuntu 16.04 server如何在 Ubuntu 16.04 服务器上的 apache 后面设置 glassfish 4.1.1
【发布时间】:2017-04-19 04:49:10
【问题描述】:

我想在 Ubuntu 16.04 服务器上安装 Apache 和 Glassfish。 我已经安装了

  • apache2
  • libapache2-mod-jk
  • 玻璃鱼

以下是我遵循的步骤

配置 MPM 模块

在 /etc/apache2/mods-available/mpm_event.conf 中将 MaxRequestWorkers 设置为 400

配置 JK 模块

<IfModule mod_jk.c>
  JkWorkersFile /usr/share/glassfish4/glassfish/domains/<domain-doamin1>/config/workers.properties
  JkLogFile /var/log/apache2/mod_jk.log
  JkLogLevel error
  JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
  JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
  JkRequestLogFormat "%w %V %T"
  JkMountCopy all
    </IfModule>

JkMount /myapp/* ajp13
<Location "/myapp/WEB-INF/">
  require all denied
</Location>

在 GlassFish 域的配置目录中创建一个 workers.properties 文件

worker.list=ajp13
worker.ajp13.type=ajp13
worker.ajp13.host=localhost
worker.ajp13.port=8009
# load balancing only: worker.ajp13.lbfactor=50
connection_pool_size=10
connection_pool_timeout=600
worker.ajp13.socket_keepalive=False
worker.ajp13.socket_timeout=30

使用这些命令在 GlassFish 中创建 JK 侦听器

asadmin create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs server jk-listener

asadmin set server-config.network-config.network-listeners.network-listener.jk-listener.jk-enabled=true

然后我成功重新启动 glassfish 域,但是当我尝试使用 sudo /etc/init.d/apache2 restart 重新启动 apache2 时,出现以下错误

[....] 重新启动 apache2(通过 systemctl): apa​​che2.service 的 apache2.serviceJob 失败,因为控制进程以错误代码退出。有关详细信息,请参阅“systemctl status apache2.service”和“journalctl -xe”。 失败!

当我编辑位于 /etc/apache2/mods-available/jk.conf 下的文件 jk.conf 时发生此错误

我哪里错了。是否有完成此操作的完整指南?最后,较新的 apache2 没有文件 httpd.conf 并且整个 Internet 上的所有教程都依赖于这个文件。提前致谢。

【问题讨论】:

  • 此设置可能比您实际需要的要复杂一些。如果这就是您的全部配置,那么它将不起作用,因为您还没有告诉 Apache 将请求转发到哪里。此外,您已经在属性文件中定义了一个工作人员,但看起来您没有对它做任何事情。您只是想将 1 个 apache 转发到 1 个 glassfish 吗?
  • 是的,迈克这正是我想做的。

标签: apache glassfish ubuntu-server mod-jk


【解决方案1】:

由于您的目标只是将请求从 Apache 转发到 GlassFish,而不是将请求从 Apache 负载平衡到多个 GlassFish 服务器,因此我建议您避免使用 mod_jk。你当然可以用它来实现你的目标,但如果你对所涉及的概念不熟悉,你会发现它很难理解和维护。

您可以改为使用 mod_proxy 和可选的 mod_proxy_ajp

首先,定义:


AJP 与 HTTP

AJP 是一种类似于 HTTP 的协议,但基于二进制而不是基于文本的协议。它没有像 HTTPS/HTTP 这样的安全/不安全选项,因为它通常在防火墙后面使用,并且在这些情况下执行得比 HTTP 好得多。当您将任何 GlassFish 网络侦听器标记为 jk-enabled 时,您将启用 AJP 通信,而不是 HTTP。

您已通过 ubuntu apache2 软件包安装了 Apache,该软件包具有自己的配置示例结构,与您下载并解压缩后得到的布局不同。这有好处,但我们需要先了解 Apache 配置文件。


Apache 配置

通常,您会看到互联网指南将httpd.conf 作为配置文件进行编辑。这只是默认的“父”配置文件。在 Debian/Ubuntu 系统(及其衍生系统,如 Linux Mint)中,要查找的文件是 apache2.conf

从上到下读取此文件,并应用其指令,因此如果您将相同的属性设置为两个不同的值,则将应用第二个。 (更准确地说,它们都将适用,但第一个仅在读取第二个设置之前适用)。

此文件还可以专门“包含”文件和文件夹(其中包含的文件夹中的任何*.conf 文件都将被包含在内)。这些将在写入“include”语句的位置被读入并与主配置合并。所以主配置文件中的最后一行(如果它没有指定另一个文件)将无论如何都是要设置的最后一行配置。


Debian 配置布局

我会高度建议您阅读apache2.conf 文件中的开篇评论,因为它会告诉您有关布局的所有信息。可以说将所有配置保存在一个文件中是非常痛苦的维护。 Debian 软件包将配置分为三类:


网站 站点是网站或 Web 项目的单个配置文件。这可以是任何东西:PHP、静态 HTML 或部署到 GlassFish 等应用服务器的 Java EE 应用程序。

模组 模块被细分为*.load 文件,它们加载运行它们所需的实际库,以及*.conf 文件,它们具有模块的全局配置。请注意,此配置适用于使用该模块的每个站点,因此最好将任何站点/应用特定模块配置放在适当的 site.conf 文件中

配置 这些文件仅适用于适合一个不错的组的任何其他常规配置。这可能是 SSL 配置,例如密钥库和信任库位置。


当您查看目录结构时,您会看到每个文件夹都有 2 个文件夹:*-available*-enabled。这是因为 Debian Apache 软件包附带了 6 个帮助工具,a2ensitea2dissitea2enmoda2dismoda2enconfa2disconf。我们的想法是您遵循以下规则:

  • 切勿直接编辑apache2.conf 文件
  • 只有*-available文件夹中添加或更改文件
  • 使用帮助工具启用或禁用站点/模块/conf 文件。

回答

为了(最终)回答您的问题,我将执行以下步骤:

  1. 启用mod_proxy_ajp a2enmod mod_proxy_ajp

  2. sites-available 中创建一个新的 myApp.conf。您可以复制默认的,这是一个很好的例子。假设您只想将所有请求转发到 GlassFish,您可以使用默认的 VirtualHost 设置 ` 这将在端口 80 上处理对 any 主机名的请求。如果要添加 HTTPS,请使用端口 443。

  3. ProxyPassProxyPassReverse 指令添加到您的服务器位置。如果 Apache 和 GlassFish 在同一台服务器上,您可能会想要使用 ajp://localhost:8080

     ProxyPass            /      ajp://host_name:0000
     ProxyPassReverse     /      ajp://host_name:0000
    

注意:这里假设您使用的是 AJP。如果这会给您带来问题,请通过将上面的 ajp 更改为 http 来切换到 HTTP 并禁用 GlassFish 中的 jk-listener。

  1. 完成myApp.conf 配置后,请记住禁用默认站点:

    a2dissite 000-default-site.conf
    

    并启用您的新网站:

    a2ensite myApp.conf
    

这些命令将适当地修改主 apache2.conf 并在 sites-enabled 文件夹中创建适当的链接。

这应该就是你所需要的。现在,在 URL 的根 / 之后指向您的主机名的所有内容都将被转发到 GlassFish 的根上下文 /

【讨论】:

  • 感谢您的回答,它帮助很大。但还有一件事。当我在浏览器上输入我的域名时,它会将我发送到我的 glassfish 服务器的默认页面。我需要更改哪些内容才能看到我的应用程序 index.jsp 页面?
  • 等等,我刚刚将我的站点上下文根添加到 proxypass/reverse 指令中,瞧!有效。非常感谢你一直很有帮助上帝保佑你。
  • 没问题,很高兴为您提供帮助
猜你喜欢
  • 2017-06-26
  • 2018-08-18
  • 1970-01-01
  • 2015-04-27
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
相关资源
最近更新 更多