首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coldfusion 11 REST服务使用HTTP,但不使用HTTPS (404)

Coldfusion 11 REST服务使用HTTP,但不使用HTTPS (404)
EN

Stack Overflow用户
提问于 2015-11-23 21:42:14
回答 2查看 1.3K关注 0票数 3

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

我所采取的步骤:

1)我在web根目录中创建了一个名为"api-test“的文件夹。

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

代码语言:javascript
复制
<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)在Coldfusion 中,在Data & Services / REST Services中,我添加了“/web/webapp/api-test”作为根路径,"api-test“作为映射。

4)在我的web浏览器中,当登录到同一服务器上的一个CF web应用程序(使用HTTP)时,我使用jQuery和火狐的Firebug / while插件测试API:

代码语言:javascript
复制
$.get("http://cftestapp1.mydomain.com/rest/api-test/animals");

返回的数据没有问题。

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

代码语言:javascript
复制
$.get("https://cftestapp1.mydomain.com/rest/api-test/animals");

我的环境由负载均衡器(Cftestapp)后面的两个web服务器(cftestapp1和cftestapp2)组成。web服务器在Redhat Linux上与Apache/Tomcat一起运行Cold聚变11。在整个测试过程中,我首先尝试了负载均衡器的所有功能,当它不起作用时,我只关注"cftestapp1“(如上面的例子)。我梳理了所有的Cold聚变管理员设置和Apache httpd.conf文件,结果显示为空。

我在网上找不到很多文档,也找不到任何一个遇到同样问题的人。如果任何人有任何洞察力,请帮助!谢谢!

编辑:

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

2015年11月24日16:34:23客户端my_ip_here文件不存在:/web/webapp/rest 2015年11月24日16:34:23客户端my_ip_here文件不存在:/web/webapp/opt

/web/webapps/rest是我请求的资源;但是没有物理文件" Rest ";我在Cold聚变管理员Rest服务中的条目应该处理这些重定向。

/web/webapps/opt似乎是Apache为404页面提供服务的尝试,它不是在web根目录中,而是在/opt目录中。

我还发现了这个错误,这可能与此无关,因为在添加CF服务之前,我们从未遇到过HTTPS请求的问题。

2015年11月24日16:33:12 RSA服务器证书是CA证书(BasicConstraints: CA == TRUE !?)

下面是文件(httpd.conf)的一个片段。有更多的线,但这些似乎是最相关的。

代码语言:javascript
复制
<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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-01 20:00:45

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

解决方案#1

编辑/etc/httpd/conf/httpd.conf

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

代码语言:javascript
复制
<VirtualHost 127.0.0.1:443>
    JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties"

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

代码语言:javascript
复制
NameVirtualHost SERVER_IP_HERE:443
<VirtualHost SERVER_IP_HERE:443>

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

解决方案#2 (首选)。

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

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

代码语言:javascript
复制
<VirtualHost _default_:443>
    JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties" 

这解决了我的问题。

谢谢大家的帮助!

票数 2
EN

Stack Overflow用户

发布于 2016-01-28 11:33:32

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

代码语言:javascript
复制
JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties"

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

您所需要做的就是将该行复制到虚拟主机声明中的httpd.conf文件中;如下所示:

代码语言:javascript
复制
<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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33881247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档