Apache / Tomcat / Railo:设置两个具有相同域但两个不同端口的站点

时间:2012-02-11 22:39:19

标签: apache tomcat coldfusion railo

我已经成功地使用Tomcat和Apache为端口80上的网站设置了Railo。但是我很难设置另一个使用相同域但是80以外的端口。

我在端口9080上设置了第二个站点,并使用SSL证书和基本身份验证。我可以访问它并获得SSL证书和身份验证提示,但是一旦我完成了这一点,Railo就会输出默认页面(位于/opt/railo/tomcat/webapps/ROOT/index.cfm)。

就好像Tomcat没有从Apache获取第二个站点的服务器名称所以Railo知道要使用什么docbase。是因为我正在尝试使用相同的域名吗?我是否需要在Tomcat配置中的某处指定端口9080?

我已在下方粘贴了我的配置。非常感谢任何帮助。

的Apache:

<VirtualHost *:80>
  ServerName sitename
  ServerAlias domainname
  DirectoryIndex index.cfm index.html index.htm

  DocumentRoot "/web/sitename"
  <Directory "/web/sitename">
    allow from all
    Options +Indexes
  </Directory>
</VirtualHost>

Listen 9080
<VirtualHost *:9080>
  ServerName sitename2
  ServerAlias domainname
  DirectoryIndex index.cfm index.html index.htm
  SSLEngine on
  SSLCertificateFile    /web/ssl/server.crt
  SSLCertificateKeyFile /web/ssl/server.key

  DocumentRoot "/web/sitename2
  <Directory "/web/sitename2">
    allow from all
    Options -Indexes
    AuthName .. basic auth settings ..
  </Directory>
</VirtualHost>

Tomcat(server.xml):

<Host name="sitename" appBase="webapps">
    <Context path="" docBase="/web/sitename" />
</Host>

<Host name="sitename2" appBase="webapps">
    <Context path="" docBase="/web/sitename2" />
</Host>

1 个答案:

答案 0 :(得分:1)

这里的问题是Tomcat配置。您不能拥有两个具有相同“sitename”的主机。一个会覆盖另一个。理想情况下,您可以让Tomcat听取多个端口,就像使用Apache一样,但Coyote(Tomcat的Web服务器)在这种功能方面并不像Apache那样先进。我见过的关于在多个端口上运行Tomcat的大多数建议建议在同一台机器上运行Tomcat的单独实例,这也是我向你推荐的内容,因为它似乎是普遍接受的。

如果您安装了第二个Tomcat实例并在其上安装了Railo,则可以将Apache配置为将进入第二个虚拟主机的请求传递给第二个Tomcat实例。例如,您可以让您的第二个Tomcat实例使用它的AJP侦听器来侦听端口9009而不是8009,然后将您的Apache虚拟主机配置为代理请求到端口9009,从而命中您的第二个Tomcat实例。

然后,在第二个实例中,您可以创建相同的主机条目,但具有不同的docbase属性。

例如:

<VirtualHost *:80>
  ServerName sitename
  ServerAlias domainname
  DirectoryIndex index.cfm index.html index.htm

  DocumentRoot "/web/sitename"
  <Directory "/web/sitename">
    allow from all
    Options +Indexes
  </Directory>
  <Proxy *>
  Allow from 127.0.0.1
  </Proxy>
  ProxyPreserveHost On
  ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://localhost:8009/$1$2
</VirtualHost>

Listen 9080
<VirtualHost *:9080>
  ServerName sitename2
  ServerAlias domainname
  DirectoryIndex index.cfm index.html index.htm
  SSLEngine on
  SSLCertificateFile    /web/ssl/server.crt
  SSLCertificateKeyFile /web/ssl/server.key

  DocumentRoot "/web/sitename2
  <Directory "/web/sitename2">
    allow from all
    Options -Indexes
    AuthName .. basic auth settings ..
  </Directory>
  <Proxy *>
  Allow from 127.0.0.1
  </Proxy>
  ProxyPreserveHost On
  ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://localhost:9009/$1$2
</VirtualHost>

对于你正在做的事情,这不是一个简单的答案,但它会实现你的目标。

-Jordan