如何在 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。
我已经安装
- apache2
- libapache2-mod-jk
- 玻璃鱼
以下是我遵循的步骤
配置 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 个辅助工具,a2ensite
和 a2dissite
; a2enmod
和 a2dismod
; a2enconf
和 a2disconf
。这个想法是你遵循这些规则:
- 切勿直接编辑
apache2.conf
文件
- 仅曾经在
*-available
文件夹中添加或更改过文件
- 使用辅助工具启用或禁用 [=155=] 个文件。
回答
因此,为了(最终)回答您的问题,我将执行以下步骤:
启用mod_proxy_ajp
a2enmod mod_proxy_ajp
在 sites-available
中创建一个新的 myApp.conf。您可以复制默认的,这是一个很好的例子。假设您只想将所有请求转发到 GlassFish,您可以使用 ` 的默认 VirtualHost 设置,它将在端口 80 上处理对 any 主机名的请求。如果需要,请使用端口 443添加 HTTPS。
将 ProxyPass
和 ProxyPassReverse
指令添加到您的服务器位置。如果 Apache 和 GlassFish 在同一台服务器上,您可能希望使用 ajp://localhost:8080
ProxyPass / ajp://host_name:0000
ProxyPassReverse / ajp://host_name:0000
注意:这假定您使用的是 AJP。如果这给您带来了问题,请通过在 和 上方将 ajp
更改为 http
并禁用 jk-listener 来切换到 HTTP GlassFish.
完成 myApp.conf
配置后,记得禁用默认站点:
a2dissite 000-default-site.conf
并启用您的新站点:
a2ensite myApp.conf
这些命令将适当地修改主 apache2.conf
并在 sites-enabled
文件夹中创建适当的链接。
这应该就是您所需要的。现在,在 URL 的根 /
之后指向主机名的所有内容都将转发到 GlassFish 的根上下文 /
。
我想在 Ubuntu 16.04 服务器上安装 Apache 和 Glassfish。 我已经安装
- apache2
- libapache2-mod-jk
- 玻璃鱼
以下是我遵循的步骤
配置 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 个辅助工具,a2ensite
和 a2dissite
; a2enmod
和 a2dismod
; a2enconf
和 a2disconf
。这个想法是你遵循这些规则:
- 切勿直接编辑
apache2.conf
文件 - 仅曾经在
*-available
文件夹中添加或更改过文件 - 使用辅助工具启用或禁用 [=155=] 个文件。
回答
因此,为了(最终)回答您的问题,我将执行以下步骤:
启用
mod_proxy_ajp
a2enmod mod_proxy_ajp
在
sites-available
中创建一个新的 myApp.conf。您可以复制默认的,这是一个很好的例子。假设您只想将所有请求转发到 GlassFish,您可以使用 ` 的默认 VirtualHost 设置,它将在端口 80 上处理对 any 主机名的请求。如果需要,请使用端口 443添加 HTTPS。将
ProxyPass
和ProxyPassReverse
指令添加到您的服务器位置。如果 Apache 和 GlassFish 在同一台服务器上,您可能希望使用ajp://localhost:8080
ProxyPass / ajp://host_name:0000 ProxyPassReverse / ajp://host_name:0000
注意:这假定您使用的是 AJP。如果这给您带来了问题,请通过在 和 上方将 ajp
更改为 http
并禁用 jk-listener 来切换到 HTTP GlassFish.
完成
myApp.conf
配置后,记得禁用默认站点:a2dissite 000-default-site.conf
并启用您的新站点:
a2ensite myApp.conf
这些命令将适当地修改主 apache2.conf
并在 sites-enabled
文件夹中创建适当的链接。
这应该就是您所需要的。现在,在 URL 的根 /
之后指向主机名的所有内容都将转发到 GlassFish 的根上下文 /
。