Apache2,VirtualHost,CentOs:一台服务器上的根上下文和子上下文

时间:2015-10-05 12:48:44

标签: linux apache svn jboss virtualhost

我使用apache2 httpd服务器2.2.15,CentOs 2.6.32,Wildfly 8.1.0.Final,VPS和plesk 12.0.18,1域名:something.com。一切都在一个VPS上。

我希望以下链接有效:

1)something.com [重定向到localhost的wildfly应用程序:8080 / app1]

2)something.com/repos/app1 [svn repository在这里/ SVN服务器/ subversion 1.8.10 /端口80在这里使用]

我在apache2中找到了正确的VirtualHost配置。 问题:如何在apache2中配置VirtualHost(我的位置:/etc/httpd/conf/httpd.conf)?

我目前的1)工作配置是:

 <VirtualHost *:80>
   ServerName something.com
   ServerAlias www.something.com something.com

   ProxyRequests Off
   ProxyPreserveHost On

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

   RewriteEngine   On
   RewriteCond     %{THE_REQUEST}  /app1/
   RewriteRule     ^/app1/(.*)$ /$1 [PT]

</VirtualHost>

坦率地说,我尝试了不同的VirtualHost配置,但没有一个适合我。我不想附加10个错误的配置,所以我只附加了一个用于1)。

在app1应用程序的jboss-web.xml(w WEB-INF)中是:

<jboss-web>
    <virtual-host>myVirtualServerName</virtual-host> 
</jboss-web>

并使用jboss-cli.sh我添加了:

/subsystem=undertow/server=default-server/host=myVirtualServerName/:add(default-web-module=app1.web.war,alias=["something.com"])

这是我尝试这样做的第3天。我知道有类似的主题但类似并不意味着相同。或许我不知道哪种解决方案应该有效?或者可能有多个解决方案?

建议高度赞赏。提前谢谢。

我试过了:

I)

<VirtualHost *:80>
   ServerName something.com
   ServerAlias www.something.com something.com

   ProxyRequests Off
   ProxyPreserveHost On

   ProxyPass /repos/app1/trunk http://localhost/repos/app1/trunk/
   ProxyPassReverse /repos/app1/trunk  http://localhost/repos/app1/trunk/

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

   RewriteEngine   On
   RewriteCond     %{THE_REQUEST}  /repos/app1/trunk/
   RewriteRule     ^/repos/app1/trunk/(.*)$ /$1 [PT]
   RewriteCond     %{THE_REQUEST}  /app1/
   RewriteRule     ^/app1/(.*)$ /$1 [PT]

</VirtualHost>

但它不起作用

II) 此解决方案也不起作用:

<VirtualHost *:80>
   ServerName something.com
   ServerAlias www.something.com something.com

   ProxyRequests Off
   ProxyPreserveHost On

   <Location /repos/app1/>
    ProxyPass http://localhost/repos/app1/
    ProxyPassReverse http://localhost/repos/app1/
    ProxyPassReverseCookiePath / /repos/app1/
  </Location>

   <Location />
    ProxyPass http://localhost:8080/app1/
    ProxyPassReverse http://localhost8080/app1/
    ProxyPassReverseCookiePath / /app1/
  </Location>

</VirtualHost>

1 个答案:

答案 0 :(得分:1)

您需要了解一些事实。 当使用Apache mod_proxy和Wildfly时,请求将采用这种方式:

 REQUEST -> APACHE <-> Wildfly Undertow
 RESPONSE <- APACHE <-> Wildfly Undertow

考虑到这一点,配置应该很容易。 每个请求和响应只与apache交谈,而不是与底层交谈。因此,除了需要的底部的http_connector之外,没有其他设置。

但是您需要确保apache配置始终到达Undertow。根据您的方法,SVN应用应如下所示:

ProxyPass /repos/app1/trunk http://localhost:8080/repos/app1/trunk/
ProxyPassReverse /repos/app1/trunk  http://localhost:8080/repos/app1/trunk/

请注意主持人背后的端口。