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

时间:2016-12-04 20:33:11

标签: apache glassfish ubuntu-server mod-jk

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

  • apache2的
  • 中的libapache2-MOD-JK
  • 的glassfish

以下是我遵循的步骤

配置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):apache2.serviceJob for apache2.service失败,因为控制进程退出并显示错误代码。请参阅&#34; systemctl status apache2.service&#34;和&#34; journalctl -xe&#34;详情。  失败!

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

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

1 个答案:

答案 0 :(得分: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作为要编辑的配置文件。这只是默认的&#34;父母&#34;配置文件。在Debian / Ubuntu系统(及其派生,如Linux Mint)中,要查找的文件是apache2.conf

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

此文件还可以特别包含&#34;包含&#34;文件和文件夹(包含所包含文件夹中的任何*.conf文件)。这些将被读入并与主要配置合并在&#34; include&#34;语句是写的。所以主配置文件中的最后一行(如果它没有指定另一个文件)将是要设置的最后一行配置,无论如何。

Debian配置布局

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

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

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

<强> CONF 这些文件仅适用于适合组合的任何其他常规配置。这可以是SSL配置,如密钥库和信任库位置。

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

  • 从不直接编辑apache2.conf文件
  • 曾在*-available文件夹中添加或更改文件
  • 使用帮助工具启用或禁用站点/模块/配置文件。

答案

所以(最后)回答你的问题,我会做以下步骤:

  1. 启用mod_proxy_ajp a2enmod mod_proxy_ajp

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

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

     ProxyPass            /      ajp://host_name:0000
     ProxyPassReverse     /      ajp://host_name:0000
    
  4. 注意:这假设您使用的是AJP。如果这会导致您出现问题,请通过将ajp更改为 上方的http 来禁用GlassFish中的jk-listener来切换到HTTP。

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

      a2dissite 000-default-site.conf
      

      启用新网站:

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

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