Apache-2.2

頁面不會直接在域下結束

  • April 16, 2013

我正在嘗試在 Ubuntu 伺服器上使用 Apache 和 tomcat 設置一個 java 頁面。我遇到的問題是該頁面最終不在域下,而是在域上的虛擬文件夾中,就像這樣。

example.com/example/

如果我輸入 example.com,則找不到該頁面。如何讓頁面顯示在 example.com 下?

這是我的站點可用配置

<VirtualHost *:8080>
       ServerName example.com
       DocumentRoot /www/example

       <Directory /www/example/>
               AllowOverride All
               Order allow,deny
               allow from all
       </Directory>

       JkMount /* worker1
</VirtualHost>

這是workers.properties

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

jk.conf

# 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.
# Configuration Example for mod_jk
# used in combination with Apache 2.2.x
<IfModule jk_module>
   # We need a workers file exactly once
   # and in the global server
   JkWorkersFile /etc/apache2/workers.properties
   # Our JK error log
   # You can (and should) use rotatelogs here
   JkLogFile /var/log/apache2/mod_jk.log
   # Our JK log level (trace,debug,info,warn,error)
   JkLogLevel info
   # Our JK shared memory file
   JkShmFile /var/log/apache2/jk-runtime-status
   # Define a new log format you can use in any CustomLog in order
   # to add mod_jk specific information to your access log.
   # LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{Set-Cookie}o\" %{pid}P %{tid}P %{JK_LB_FIRST_NAME}n %{JK_LB_LAST_NAME}n ACC %{JK_LB_LAST_ACCESSED}n ERR %{JK_LB_LAST_ERRORS}n BSY %{JK_LB_LAST_BUSY}n %{JK_LB_LAST_STATE}n %D" extended_jk
   # This option will reject all requests, which contain an
   # encoded percent sign (%25) or backslash (%5C) in the URL
   # If you are sure, that your webapp doesn't use such
   # URLs, enable the option to prevent double encoding attacks.
   # Since: 1.2.24
   # JkOptions +RejectUnsafeURI
   # After setting JkStripSession to "On", mod_jk will
   # strip all ";jsessionid=..." from request URLs it
   # does *not* forward to a backend.
   # This is useful, if all links in a webapp use
   # URLencoded session IDs and parts of the static
   # content should be delivered directly by Apache.
   # Of course you can also do it with mod_rewrite.
   # Since: 1.2.21
   # JkStripSession On
   # Start a separate thread for internal tasks like
   # idle connection probing, connection pool resizing
   # and load value decay.
   # Run these tasks every JkWatchdogInterval seconds.
   # Since: 1.2.27
   JkWatchdogInterval 60
   # Configure access to jk-status and jk-manager
   # If you want to make this available in a virtual host,
   # either move this block into the virtual host
   # or copy it logically there by including "JkMountCopy On"
   # in the virtual host.
   # Add an appropriate authentication method here!
   <Location /jk-status>
       # Inside Location we can omit the URL in JkMount
       JkMount jk-status
       Order deny,allow
       Deny from all
       Allow from 127.0.0.1
   </Location>
   <Location /jk-manager>
       # Inside Location we can omit the URL in JkMount
       JkMount jk-manager
       Order deny,allow
       Deny from all
       Allow from 127.0.0.1
   </Location>
   # If you want to put all mounts into an external file
   # that gets reloaded automatically after changes
   # (with a default latency of 1 minute),
   # you can define the name of the file here.
   # JkMountFile conf/extra/uriworkermap.properties
   # Example for Mounting a context to the worker "balancer"
   # The URL syntax "a|b" instantiates two mounts at once,
   # the first one is "a", the second one is "ab".
   # JkMount /myapp|/* balancer
   # Example for UnMounting requests for all workers
   # using a simple URL pattern
   # Since: 1.2.26
   # JkUnMount /myapp/static/* *
   # Example for UnMounting requests for a named worker
   # JkUnMount /myapp/images/* balancer
   # Example for UnMounting requests using regexps
   # SetEnvIf REQUEST_URI "\.(htm|html|css|gif|jpg|js)$" no-jk
   # Example for setting a reply timeout depending on the request URL
   # Since: 1.2.27
   # SetEnvIf Request_URI "/transactions/" JK_REPLY_TIMEOUT=600000
   # Example for disabling reply timeouts for certain request URLs
   # Since: 1.2.27
   # SetEnvIf Request_URI "/reports/" JK_REPLY_TIMEOUT=0
   # IMPORTANT: Mounts and virtual hosts
   # If you are using VirtualHost elements, you
   # - can put mounts only used in some virtual host into its VirtualHost element 
   # - can copy all global mounts to it using "JkMountCopy On" inside the VirtualHost
   # - can copy all global mounts to all virtual hosts by putting
   #   "JkMountCopy All" into the global server
   # Since: 1.2.26
</IfModule>

伺服器.xml

<?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="8005" shutdown="SHUTDOWN">
 <!-- 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="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              URIEncoding="UTF-8"
              redirectPort="8443" />
   <!-- 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 JSSE configuration, when using APR, the
        connector should be using the OpenSSL style configuration
        described in the APR documentation -->
   <!--
   <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS" />
   -->
   <!-- Define an AJP 1.3 Connector on port 8009 -->
   <Connector port="8009" 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="localhost">
     <!--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="/www"
           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 "%r" %s %b" />
     </Host>
   </Engine>
 </Service>
</Server>

我通過在我的網頁目錄中創建一個名為 ROOT 的目錄並將所有內容移入其中來解決這個問題。不是一個完美的解決方案,但它有效。

只需將文件從 /www/example 移動到 /www 並更改 DocumentRoot 和 Directory 指令以匹配。

引用自:https://serverfault.com/questions/499639