vlambda博客
学习文章列表

读书笔记《apache-tomcat-7-essentials》针对ApacheTomcat 7的高级配置

Chapter 11. Advanced Configuration for Apache Tomcat 7

在前面的章节中,我们讨论了 Tomcat 7 的各种主题,例如集群、负载平衡等。但是,实际上,除了 Tomcat 内部配置之外,为了管理系统,还需要在系统上执行一些不同的配置。在本章中,我们将讨论 Tomcat 7 的高级主题,用于实际行业,以创建 Web 基础架构并支持多个 Web 应用程序。

在本章中,我们将讨论以下主题:

  • 虚拟主机

  • 在单个 Tomcat 服务器上运行多个应用程序

  • 多个 Tomcat 环境,例如 Development、QA、Stage 和 Production

  • 调整缓存

  • Tomcat的优化

Virtual hosting

这是一种方法,您可以通过它在同一 Web 服务器或单个 IP 上托管多个域名。该概念称为共享托管,其中一台服务器用于托管多个网站。例如,如果您想托管 abc.com xyz.com,稍后您想在相同的 Web 服务器,可以通过虚拟主机来实现。基本上,有两种类型的虚拟主机:

  • 基于名称的虚拟主机

  • 基于IP的虚拟主机

读书笔记《apache-tomcat-7-essentials》针对ApacheTomcat 7的高级配置

Name-based virtual hosting

这是一种方法,您可以通过它在单个 IP 上托管多个域。它使用共享服务的概念。在实践中,网络托管公司遵循这种方法以低成本托管多个站点。例如,我们有多个网站如 www.abc.com,www.xyz.comwww.xzy.com,我们想在单一的web服务器上配置它,使用单一的IP,然后使用基于名称的虚拟主机。以下是名称的优点基于虚拟主机:

  • 使用单个 IP 地址将多个网站放在服务器上

  • 易于配置

  • 共享 SSL 证书

如果您想在 Web 服务器上实现基于命名的虚拟主机,则必须在进行配置之前完成以下先决条件。

例如,如果您想在 Web 服务器上托管前面提到的网站,那么我们必须执行以下提到的方法来配置 域名服务器 (DNS)。假设网络服务器名称是 webserver1.yxz.com并托管在 IP 192.168.0.1 上。您必须在您的 DNS 服务器中添加以下记录:

别名

资源记录

领域

webserver1.yxz.com

一个

192.168.0.1

www.xyz.com

C

webserver1.yxz.com

www.xzy.com

C

webserver1.yxz.com

www.abc.com

C

webserver1.yxz.com

创建这些记录后,您可以在 Web 服务器配置中配置虚拟服务器。

Note

A = 地址记录,用于将主机名与 IP 地址映射。

C= CNAME 用于为单个主机名创建多个别名。

IP-based virtual hosting

通过这种方法,您可以使用不同的 IP 在同一台服务器上托管多个网站。这种方法遵循专用环境的概念。在这里,您也可以在一台服务器上配置多个网站,但唯一的区别是域配置在不同的网络接口上。

以下是基于 IP 的虚拟主机的优势:

  • 在一台服务器上使用不同的网络接口地址(不同的 IP 地址)托管多个网站

  • 专用网络接口

  • 专用 SSL 证书

如果您想在 Web 服务器上实现基于 IP 的虚拟主机,那么您必须在进行配置之前完成以下先决条件。

例如,如果您想在 Web 服务器上托管前面提到的站点,那么 DNS 将按以下方式配置。让我们假设 Web 服务器名称 webserver1.yxz.com 托管在 IP 192.168.0.1 上。所有其他域都配置在不同的 IP(192.168.0.2、192.168.0.3 和 192.168.0.4)上,如下表所示:

别名

记录

领域

webserver1.yxz.com

一个

192.168.0.1

www.xyz.com

一个

192.168.0.2

www.xzy.com

一个

192.168.0.3

www.abc.com

一个

192.168.0.4

创建这些记录后,您可以在 Web 服务器配置中配置虚拟服务器。

Virtual hosting


这是一种方法,您可以通过它在同一 Web 服务器或单个 IP 上托管多个域名。该概念称为共享托管,其中一台服务器用于托管多个网站。例如,如果您想托管 abc.com xyz.com,稍后您想在相同的 Web 服务器,可以通过虚拟主机来实现。基本上,有两种类型的虚拟主机:

  • 基于名称的虚拟主机

  • 基于IP的虚拟主机

读书笔记《apache-tomcat-7-essentials》针对ApacheTomcat 7的高级配置

Name-based virtual hosting

这是一种方法,您可以通过它在单个 IP 上托管多个域。它使用共享服务的概念。在实践中,网络托管公司遵循这种方法以低成本托管多个站点。例如,我们有多个网站如 www.abc.com,www.xyz.comwww.xzy.com,我们想在单一的web服务器上配置它,使用单一的IP,然后使用基于名称的虚拟主机。以下是名称的优点基于虚拟主机:

  • 使用单个 IP 地址将多个网站放在服务器上

  • 易于配置

  • 共享 SSL 证书

