tomcat应用实践(虚拟主机以及站点优化)

目前主流的Web开发编程语言有php,java以及.net等,但是大多数架构都会选择java作为开发语言,所以很多java应用容器很受大家欢迎,例如tomcat、jetty、resin,jboss等。我们是使用tomcat。接下来就介绍一下tomcat虚拟主机以及实际使用中的问题。

tomcat 虚拟主机

   使用过tomcat的童鞋都知道tomcat是默认的8080端口,而web默认的端口是80端口,同时还需要注意Linux系统里,非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。但是一般在站点后面加端口和项目路径等是一种体验不是很好的方式。瞬间让使用者各种不爽,这时候我们就需要用一些技术手段去实现这些。

常见的方法有:

参考文档:http://blog.csdn.net/becivells/article/details/52842019 (本篇文档不会研究)

1.nginx 等软件做反向代理

2.iptables端口转发

首先程序绑定1024以上的端口,然后root权限下做转发注意有些系统需要手动开启IP FORWARD功能

vi /etc/sysctl.conf#修改net.ipv4.ip_forward = 1
#重新加载sysctl -p /etc/sysctl.conf
iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8080

这里简单的介绍一下一些虚拟主机的知识。

在iis和apache等里面我们可以创建基于不同端口或域名的虚拟主机,本次主要介绍tomcat的虚拟主机等知识。

如何在tomcat里运行一个java的web项目呢?

例如项目名为52lqian,我们将整理打包好的52lqian.war包上传到tomcat下的webapps目录下,重启tomcat容器。我们就可以用以下方式访问该站点。

http://IP:8080/52lqian  方式访问 ,而http://IP:8080/这种方式默认是访问的webapps目录下的ROOT目录的内容,主要就是tomcat的一些介绍信息。

这样访问比较繁琐的,可以使用虚拟主机和虚拟目录来实现只需http://IP:8080/访问。

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="-1" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    --> 
    <Connector port="80" protocol="HTTP/1.1"                  #修改为80端口 不需要附加端口
               connectionTimeout="20000"
               redirectPort="8443"

         maxThreads="150"
        minSpareThreads="25" 
        maxSpareThreads="75"
        enableLookups="false" 
        acceptCount="100"
        debug="0"
        disableUploadTimeout="true"                      />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the BIO implementation that requires the JSSE
         style configuration. When using the APR/native implementation, the
         OpenSSL style configuration is required as described in the APR/native
         documentation -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8052" protocol="AJP/1.3" redirectPort="8443" />

    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="www.52laiqian.com">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
 #添加基于域名的host站点

<Host name="www.52laiqian.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">

<Context path="" docBase ="52lqian/"/>  #创建虚拟目录,这样就不需要输入项目名可以直接访问

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

    </Engine>
  </Service>
</Server>

主要更改配置

<Host name="www.52laiqian.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">

<Context path="" docBase ="52lqian/"/>  #创建虚拟目录,这样就不需要输入项目名可以直接访问

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

这时就可以直接通过域名访问,(前提是需要域名解析已经设置好)

站点访问慢

整个站点是新开发的站点,部署上去首次打开要几分钟,打开页面直接是够够的,这种体验连自己都受不了。所以就考虑优化,首先对java_OPS的优化。

$tomcat/bin/catalina.sh 文件

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8  
    -server -Xms1024m -Xmx1024m  
    -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=512m  
    -XX:MaxPermSize=256m -XX:+DisableExplicitGC"

tomcat里面的优化解决DNS解析,有时候真的很烦DNS解析,SSH连接 mysql连接等都会受DNS解析延时。而tomcat也会受此影响的。

 <Connector port="80" protocol="HTTP/1.1"                  #修改为80端口 不需要附加端口
               connectionTimeout="20000"
               redirectPort="8443"

         maxThreads="150"
        minSpareThreads="25" 
        maxSpareThreads="75"
        enableLookups="false"                   #关闭DNS解析
        acceptCount="100"
        debug="0"
        disableUploadTimeout="true"                      />

重新访问会快很多,以此解决此类问题。

时间: 2024-11-01 12:02:59

tomcat应用实践(虚拟主机以及站点优化)的相关文章

基于httpd-2.2和httpd-2.4配置虚拟主机web站点,并提供https服务(一)

使用httpd-2.2和httpd-2.4实现 > 1.建立httpd服务,要求: > 1) 提供两个基于名称的虚拟主机www1, www2:要求每个虚拟主机都有单独的错误日志和访问日志: > 2) 通过www1的/server-status提供状态信息,且仅允许172.16.0.1主机访问: > 3) www2不允许192.168.1.0/24网络中任意主机访问: > 2.为上面的第2)个虚拟主机提供https服务. > 一.使用httpd-2.2实现基于主机名的虚拟

