Apache-2.2

多域單個 Tomcat 7 - Apache Mod_proxy

  • August 5, 2014

我已經為此苦苦掙扎了一天多。因為我是伺服器設置的新手。一直在網上關注許多關於相同的教程和文件,很多都是命中註定的,但沒有運氣。

這是我到目前為止所做的。

  1. 我讓我的 vps 執行,它的 Apache 在埠 80 上執行。
  2. 我在 8080 埠安裝了 Tomcat 7.0.55,它已啟動並執行。

現在我們必須將流量從 Apache 路由到 Tomcat

  1. 下列的

https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

修改 apache 的 000-default.conf 看起來像這樣。

<VirtualHost *:80>
   # The ServerName directive sets the request scheme, hostname and port that
   # the server uses to identify itself. This is used when creating
   # redirection URLs. In the context of virtual hosts, the ServerName
   # specifies what hostname must appear in the request's Host: header to
   # match this virtual host. For the default virtual host (this file) this
   # value is not decisive as it is used as a last resort host regardless.
   # However, you must set it for any further virtual host explicitly.
   #ServerName www.example.com

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html

   # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
   # error, crit, alert, emerg.
   # It is also possible to configure the loglevel for particular
   # modules, e.g.
   #LogLevel info ssl:warn

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   # For most configuration files from conf-available/, which are
   # enabled or disabled at a global level, it is possible to
   # include a line for only one particular virtual host. For example the
   # following line enables the CGI configuration for this host only
   # after it has been globally disabled with "a2disconf".
   #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

<VirtualHost *:*>
  ProxyPreserveHost On

  # Servers to proxy the connection, or;
  # List of application servers:
  # Usage:
  # ProxyPass / http://[IP Addr.]:[port]/
  # ProxyPassReverse / http://[IP Addr.]:[port]/
  # Example: 
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/

  ServerName localhost
</VirtualHost>

這成功地將我的每個請求重定向到 tomcat。

  1. 現在在瀏覽器中執行我註冊的域名。www.mytestdomain.com。我登陸預設的tomcat頁面。並在瀏覽器地址欄中寫入伺服器 ip 也將我登陸到同一個 tomcat 頁面。

5 現在我需要 www.mytestdomain.com 指向我在 $CATALINA_HOME/webapps/www.mytestdomain.com 中部署在 tomcat 中的應用程序

6 和其他 test.mytestdomain.com 指向我在 tomcat 中部署的應用程序 $CATALINA_HOME/webapps/test.mytestdomain.com

7 和 xx.xx.xx.xx 我的 ip 只登陸預設的 tomcat 頁面。

那是我想要實現而無法做到的。

8 現在關注

http://tomcat.apache.org/tomcat-7.0-doc/virtual-hosting-howto.html

我更新了我的 $CATALINA_HOME/conf/server.xml 以增加一台主機。更新我的 server.xml 文件後看起來

 <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 "%r" %s %b" />

 </Host>

 <Host name="www.mytestdomain.com"  appBase="webapps-new"
       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="www.mytestdomain.com_log." suffix=".txt"
          pattern="%h %l %u %t "%r" %s %b" />

 </Host>
  1. 我創建了新的 appBase 目錄 mkdir $CATALINA_HOME/webapps-new

  2. 在 $CATALINA_HOME/webapps-new 文件夾中,我為我的 webapp 創建了符號連結。ln -s ../webapp/www.mytestdomain.com ROOT

  3. cd $CATALINA_HOME/webapps-new/ROOT/WEB_INF/

  4. 在 META-INF 文件中創建了 context.xml,內容如下。

  5. 重新啟動 Apache 並重新啟動 Tomcat -

$$ ok $$ 14. 結果。–> 瀏覽器中的 www.mytestdomain.com 正確地訪問了我的 tomcat webapp。 15. 但是 test.mytestdomain.com 和 xx.xx.xx.xx 我在瀏覽器中的 ip 也訪問了與 www.mytestdomain.com 相同的 webapp。他們應該去了預設主機。

我嘗試了許多其他技巧,但沒有運氣。

任何幫助,將不勝感激。我知道這很有可能。

謝謝

這對我來說聽起來相當複雜,而不是我嘗試執行它的方式。

一般來說,我盡量將環境彼此分開,理想地在不同的伺服器上執行,但我知道這不是你可以用單個 VPS 做的事情。

您至少應該分離 tomcat 實例,這將減少混亂並使一切更加清晰。

我會

1)在不同的埠,prod:8080 和 test:8180 上啟動 2 個不同的 tomcat 實例(根據您執行的發行版以不同的方式實現)

  1. 在您的 Apache 配置中啟用 NameVirtualHost 並將正確的伺服器名稱代理到正確的 tomcat 實例
# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.mytestdomain.com

# Other directives here

ProxyPreserveHost On

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName test.mytestdomain.com

# Other directives here
ProxyPreserveHost On

ProxyPass / http://localhost:8180/
ProxyPassReverse / http://localhost:8180/
</VirtualHost>

這樣你的環境是完全獨立的,你可以在不影響 prod 的情況下應用更改來測試,不僅在你的程式碼內部,而且在 tomcat 配置級別和 apache 配置級別。

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