【问题标题】:X-Forwarded-Proto https in frontend or backend (HAProxy)?X-Forwarded-Proto https 在前端还是后端(HAProxy)?
【发布时间】:2019-01-26 10:49:38
【问题描述】:

我在我的后端服务器应用程序前面设置了一个 HAProxy 以启用 HTTPS。我读过我需要设置X-Forward-Proto https

haproxy.cfg 文件中,我尝试在 frontend 中使用:

frontend haproxy
  bind :8443 ssl crt frontend/server.pem
  reqadd X-Forwarded-Proto:\ https
  default_backend my-backend

这似乎使它起作用-例如我既可以登录到我的后端服务器,也可以导航到不同的页面。如果我没有 proto 选项,我只能登录但不能导航到任何其他页面。

现在我如果在 backend 中添加选项(从前端删除它):

backend my-backend
  http-request add-header X-Forwarded-Proto https if { ssl_fc }
  server my-backend 127.0.0.1:9000

它也可以,我可以在我的后端服务器应用程序中浏览不同的页面。

那么正确的方法是什么?在前端还是在后端还是没关系?

【问题讨论】:

    标签: https haproxy


    【解决方案1】:

    没关系。当您有多个后端时,通常在前端执行此操作是有意义的。

    您也可以在前端使用http-request set-header X-Forwarded-Proto,而不是使用reqadd

    req* 指令的功能比 http-request 旧得多,因此通常首选后者,但这里有一个重要原因为什么你应该更喜欢它,以及为什么你应该使用 set-header 而不是 add-header :您不希望客户端能够伪造只有代理应该注入的标头。对于非 https 前端,您还应该http-request set-header X-Forwarded-Proto http,以免上游标头不正确。 add-header 选项,就像 reqadd 一样,不会删除任何现有的同名标头,而 set-header 会。

    【讨论】:

    • 好的,所以在前端你的意思是我应该设置“http-request set-header X-Forwarded-Proto https if { ssl_fc }”或“http-request set-header X-Forwarded-原型:\ https"?不确定最后一个版本的格式是否正确。
    • http-request set-header X-Forwarded-Proto https。不使用冒号和反斜杠。
    • 另请注意http-request set-header X-Forwarded-Port <port_number> 可用于转发到非标准端口
    • @CorinFletcher 我只见过X-Forwarded-Port: <int> 在前端用于通知后端请求到达前端的端口,而不是转发到的位置。在端口 8080 上作为 HTTP 到达前端的 HTTP 请求将(例如)包含 X-Forwarded-Proto: httpX-Forwarded-Port: 8080,以便后端可以有足够的信息来重建 URL ${x-forwarded-proto}://example.com:${x-forwarded-port}/,在需要的情况下。在 HAProxy 中,这将是 http-request set-header X-Forwarded-Port %fp
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2013-01-04
    相关资源
    最近更新 更多