Apache /Tomcat/Railo : Setting up two sites with same domain but two different ports

标签 apache tomcat coldfusion railo

我已经成功地使用 Tomcat 和 Apache 为端口 80 上的网站设置了 Railo。但是,我正在努力设置另一个使用相同域但端口不是 80 的设置。

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

就好像 Tomcat 没有从 Apache 获取第二个站点的服务器名,所以 Railo 知道要使用哪个文档库。是因为我正在尝试使用相同的域吗?我需要在 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(服务器.xml):

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

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

最佳答案

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

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

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

例如:

<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>

这不是对您正在做的事情的简单回答,但它会实现您的目标。

-乔丹

关于 Apache /Tomcat/Railo : Setting up two sites with same domain but two different ports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9244653/

相关文章:

coldfusion - 如何在 Coldfusion 10 中获取应用程序数据源名称?

c# - 将字符串从 HTTPHandler 返回到发布此 .ashx 文件的页面的最佳方法

php - 不能在输出缓冲显示处理程序中使用输出缓冲

python - 403 Forbidden due to Client Denied by Server Configuration

java - 重新部署后使用 JSF 2 防止 ViewExpiredException

java - 公开托管 Apache Tomcat 问题时的文件上传

JQuery 不处理 ColdFusion JSON

php - 捕获并调试偶发的500错误

python - Apache mod_wsgi 和 python 2.7

java - 在 spring + tomcat 中记录 REST API 响应时间的最佳方式