如果您想在 Web 服务器上实现基于命名的虚拟主机,则必须在进行配置之前完成以下先决条件。

例如,如果您想在 Web 服务器上托管前面提到的网站,那么我们必须执行以下提到的方法来配置 域名服务器 (DNS)。假设网络服务器名称是 webserver1.yxz.com并托管在 IP 192.168.0.1 上。您必须在您的 DNS 服务器中添加以下记录:

别名

资源记录

领域

webserver1.yxz.com

一个

192.168.0.1

www.xyz.com

C

webserver1.yxz.com

www.xzy.com

C

webserver1.yxz.com

www.abc.com

C

webserver1.yxz.com

创建这些记录后,您可以在 Web 服务器配置中配置虚拟服务器。

Note

A = 地址记录,用于将主机名与 IP 地址映射。

C= CNAME 用于为单个主机名创建多个别名。

IP-based virtual hosting

通过这种方法,您可以使用不同的 IP 在同一台服务器上托管多个网站。这种方法遵循专用环境的概念。在这里,您也可以在一台服务器上配置多个网站,但唯一的区别是域配置在不同的网络接口上。

以下是基于 IP 的虚拟主机的优势:

  • 在一台服务器上使用不同的网络接口地址(不同的 IP 地址)托管多个网站

  • 专用网络接口

  • 专用 SSL 证书

如果您想在 Web 服务器上实现基于 IP 的虚拟主机,那么您必须在进行配置之前完成以下先决条件。

例如,如果您想在 Web 服务器上托管前面提到的站点,那么 DNS 将按以下方式配置。让我们假设 Web 服务器名称 webserver1.yxz.com 托管在 IP 192.168.0.1 上。所有其他域都配置在不同的 IP(192.168.0.2、192.168.0.3 和 192.168.0.4)上,如下表所示:

别名

记录

领域

webserver1.yxz.com

一个

192.168.0.1

www.xyz.com

一个

192.168.0.2

www.xzy.com

一个

192.168.0.3

www.abc.com

一个

192.168.0.4

创建这些记录后,您可以在 Web 服务器配置中配置虚拟服务器。

Virtual hosting in Tomcat 7


Tomcat 7 支持基于名称的虚拟主机。这种方法对于在 Tomcat 7 的单个实例上托管多个 Web 应用程序非常有用。它还为管理员提供了更多权限,以将应用程序彼此分开以及它们的访问控制限制。除非您实施它,否则您无法理解虚拟主机的真正概念。那么为什么要等,让我们在 Tomcat 7 中进行虚拟主机的实际实现。

例如,如果您想在 Web 服务器上托管前面提到的站点,那么 DNS 将按以下方式配置。让我们假设 Web 服务器名称是 webserver1.yxz.com 并且托管在 IP 192.168.0.1 上。要实现上一个场景,需要执行以下步骤:

  1. 1、在DNS服务器中配置域名,重新加载DNS服务,以便在服务器上进行复制。以下是带有地址和 CNAME 的 DNS 记录:

    别名

    记录

    领域

    webserver1.yxz.com

    一个

    192.168.0.1

    www.xyz.com

    C

    webserver1.yxz.com

    www.xzy.com

    C

    webserver1.yxz.com

    www.abc.com

    C

    webserver1.yxz.com

  2. 2. 要实现虚拟主机,您必须编辑 server.xml,它位于 TOMCAT_HOME/conf 中。需要为虚拟主机添加以下条目,如以下屏幕截图所示:

    <Host name="www.xyz.com" appBase="../Webapps">
    <Context path="" docBase="."/>
    </Host>
    
    读书笔记《apache-tomcat-7-essentials》针对ApacheTomcat 7的高级配置
  3. 3. 配置完成后,在 Linux 中的 /etc/hosts 中的 hosts 文件中添加新的 DNS,然后< Windows 中的 code class="literal"> C:\Windows\System32\drivers\etc\。以下屏幕截图显示了在 hosts 文件中添加了不同的主机名和 IP 地址:

    读书笔记《apache-tomcat-7-essentials》针对ApacheTomcat 7的高级配置
  4. 4. 保存配置,然后recycle,如果还有错误,查看日志。

  5. 5. 检查网址 www.xyz.com,www.xzy.com,www.abc.com 在浏览器中。

Hostname aliases


Tomcat 7 附带了一项更重要的功能,称为主机名别名。这是一个非常好的功能,它为同一网络上的多个站点的管理员提供了自由

例如,如果您有一个网站需要不同用户通过子域访问,则会创建主机别名。对于主域,它也称为子域别名。在以前版本的 Tomcat 中无法实现别名。如果我们想为任何网站实现别名,我们必须在 Tomcat 作为前端服务器之前使用 Apache、IIS 或单独的 Web 服务器。

以下提到的代码描述了如何为特定站点设置别名:

<Host name="www.xyz.com" appBase="../Webapps">
<Context path="" docBase="."/>
<Alias>tomcatalias.com</Alias>
</Host>

