开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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功能

1
2
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/访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
<?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>
 
  <!-- "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"/>
    -->
 
 
    <!-- "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"                      />
    <!-- "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>

主要更改配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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 文件

1
2
3
4
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也会受此影响的。

1
2
3
4
5
6
7
8
9
10
11
 <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"                      />

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



本文转自 tianya1993 51CTO博客,原文链接:http://blog.51cto.com/dreamlinux/1917729,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Tomcat应用部署
单个tomcat部署多个应用 server.xml &lt;Server port="20003" shutdown="SHUTDOWN"&gt; &lt;Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /&gt; &lt;Listener className
1180 0
Tomcat的安装、配置以及如何部署web项目
今天记录一下在windows系统上安装配置Tomcat的过程以及如何在tomcat上部署web项目。
105 0
IDEA创建JavaWeb项目并配置Tomcat
IDEA创建JavaWeb项目并配置Tomcat
58 0
tomcat配置多域名站点启动时项目重复加载多次
在tomcat中配置多个Host的时候, 出现项目重复启动多次的情况. 刚开始以为是spring boot发布项目的时候自带了一个tomcat引起的, 后来发现不是
42 0
配置Tomcat时server.xml自动还原问题【Tomcat会删除自己在Servlet.xml 配置的Context元素】
配置Tomcat时server.xml自动还原问题【Tomcat会删除自己在Servlet.xml 配置的Context元素】
35 0
HTTP/2服务端( nginx/tomcat)配置与测试
HTTP/2源于SPDY, 主要目标是解决HTTP 1.x的性能问题. 有别于HTTP/1.1在连接中的明文请求,HTTP/2与SPDY一样,将一个TCP连接分为若干个流(Stream),每个流中可以传输若干消息(Message),每个消息由若干最小的二进制帧(Frame)组成。这也是HTTP/1.1与HTTP/2最大的区别所在。
138 0
如何在 IDEA 中配置 tomcat,运行 web 项目?
如何在 IDEA 中配置 tomcat,运行 web 项目?对这个问题找了很久的答案,各种参差不全,其实非常的简单了,网上很多人的文章搞得很复杂,完全没必要。下面是我的采坑记录,写下来帮助大家。首先,需要确保: • JDK 环境已经安装 • Tomcat 已经下载好(不需要配置环境变量,下载一个压缩包解压出来就行)
144 0
tomcat配置HTTPS
SSL协议使用不对称加密技术实现双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。 与网站建立https连接时,浏览器与WEB SERVER之间要经过一个握手的过程来完成身份鉴定与密钥交换,建立安全连接。
98 0
Tomcat服务器的安装、启动与配置
3、Tomcat 3.1 安装tomcat tomcat官网:https://tomcat.apache.org/ 3.2、Tomcat启动: 文件夹作用: 启动,关闭Tomcat 访问测试:https://localhost:8080/ 可能遇到的问题: Java环境变量没有配置 闪退问题:需要配
58 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
艺龙Web服务性能优化分享
立即下载
云解析DNS如何实现流量容灾部署
立即下载
网站/服务器取证实践与挑战
立即下载