apache tomcat

apache

別名

<VirtualHost *:80>

    ServerAdmin [email protected]

    DocumentRoot /data/httpd

    ServerName node144.xy.com

    ServerAlias  beta.xy.com

    ErrorLog  /data/logs/httpd/node144.xy.com-error_log 

    CustomLog /data/logs/httpd/node144.xy.com-access_log common


alias /test/ "/data/httpd/zabbix/" #最後的/前面加了後面也要加,不加都不加


#ErrorDocument 403 http://www.xy.com/403.html 定義錯誤碼頁面

ErrorDocument 403 /403.html  

ErrorDocument 404 /404.html


RewriteEngine on

#RewriteRule ^/$     http://www.xy.com/pg/index.html   [R=301]

RewriteRule ^/$     /test   [R=301]  #把/重寫,訪問/就是訪問/test


RewriteEngine on

        RewriteMap  hosts-deny txt:/data/tomcat/xy.blacklist

        RewriteMap  hosts-allow txt:/data/tomcat/xy.whitelist

        RewriteCond     ${hosts-allow:%{REMOTE_ADDR}|NOT-FOUND}  NOT-FOUND

        RewriteCond     ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}  !=NOT-FOUND

        RewriteRule ^(.*)$   -   [F,L]

#允許和拒絕某些ip訪問,兩個 RewriteCond 是且關係。只有兩個同時滿足才重寫拒絕

如果改成或 [OR] 則只有當allow有deny沒有的ip才能訪問

[root@node144 conf.d]# tail /data/tomcat/xy.whitelist

192.168.113.47  allow   ## xf

[root@node144 conf.d]# tail /data/tomcat/xy.blacklist

192.168.113.60 deny # 20141203 456 xy

######

RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT} ^(.*)Googlebot [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^Sosospider [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^Sogou [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^YodaoBot [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^YoudaoBot [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^mvtech-spider [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^FyberSpider  [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^bjspider [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^Nutch [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^Tasapspider [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^(.*)IEShow [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} ^Gecko [NC]

        RewriteRule ^(.*)$ - [F]

RewriteCond指令可以在RewriteRule中使用,沒有匹配的將被RewriteRule忽略

格式:RewriteCond TestString CondPattern

NC:忽略大小寫

OR:或關係

######

#<Directory "/data/httpd">  

#DirectoryIndex index.html index.html.var

#Options Indexes FollowSymLinks  #不加默認關閉,沒index.html時列目錄,和軟連接跟隨

#        AllowOverride AuthConfig FileInfo  

#       Order allow,deny  

#       Allow from all  

#    </Directory>  

</VirtualHost>


安裝tomcat

vi /etc/profile.d/java.sh

JAVA_HOME=/usr/java/latest

PATH=/usr/java/latest/bin:$PATH

CATALINA_HOME=/usr/local/tomcat

export JAVA_HOME CATALINA_HOME PATH


啓動腳本

#!/bin/sh

# Tomcat init script for Linux.

#

# chkconfig: 2345 96 14

# description: The Apache Tomcat servlet/JSP container.

# JAVA_OPTS='-Xms64m -Xmx128m'

JAVA_HOME=/usr/java/latest

CATALINA_HOME=/usr/local/tomcat

export JAVA_HOME CATALINA_HOME


case $1 in

start)

  exec $CATALINA_HOME/bin/catalina.sh start ;;

stop)

  exec $CATALINA_HOME/bin/catalina.sh stop;;

restart)

  $CATALINA_HOME/bin/catalina.sh stop

  sleep 2

  exec $CATALINA_HOME/bin/catalina.sh start ;;

configtest)

  exec $CATALINA_HOME/bin/catalina.sh configtest ;;

*)

  exec $CATALINA_HOME/bin/catalina.sh * ;;

esac


建立一個testapp

<%@ page language="java" %>

<html>

  <head><title>TomcatA</title></head>

  <body>

    <h1><font color="red">TomcatA.magedu.com</font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("magedu.com","magedu.com"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>


<%@ page language="java" %>

<html>

  <head><title>TomcatB</title></head>

  <body>

    <h1><font color="blue">TomcatB.magedu.com</font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("magedu.com","magedu.com"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

-------------------------------------

apache反向代理tomcat


ProxyPreserveHost {On|Off}:如果啓用此功能,代理會將用戶請求報文中的Host:行發送給後端的服務器,而不再使用ProxyPass指定的服務器地址。如果想在反向代理中支持虛擬主機,則需要開啓此項,否則就無需打開此功能。


ProxyVia  {On|Off|Full|Block}:用於控制在http首部是否使用Via:,主要用於在多級代理中控制代理請求的流向。默認爲Off,即不啓用此功能;On表示每個請求和響應報文均添加Via:;Full表示每個Via:行都會添加當前apache服務器的版本號信息;Block表示每個代理請求報文中的Via:都會被移除。


ProxyRequests {On|Off}:是否開啓apache正向代理的功能;啓用此項時爲了代理http協議必須啓用mod_proxy_http模塊。同時,如果爲apache設置了ProxyPass,則必須將ProxyRequests設置爲Off。


ProxyPass  [path]  !|url  [key=value key=value ...]]:將後端服務器某URL與當前服務器的某虛擬路徑關聯起來作爲提供服務的路徑,path爲當前服務器上的某虛擬路徑,url爲後端服務器上某URL路徑。使用此指令時必須將ProxyRequests的值設置爲Off。需要注意的是,如果path以“/”結尾,則對應的url也必須以“/”結尾,反之亦然。

另外,mod_proxy模塊在httpd 2.1的版本之後支持與後端服務器的連接池功能,連接在按需創建在可以保存至連接池中以備進一步使用。連接池大小或其它設定可以通過在ProxyPass中使用key=value的方式定義。常用的key如下所示:

◇ min:連接池的最小容量,此值與實際連接個數無關,僅表示連接池最小要初始化的空間大小。

◇ max:連接池的最大容量,每個MPM都有自己獨立的容量;都值與MPM本身有關,如Prefork的總是爲1,而其它的則取決於ThreadsPerChild指令的值。

◇ loadfactor:用於負載均衡集羣配置中,定義對應後端服務器的權重,取值範圍爲1-100。

◇ retry:當apache將請求發送至後端服務器得到錯誤響應時等待多長時間以後再重試。單位是秒鐘。


如果Proxy指定是以balancer://開頭,即用於負載均衡集羣時,其還可以接受一些特殊的參數,如下所示:

◇lbmethod:apache實現負載均衡的調度方法,默認是byrequests,即基於權重將統計請求個數進行調度,bytraffic則執行基於權重的流量計數調度,bybusyness通過考量每個後端服務器的當前負載進行調度。

◇ maxattempts:放棄請求之前實現故障轉移的次數,默認爲1,其最大值不應該大於總的節點數。

◇ nofailover:取值爲On或Off,設置爲On時表示後端服務器故障時,用戶的session將損壞;因此,在後端服務器不支持session複製時可將其設置爲On。

◇ stickysession:調度器的sticky session的名字,根據web程序語言的不同,其值爲JSESSIONID或PHPSESSIONID。

上述指令除了能在banlancer://或ProxyPass中設定之外,也可使用ProxySet指令直接進行設置,如:

<proxy balancer://lbcluster1>

BalancerMember ajp://172.16.100.1:8009 loadfactor=10 route=TomcatA

BalancerMember ajp://172.16.100.2:8009 loadfactor=10 route=TomcatB

</proxy>


集羣配置修改後一定要重啓apache,不能從讀配置文件,不然負載會不均衡,而且有很多問題


apache配置文件

[root@node144 conf.d]# cat virt.conf

<VirtualHost *:80>

    ServerAdmin [email protected]

    DocumentRoot /data/httpd

    ServerName node144.xy.com

ServerAlias beta.xy.com

#ErrorDocument 403 http://www.ule.com/403.html

ErrorDocument 403 /403.html

ErrorDocument 404 /404.html

    ErrorLog  /data/logs/httpd/node144.xy.com-error_log 

    CustomLog /data/logs/httpd/node144.xy.com-access_log common

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

<Proxy balancer://lbcluster1>

BalancerMember ajp://192.168.211.147:8009 loadfactor=10 route=TomcatA

BalancerMember ajp://192.168.211.146:8009 loadfactor=10 route=TomcatB

</Proxy>

ProxyPass / balancer://lbcluster1/ 

ProxyPa***everse / balancer://lbcluster1/

<Directory "/data/httpd">  

    </Directory>  

RewriteEngine on

#RewriteRule ^/$     http://www.xy.com/pg/index.html   [R=301]

RewriteRule ^/$     /test   [R=301]

</VirtualHost>

當一個掉了後,後面的請求都只會到另一臺上,起來後又會負載均衡。相當於高可用


---------------

配置Session綁定

<VirtualHost *:80>

    ServerAdmin [email protected]

    DocumentRoot /data/httpd

    ServerName node144.xy.com

ServerAlias beta.xy.com

#ErrorDocument 403 http://www.ule.com/403.html

ErrorDocument 403 /403.html

ErrorDocument 404 /404.html

    ErrorLog  /data/logs/httpd/node144.xy.com-error_log 

    CustomLog /data/logs/httpd/node144.xy.com-access_log common

ProxyVia On

ProxyRequests Off

ProxyPreserveHost On

ProxyPass / balancer://lbcluster1/  stickysession=JSESSIONID

ProxyPa***everse / balancer://lbcluster1/

<Proxy balancer://lbcluster1>

BalancerMember ajp://192.168.211.147:8009 loadfactor=10 route=TomcatB

BalancerMember ajp://192.168.211.146:8009 loadfactor=10 route=TomcatA

</Proxy>

<Directory "/data/httpd">  

    </Directory>  

</VirtualHost>

或者這樣

ProxyPass / balancer://lbcluster1/ 

ProxyPa***everse / balancer://lbcluster1/

<Proxy balancer://lbcluster1>

BalancerMember ajp://192.168.211.147:8009 loadfactor=10 route=TomcatB

BalancerMember ajp://192.168.211.146:8009 loadfactor=10 route=TomcatA

ProxySet stickysession=JSESSIONID

</Proxy>


後端tomcat

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">

jvmRoute="TomcatA" 要與在apache上配置的對應


mod_jk


worker.list=router17

worker.jvm1.port=8009

worker.jvm1.host=192.168.112.251

worker.jvm1.type=ajp13

worker.jvm1.lbfactor=1

#worker.jvm1.redirect=jvm2

worker.jvm1.connection_pool_timeout=3

worker.jvm1.socket_timeout=3

worker.jvm2.port=8009

worker.jvm2.host=192.168.112.32

worker.jvm2.type=ajp13

worker.jvm2.lbfactor=1

#worker.jvm2.redirect=jvm1

worker.jvm2.connection_pool_timeout=3

worker.jvm2.socket_timeout=3

worker.router17.type=lb

worker.router17.sticky_session=1

worker.router17.balance_workers=jvm1,jvm2


LoadModule  jk_module  modules/mod_jk.so

JkWorkersFile  /etc/httpd/workers.properties

JkLogFile  logs/mod_jk.log

JkLogLevel  debug

JkMount  /*  router17


JkUnMount /index.html router17

--------------

基於內存session複製集羣

1,修改項目下的WEB-INF目錄下的web.xml在裏面添加

<distributable />


2,修改tomcat server.xml的engine,也可以改在hosts,注意不同的版本不同,去tomcat官網看

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">


        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                 channelSendOptions="8">


          <Manager className="org.apache.catalina.ha.session.DeltaManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"/>


          <Channel className="org.apache.catalina.tribes.group.GroupChannel">

            <Membership className="org.apache.catalina.tribes.membership.McastService"

                        address="228.20.0.4" ##要修改

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="192.168.211.146" ##要修改

                      port="4000"

                      autoBind="100"

                      selectorTimeout="5000"

                      maxThreads="6"/>


            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>


          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>


          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/>


          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

        </Cluster>


3,在各節點爲使用組播地址添加組播路由,格式:

route add -net $MCAST_ADDRESS netmask 255.255.255.255 dev eth0

一般可以不用添加的

-----------------------

tomcat連接線程配置

<Connector port="8009" maxHttpHeaderSize="8192" maxThreads="8192"  minSpareThreads="256" maxSpareThreads="1024" acceptCount="2048"   connectionTimeout="20000" enableLookup

s="false" compression="on"   compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css"  redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8" packetSize="

65536" />

1) address:指定連接器監聽的地址,默認爲所有地址,即0.0.0.0;

2) maxThreads:支持的最大併發連接數,默認爲200;

3) port:監聽的端口,默認爲0;

4) protocol:連接器使用的協議,默認爲HTTP/1.1,定義AJP協議時通常爲AJP/1.3;

5) redirectPort:如果某連接器支持的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的端口;

6) connectionTimeout:等待客戶端發送請求的超時時間,單位爲毫秒,默認爲60000,即1分鐘;

7) enableLookups:是否通過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名;默認爲true;

8) acceptCount:設置等待隊列的最大長度;通常在tomcat所有處理線程均處於繁忙狀態時,新發來的請求將被放置於等待隊列中;


 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"    maxThreads="8192"  compression="on"   compressableMimeType="text/html,text/xml,text/pla

in,text/javascript,text/css" URIEncoding="UTF-8" />


別名配置

<Host name="cart.xy.com"  appBase="/data/postmall/tomcat/webapps_cart" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

    <Alias>cart.ulechina.tom.com</Alias>

    <Alias>cart.xy.tom.com</Alias>

    <Alias>cart.xy.cn.com</Alias>

 </Host>


日誌配置

catalina.sh 

$CATALINA_OUT


在第一次調用之後,JSP會被編譯成一個servlet類,在後續的操作中則可以直接使用此類,從而避免了對每一次調用的都要重新分析和編譯。因此,類似servlet,JSP的執行需要在container中完成。JSP的container跟servlet的container基本相同,但在JSP執行之前,需要一些額外的步驟如與servlet代碼建立會話等。Tomcat包含了一個叫做Catalina的Servlet container(執行servlet和編譯過的JSP)和一個JSP編譯器(Jasper編譯器)。事實上,一個包含了JSP編譯器和Servlet容器的應用程序組合通過被稱作Web容器。


JSP和Servlet的最大區別在於,Servlet通常需要事先編譯好,而JSP則並非必須事先編譯。這意味着Servlet通常放置於私有資源區域,而JSP則通常以嵌入代碼的方式包含於HTML頁面文件中,這些HTML文件通常放置在公開資源區域。


MVC架構:

Controller,Model和View各自獨立,一個流行的開源實現是Apache Structs框架;目今,設計優良的Web應用程序通常用相就的技術實現相應的功能,比如:

1、Servlet用於實現應用邏輯;

2、JSP用於內容展示;

3、標籤庫和JSP擴展語言用於替換在JSP內部嵌入Java代碼,進而降低了HTML維護的複雜度;

4、MVC框架用於實現展示和應用邏輯的分離





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章