其次是recycle,一旦系统启动,就可以浏览同一个应用不同的名字。

Multiple applications hosting on a single Tomcat 7 instance


一旦我们完成了虚拟主机,可能会出现一些潜在的问题,例如多个应用程序托管、安全性以及在 Tomcat 7 的单个实例上部署多个应用程序。在 Tomcat 7 的单个实例上配置多个域有点棘手.如果我们给应用程序一个文档根目录,那么所有开发人员都可以访问所有应用程序。解决方案是为每个域实现一个单独的文档根。这样,我们可以在 Tomcat 实例中托管的每个应用程序上实现单独的安全性。让我们通过在 Tomcat 7 中创建多个文档根来实现该解决方案。为此,我们必须编辑 server.xml 以在服务器中启用多个文档根,如下所示以下代码片段:

<Host name="www.xyz.com" appBase="../home/tomcatuser1">
<Context path="" docBase="/home/tomcatuser1/data"/>
<Alias>tomcatalias.com</Alias>
</Host>

如果我们在每个应用程序上实现单独的文档根,那么我们可以在操作系统级别为应用程序实现用户安全。通过进行这些更改,我们可以根据每个开发人员的角色赋予每个开发人员访问代码的不同权限。此外,每个开发人员都可以访问代码并单独部署代码。

读书笔记《apache-tomcat-7-essentials》针对ApacheTomcat 7的高级配置

Multiple Tomcat environments—Development/QA/Stage/Production


信息技术组织遵循一组环境来管理他们的应用程序。这些环境基于它们的功能和用途。可用于任何环境的支持取决于环境的功能。根据功能,生产环境优先级高,开发优先级最低,如下图:

读书笔记《apache-tomcat-7-essentials》针对ApacheTomcat 7的高级配置

下表比较了在创建和管理 Web 基础架构期间执行的不同任务的不同环境及其功能:

任务

发展

质量保证

阶段

生产

自动部署

是的

是的

单机

是的

聚类

是的

是的

是的

开发人员访问

是的

是的

高端机

没有

是的

是的

切换控制

是的

性能测试

是的

功能测试

是的

Tuning cache


当我们在 Tomcat 7 上运行多个应用程序时,始终建议正确利用资源。为此,我们需要优化调整参数。服务器每次收到请求,都会消耗系统中的 CPU 和内存量。为了解决这个问题,我们从第一个请求在服务器上生成缓存。主要网络托管组织中用于缓存的最佳示例之一是为静态内容生成缓存。

以下代码显示了将 Expires Cache-Control: max-age= 标头添加到图像、CSS 和 JavaScript 的配置.此代码添加在 web.xml 中,该代码存在于 TOMCAT_HOME/CONF.

<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType image</param-name>
<param-value>access plus 15 minutes</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/css</param-name>
<param-value>access plus 15 minutes</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/javascript</param-name>
<param-value>access plus 15 minutes</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

Optimization of Tomcat 7


第 3 章性能调优中,我们讨论了各种优化方法Tomcat 是软件层面的,但是直到现在,我们还没有做任何系统层面的配置。我们现在将讨论系统管理员使他们的工作更成功所需的各种优化方法。所需的最重要的事情之一是以非特权用户身份运行 Tomcat 服务。

Running Tomcat 7 as a non privileged user

出于安全原因和 IT 合规性政策,不推荐以 root 身份运行 Tomcat。要解决此问题,您必须以非特权用户身份运行 Tomcat。要实现这一点,您必须在 user 权限中执行以下更改。让我们假设 tomcatuser1 将以非特权用户身份运行 Tomcat 服务器。

# groupadd tomcatuser1
# useradd -g tomcatuser1 -d /opt/apache-tomcat1
# chown -R tomcatuser1:tomcatuser1 /opt/apache-tomcat1

在操作系统级别更改权限后,就可以将 tomcat 设置为作为服务运行。现在,使用以下命令复制 /etc/init.d 中的启动脚本:

cp /opt/apache-tomcat1/bin/startup.sh /etc/init.d/tomcat
cd /etc/rc5.d
sudo ln -s ../init.d/tomcat S71tomcat

您现在已经创建了 tomcat 作为服务。但在运行服务之前,您必须更改权限以使其可执行,然后使用以下命令将服务作为 tomcat 运行:

chown 0755 /etc/init.d/tomcat

现在我们已准备好将 tomcat 作为服务运行。

Summary


在本章中,我们讨论了 Tomcat 7 的高级配置和优化参数、虚拟主机等环境中涵盖的关键点、Development/QA/Stage/Production 的特性、Tomcat 即服务以及以非特权方式运行 Tomcat用户。

通过这一章,我们完成了 Tomcat 7 的旅程。在本书中,我试图完成 Web 管理员和 IT 管理员在日常环境中面临的主要问题。我希望通过阅读这些主题,您对在实时环境中运行 Tomcat 7 有足够的信心。

祝你好运!

塔努伊·哈雷