【问题标题】:How to proxy rest api calls with correct headers in Apache as it comes from that server?如何在 Apache 中使用正确的标头代理来自该服务器的 rest api 调用?
【发布时间】:2017-09-18 15:21:09
【问题描述】:

我怎样才能通过另一台服务器正确代理 rest api 调用,就好像它来自该服务器一样?

开发人员需要在域 sub.xyz.com 上谈论一个远程休息 api,该 api 只能通过域 xyz.com (Access-Control-Allow-Origin) 访问。因此,我想在托管域 xyz.com 的服务器上设置一个 http 代理,就好像呼叫来自该域一样。 但是,我确实收到以下错误:

403 禁止 对此资源的访问被拒绝。
未经授权:get_collection 权限检查失败

我使用的 apache httpd 配置:

ProxyRequests Off
ProxyPreserveHost Off
SSLProxyEngine on
ProxyPass /api https://sub.xyz.com/api
ProxyPassReverse /api https://sub.xyz.com/api

如何正确设置它以使其正常工作?

【问题讨论】:

    标签: apache rest proxy httpd.conf


    【解决方案1】:

    如果您希望在到达后端时保留前端服务器名称,您应该设置:

    ProxyPreserveHost on
    

    您可能还应该添加:

    SSLProxyCheckPeerCN off
    

    和/或

    SSLProxyCheckPeerName off
    

    或者由于使用与其证书 CN 不匹配的主机名联系后端,连接将在 ssl 握手中失败。


    根据您的 cmets,如果您想让后端也认为代理正在发出请求,也许您应该开始删除代理标头,例如:

    ProxyAddHeaders off
    

    但这确实取决于后端查看的内容来确定谁在访问它。

    【讨论】:

    • 不,api 应该看到请求,就好像它是由代理服务器发出的一样。如何实现这一点?
    • @edbras 我根据你的 cmets 修改了答案。
    • 谢谢,刚刚添加了 ProxyAddHeaders 但它一直给出同样的错误。我不知道怎么看为什么?
    • @edbras 您必须检查后端以查看正在检查的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2019-04-28
    • 2018-02-03
    相关资源
    最近更新 更多