我在 WebSphere Application Server (WAS) 中运行 Spring Web App。WAS 使用 https 监听端口 36500,Apache 使用 http 监听端口 80。使用的协议目前不受我控制,因此我无法让 Apache 使用 https(这将解决我将在下面描述的问题)。
我已将 Apache 设置为反向代理,以将所有请求转发到指定端口上的 WAS,如下所示:
Listen 80
LogLevel warn
LoadModule ssl_module modules/mod_ssl.so
SSLProxyEngine on
<VirtualHost _default_:80>
ProxyPreserveHost on
ServerName ech-10-157-131-139
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
ErrorLog logs/error_log
<Location /sel>
Header set Host ech-10-157-131-139.mycompany.int
Header set Access-Control-Allow-Origin "*"
ProxyPass https://ech-10-157-131-139.mycompany.int:36500/sel
ProxyPassReverse https://ech-10-157-131-139.mycompany.int:36500/sel
</Location>
</VirtualHost>
这工作正常,WAS 通过 Apache 代理返回的 JSON 将 Apache 服务器的 URL 映射到links
输出底部的部分。但是,这些links
元素上的协议是 https,大概是因为 WAS 通过 https 提供服务。我可以在 WAS 或 Apache 中做些什么来将它们更改为 http?下面有一些示例输出。
这个请求:
http://ech-10-157-131-139.mycompany.int/sel/services?endingHoursAgo=0&hoursToShow=2
得到以下响应(为了简洁起见,我减少了数据量):
{
"content": [
{
"cpuUsageId": 132291,
"cpuUsageTimestamp": 1414583402385,
"deviceName": "dev",
"domainName": "DEVESB",
"tenSecondPercentage": 3,
"oneMinutePercentage": 3,
"tenMinutePercentage": 4,
"oneHourPercentage": 4,
"oneDayPercentage": 4,
"responseTimestamp": "2014-10-29 06:50:15",
"links": []
},
],
"links": [
{
"rel": "self",
"href": "https://ech-10-157-131-139.mycompany.int/sel/cpu?from=2014-10-29T06:50:00.000-05:00&to=2014-10-29T08:50:00.000-05:00"
}
]
}
您可以看到self
上面的链接有一个href
以“https”开头的值。我希望 WAS 将其返回为“http”。
答案1
您可以尝试使用类似这样的方法:
AddOutputFilterByType 替代文本/json
替换“s|htt ps://|htt p://|i”