如何在 Ubuntu 16.04 服务器上的 apache 后面设置 glassfish 4.1.1

How to setup glassfish 4.1.1 behind apache on Ubuntu 16.04 server

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

以下是我遵循的步骤

配置 MPM module

在 /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 重新启动 apache2 时,出现以下错误

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

当我编辑位于 /etc/apache2/mods-available/jk.conf

下的文件 jk.conf 时出现此错误

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

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

您可以使用 mod_proxy 和可选的 mod_proxy_ajp.

首先,一个定义:


AJP 与 HTTP

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

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


Apache 配置

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

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

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


Debian 配置布局

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


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

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

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


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

  • 切勿直接编辑 apache2.conf 文件
  • 曾经在*-available文件夹中添加或更改过文件
  • 使用辅助工具启用或禁用 [​​=155=] 个文件。

回答

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

  1. 启用mod_proxy_ajp a2enmod mod_proxy_ajp

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

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

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

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

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

    a2dissite 000-default-site.conf
    

    并启用您的新站点:

    a2ensite myApp.conf
    

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

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