Coldfusion 11 REST服务适用于HTTP但不适用于HTTPS(404)

时间:2015-11-23 21:42:15

标签: apache web-services rest tomcat coldfusion

我正在尝试利用Coldfusion 11的REST服务,但我只能使用HTTP,而不是HTTPS。当我将协议更改为HTTPS时,它返回404。

我采取的步骤:

1)我在web root中创建了一个名为“api-test”的文件夹

2)在该文件夹中,我创建了一个名为“animals.cfc”的文件,其中包含:

<cfcomponent rest="true" restpath="/animals">
        <cffunction name="getAnimals" access="remote" httpmethod="GET" produces="application/json" returntype="struct">
                <cfset value = { "cats": "dogs", "birds": "snakes" }>
                <cfreturn value>
        </cffunction>
</cfcomponent>

3)数据&amp;中 Coldfusion管理员服务/ REST服务,我添加了“/ web / webapps / api-test”作为根路径和“api-test”作为映射

4)在我的网络浏览器中,当我在同一台服务器上登录我的一个CF Web应用程序(使用HTTP)时,我使用jQuery和Firefox的Firebug / Web Developer插件测试API:

$.get("http://cftestapp1.mydomain.com/rest/api-test/animals");

返回的数据没有问题

5)在我的Web浏览器中,当我将CF Web应用程序的协议更改为HTTPS,并使用HTTPS重试相同的命令时,我得到404.

$.get("https://cftestapp1.mydomain.com/rest/api-test/animals");

我的环境由负载均衡器(cftestapps)后面的两个Web服务器(cftestapp1和cftestapp2)组成。 Web服务器在带有Apache / Tomcat的Redhat Linux上运行Coldfusion 11。在我的测试中,我首先使用负载均衡器尝试了所有内容,当这不起作用时,我只专注于“cftestapp1”(如上例所示)。我梳理了所有Coldfusion管理员设置和Apache httpd.conf 文件并且显示为空。

我无法在网上找到太多文档或者似乎遇到同样问题的任何人。如果有人有任何见解,请帮助!!谢谢!

编辑:

每次发出HTTPS请求时, / etc / httpd / logs / ssl_error_log (在httpd.conf中指定)都会显示以下错误:

  

[Tue Nov 24 16:34:23 2015] [错误] [client my_ip_here]文件不存在:/ web / webapps / rest
  [Tue Nov 24 16:34:23 2015] [错误] [client my_ip_here]文件不存在:/ web / webapps / opt

/ web / webapps / rest 是我要求的资源;但是没有物理文件“休息”;我在Coldfusion管理员休息服务中的条目应该处理这些重定向。

/ web / webapps / opt 似乎是Apache尝试提供404页面,该页面不在Web根目录中,而是在 / opt 目录中。

我也发现了这个可能没有关系的错误,因为在添加 CF Rest服务之前我们的HTTPS请求从未遇到过问题。

  

[Tue Nov 24 16:33:12 2015] [warn] RSA服务器证书是CA证书(BasicConstraints:CA == TRUE!?)

以下是我们的Apache配置文件(httpd.conf)中的一个片段。还有更多的行,但这些似乎是最相关的。

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<Directory "/web/webapps">
 Options FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

Include "/etc/httpd/conf/mod_jk.conf"

NameVirtualHost 127.0.0.1:443
<VirtualHost 127.0.0.1:443>
        ServerName localhost
        DocumentRoot /web/webapps/
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/localhost.crt
        SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
        SSLProtocol +SSLv3 +TLSv1
        SSLCipherSuite RSA:!EXP:!NULL:+HIGH:-MEDIUM:-LOW
        ErrorLog logs/cfadmin.ssl.error.log
        CustomLog logs/cfadmin.ssl.access.log common
</VirtualHost>

ErrorDocument 404 /opt/cf11/cfusion/wwwroot/CFIDE/administrator/templates/404.cfm

似乎没有为404和REST服务正确路由HTTPS流量。但我可以在使用HTTPS时访问 / web / webapps 网络根目录中的所有其他文件夹而不会出现任何问题。

2 个答案:

答案 0 :(得分:1)

您的虚拟主机对ColdFusion一无所知。如果您查看/etc/httpd/conf/mod_jk.conf文件,它将有一行如下所示:

JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties"

HTTP服务正在调用(通过配置文件的Include "/etc/httpd/conf/mod_jk.conf"),而不是HTTPS服务。

您需要做的就是将此行复制到虚拟主机声明中的httpd.conf文件中;像这样:

<VirtualHost 127.0.0.1:443>
  ServerName localhost
  DocumentRoot /web/webapps/
  SSLEngine on
  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  SSLProtocol +SSLv3 +TLSv1
  SSLCipherSuite RSA:!EXP:!NULL:+HIGH:-MEDIUM:-LOW
  ErrorLog logs/cfadmin.ssl.error.log
  CustomLog logs/cfadmin.ssl.access.log common

  JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties"
</VirtualHost>

然后虚拟主机将知道在哪里找到服务。

答案 1 :(得分:1)

我的问题已经解决了。我找到了两个独立的解决方案,这些解决方案基于来自mt0和Adobe帮助(https://helpx.adobe.com/coldfusion/installing/configuring-your-system.html)的响应。

解决方案#1

修改 /etc/httpd/conf/httpd.conf

我在SSL VirtualHost 指令中添加了以下行:

<VirtualHost 127.0.0.1:443>
    JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties"

但是,只有当我将本地IP地址(127.0.0.1)更改为 NameVirtualHost VirtualHost 的服务器IP地址时,这才有效。 (使用*:443无效)

NameVirtualHost SERVER_IP_HERE:443
<VirtualHost SERVER_IP_HERE:443>

虽然这解决了这个问题,但我不想在配置文件中硬编码服务器的IP地址。所以我继续研究并找到了这个替代解决方案:

解决方案#2 (首选)。

编辑 /etc/httpd/conf.d/ssl.conf (将httpd.conf文件保留为原始状态)

我在SSL VirtualHost 指令中添加了以下行,并重新启动了Apache:

<VirtualHost _default_:443>
    JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties" 

这解决了我的问题。

谢谢大家的帮助!