我试图利用Coldfusion 11的REST服务,但只能使它与HTTP一起使用,而不能与HTTPS一起使用。当我将协议更改为HTTPS时,它将返回404。
我已采取的步骤:
1)我在Web根目录下创建了一个名为“ 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)在 数据和服务/ REST服务* 下的 Coldfusion Administrator中 ,我添加了“ / web / webapps / api-test”作为 根路径, 并添加了“ api-test”作为 映射 。 *____
4)在我的Web浏览器中,登录到同一服务器上的我的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 Administrator设置和Apache httpd.conf 文件,结果空白。
我在网上找不到很多文档,也找不到任何人遇到同样的问题。如果有人有什么见识,请帮忙!谢谢!
编辑:
每次我发出HTTPS请求时, / etc / httpd / logs / ssl_error_log (在httpd.conf中指定)都会显示以下错误:
[2015年11月24日星期二16:34:23] [错误] [客户端my_ip_here]文件不存在:/ web / webapps / rest [2015年11月24日周二16:34:23] [错误] [客户端my_ip_here]文件不存在存在:/ web / webapps / opt
/ web / webapps / rest 是我请求的资源;但是,没有物理文件“休息”;我在Coldfusion Administrator的Rest Services中的条目应处理这些重定向。
/ web / webapps / opt 似乎是Apache服务于404页面的尝试,该页面不在web根目录中,而在 / opt 目录的深处。
我还发现了这个错误,该错误可能没有关系,因为在添加 CF Rest Services 之前,我们的HTTPS请求从未遇到过问题。
[2015年11月24日星期二16:33:12] [警告] 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 网络根目录中的所有其他文件夹,而不会出现任何问题。
我的问题已经解决。我找到了两个单独的解决方案,它们基于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"
但是,这仅在我将 NameVirtualHost 和 VirtualHost 的本地IP地址(127.0.0.1)更改为服务器的IP地址时有效。(使用 *:443无效)
*: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"
这解决了我的问题。
谢谢大家的帮助!