基于httpd-2.2和httpd-2.4配置虚拟主机web站点,并提供https服务(二)

使用httpd-2.2和httpd-2.4实现 > 1.建立httpd服务,要求: > 1) 提供两个基于名称的虚拟主机www1, www2:要求每个虚拟主机都有单独的错误日志和访问日志: > 2) 通过www1的/server-status提供状态信息,且仅允许172.16.0.1主机访问: > 3) www2不允许192.168.1.0/24网络中任意主机访问: > 2.为上面的第2)个虚拟主机提供https服务. > 二.基于httpd-2.4配置虚拟主机web站

基于httpd-2.2配置虚拟主机web站点,并提供https服务(一)

使用httpd-2.2和httpd-2.4实现 > 1.建立httpd服务,要求: > 1) 提供两个基于名称的虚拟主机www1, www2:要求每个虚拟主机都有单独的错误日志和访问日志: > 2) 通过www1的/server-status提供状态信息,且仅允许172.16.0.1主机访问: > 3) www2不允许192.168.1.0/24网络中任意主机访问: > 2.为上面的第2)个虚拟主机提供https服务. > 使用httpd-2.2实现基于主机名的虚拟主机

基于httpd-2.4配置虚拟主机web站点,并提供https服务(二)

使用httpd-2.2和httpd-2.4实现 > 1.建立httpd服务,要求: > 1) 提供两个基于名称的虚拟主机www1, www2:要求每个虚拟主机都有单独的错误日志和访问日志: > 2) 通过www1的/server-status提供状态信息,且仅允许172.16.0.1主机访问: > 3) www2不允许192.168.1.0/24网络中任意主机访问: > 2.为上面的第2)个虚拟主机提供https服务. > 基于httpd-2.4配置虚拟主机web站点,

Tomcat 的部署+虚拟主机的配置

文章目录 一.Tomcat介绍 1.1.Tomcat 核心组件 1.2.Tomcat 目录结构 二.Tomcat 的部署步骤 2.1.安装JDK 2.2.安装Tomcat 2.3.优化Tomcat的启动速度 三.虚拟主机的配置 3.1.虚拟主机的需求 3.2.配置过程 一.Tomcat介绍 免费的.开放源代码的Web应用服务器 Apache软件基金会 (Apache Software Foundation) Jakarta项目 中的一个核心项目 由Apache.Sun和一些公司及个人共同开发而成

nginx 反向代理 tomcat (https、虚拟主机)

背景: 有一个JSP开发的网站,需要放在tomcat里面运行,考虑到tomcat处理http请求不是那么强,计划前端添加一个nginx作为反向代理,并且提供https服务,并且通过虚拟主机开代理到指定域名的服务. 我们的域名是www.wzlinux.com. 1.首先是安装nginx和tomcat 2.nginx配置文件如下 包含301调整,以及https证书的设定,我的证书是在阿里云申请的,免费的哦 # # HTTPS server configuration # server {     l

虚拟主机(多站点配置)的实现--centos上的实现

Apache中配置多主机多站点,可以通过两种方式实现 将同一个域名的不同端口映射到不同的站点(虚拟主机) 将同一个端口映射成不同的域名,不同的域名映射到不同的站点 两种方法可以同时存在,局域网通过  ip:端口的配置方法跟统一域名不同端口的配置方法一样 我们只需要修改相应的配置文件即可. 一.准备工作 1.修改系统 hosts文件 centos中hosts的文件路径: /etc/hosts 在这个文件中我们加入如下两行代码: 在     127.0.0.1后面添加 www.liuyazhuang

Tomcat 笔记-设置虚拟主机

通过作用虚拟主机,可以使多个不同域名的网站共存于一个Tomcat中 在tomcat的server.xml文件中添加主机名: <Host name="hostname" appBase="path/of/web1"> <Context path="/web1" docBase="path/of/web1"/> </Host> host appBase属性 指定WEB应用程序的配置目录.是 to

在 Tomcat 上配置虚拟主机

1.Tomcat 服务器的server.xml文件   (1)Tomcat 组件 Tomcat服务器是由一系列可配置的组件构成,其中核心组件是 Catalina Servlet 容器,它是所有其他 Tomcat 组件的顶层容器.Tomcat 的组件可以在 <CATALINA_HOME>/conf/server.xml 文件中进行配置,每个 Tomcat 组件在 server.xml 文件中对应一种配置元素.   (2)Tomcat 组件之间的关系 以下代码以 XML 的形式展示了各种 Tomc