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

标签 apache web-services rest tomcat coldfusion

我正在尝试利用 Coldfusion 11 的 REST 服务,但我只能让它使用 HTTP,而不是 HTTPS。当我将协议(protocol)更改为 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) 在 Coldfusion AdministratorData & Services/REST Services 下,我添加了“/web/webapps/api-test”作为根路径 和“api-test”作为映射

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

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

数据返回没有问题

5) 在我的网络浏览器中,当我将 CF 网络应用程序的协议(protocol)更改为 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 中指定)显示以下错误:

[Tue Nov 24 16:34:23 2015] [error] [client my_ip_here] File does not exist: /web/webapps/rest
[Tue Nov 24 16:34:23 2015] [error] [client my_ip_here] File does not exist: /web/webapps/opt

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

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

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

[Tue Nov 24 16:33:12 2015] [warn] RSA server certificate is a CA certificate (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 和 Adob​​e 帮助 (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) 更改为 NameVirtualHostVirtualHost 的服务器 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" 

这解决了我的问题。

谢谢大家的帮助!

关于apache - Coldfusion 11 REST 服务适用于 HTTP 但不适用于 HTTPS (404),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881247/

相关文章:

apache - 三个.htaccess过期规则之间的区别

apache - .htaccess 用于 WordPress 多站点导致随机错误 500?

java - Tomcat 自动关闭

java - 不支持的内容类型 : text/plain; charset=ISO-8859-1

c# - 如何使 WCF 服务服务器-客户端时差独立?

api - REST 模式创建、更新和删除相同的端点

rest - 支持概念的 FHIR 资源无已知过敏

java - 关于@Controller @RestController 和@ResponseBody 的困惑

php - ubuntu 14.04 上的 apache 服务器上找不到页面错误

web-services - POST xml 无效时更正 HTTP 状态代码?