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,如需转载请自行联系原作者

相关文章
|
1月前
|
安全 Java 应用服务中间件
打破Tomcat中的双亲委派机制:探讨与实践
打破Tomcat中的双亲委派机制:探讨与实践
|
7月前
|
Java 应用服务中间件 Apache
Tomcat部署及优化
Tomcat部署及优化
68 0
|
2月前
|
Java 应用服务中间件
优化tomcat的性能
优化tomcat的性能
|
3月前
|
存储 安全 Java
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
|
4月前
|
Java 应用服务中间件 Linux
深入学习Tomcat服务器优化实践
深入学习Tomcat服务器优化实践
30 0
|
4月前
|
Java 应用服务中间件 Linux
Tomcat异常实践总结
Tomcat异常实践总结
47 0
|
5月前
|
Cloud Native 应用服务中间件 Apache
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(1)
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(1)
117 1
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(1)
|
5月前
|
Cloud Native Java 应用服务中间件
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(2)
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(2)
125 0
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(2)
|
5月前
|
缓存 Cloud Native 应用服务中间件
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(3)
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(3)
117 0
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(3)
|
5月前
|
缓存 Cloud Native 应用服务中间件
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(4)
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(4)
124 0
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(4)