【tomcat】不一樣域名解析到同一tomcat不一樣項目上

 

 

問題:html

  1. 有多個域名,想輸入的每一個域名只能訪問其中的一個項目前端

     2. 這些項目都部署在同一個tomcat上的java

  

   解決步驟:nginx

        1.首先把全部域名都解析到這臺服務器上,解析時只能填寫ip地址,不能指定端口的,默認訪問解析IP的80端口web

    2.把web項目部署在tomcat安裝目錄下,須要和默認的webapps目錄平級,而且直接將web項目打包爲ROOT.war 啓動時會解壓到ROOT文件夾redis

     目錄結構以下:spring

                     

 

     3. 修改tomcat conf目錄下 server.xml 文件以下(或者直接用下面的代碼替換,端口已經改成80了) apache

      

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>

    <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 name="Catalina">

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <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>
            
      <!--
        若是是本地測試請修改
        C:\Windows\System32\drivers\etc\hosts 文件
        # For example:
        127.0.0.1 localhost
        127.0.0.1       localhost
        127.0.0.1       www.site1.com
        127.0.0.1       www.site2.com
        127.0.0.1       site1.com
        127.0.0.1       site2.com
        
        若是是已註冊好的域名請解析www,@到tomcat所在服務器ip
        
        端口8080 請修改成80,不然須要在域名後面加端口
        
        下面每一個項目都解析了兩次,是爲了用戶在輸入網址時,無論有沒有www.都能正常訪問
      -->
      <Host name="site1.com" appBase="site1"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
     </Host>
     <Host name="www.site1.com" appBase="site1"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
     </Host>
        
     <Host name="site2.com" appBase="site2"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
     </Host>
     <Host name="www.site2.com" appBase="site2"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
     </Host>
    </Engine>
  </Service>
</Server>

注意: 本地測試請修改host文件,請看上面註釋windows

 

啓動tomcat後 無論是輸入 www.site1.com 或者 site1.com都能正常訪問了!tomcat

 

 

搭建簡單項目能夠按照上面方式進行,可是若是項目比較龐大或者訪問較多, 請不要使用此方式, 應該採ngix前端分發到不一樣端口上

配置請參看 個人另外一篇文章 

windows 環境下nginx + tomcat羣 + redis 實現session共享

 

 

2016年1月29日22:02更新

爲了測試兩個標準的spingmvc+hibernate+shiro web項目到底啓動須要消耗多少內存,又發現了些問題

 

由於要部署兩個項目,按照上面的方法, 我很懶 直接拷貝一個打好的war包到site1目錄和site2目錄【注意  這兩個war包是如出一轍的】

而後啓動tomcat

..............................................

第一個先解壓的site1 正常

第二個啓動site2   提示初始化完成,緊接着又提示closing。 錯誤提示只有一個   start error!!!!!!!!!!!!!!

 

start error!!!!   到底啥錯沒有更詳細的了,查了些資料爲了要查看更詳盡的信息須要進行這一步操做

就是在WEB-INF/classes目錄下方式一個logging.properties文件,內容以下:

handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logsdebug
org.apache.juli.FileHandler.prefix = error-debug.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

再啓動,  去tomcat 的 logsdebug目錄下查看啓動信息  或者 直接看控制檯啓動日誌,如今就能看到相信信息了

錯誤提示爲:

嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [D:\dev\apache-tomcat-7.0.11\site1\ROOT\] instead of [D:\dev\apache-tomcat-7.0.11\webapps\ROOT\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
    at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:150)
    at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:117)
    at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:46)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4681)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5184)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5179)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

 

 

看見了 webAppRootKey  這個就容易了,爲啥呢, 由於我知道這個啥意思,不懂的百度下

而且錯誤信息也說得很明確了  看幾個關鍵字就行了     web.xml   unique value

由於咱們兩個war包徹底一致,至關於在同一個tomcat下啓動了兩個同名的項目,這個不容許

 

須要進行以下配置,爲每個項目制定一個不一樣的 webAppRootKey值,由於項目都又log4j

直接添加參數就行了

 

<display-name>site1</display-name>
    <description>site1.com</description>
    
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>site1</param-value>
    </context-param>

 

直接寫在最前面就行了,   每一個項目的 webAppRootKey 必定要不同【同一個tomcat下】,不然爲默認值 webapp.root, 而後我又沒有設置環境變量  因此直接改

 

發現了這個問題,其實能夠之後再寫xml時候,不論會不會在同一個tomcat下發布,我建議你們都指定一個值,好比當前時間戳精確到毫秒或者uuid.....

 

 

天天進步一點點

相關文章
相關標籤/搜索