前端或后端(HAProxy)中的X-Forwarded-Proto https?

时间:2018-08-20 10:12:05

标签: https haproxy

我已经在后端服务器应用程序之前设置了HAProxy以启用HTTPS。我已经读到我需要设置X-Forward-Proto https

haproxy.cfg 文件中,我尝试在前端中执行以下操作:

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

似乎可以使它工作-例如我既可以登录到后端服务器,也可以浏览到不同的页面。如果我没有原型选项,我只能登录,而不能导航到任何其他页面。

现在,我可以使用以下方式在后端中添加该选项(从前端删除):

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

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

那么哪种方法是正确的呢?在前端还是后端,还是没关系?

1 个答案:

答案 0 :(得分:6)

没关系。当您有多个后端时,通常最好在前端执行此操作。

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

req*指令比http-request的功能要早得多,因此通常首选set-header,但是有一个重要原因说明为什么您应该在这里使用它,以及为什么要使用{{1} }而不是add-header:您不希望客户端伪造仅代理应注入的标头。对于非https前端,您还应该http-request set-header X-Forwarded-Proto http,以防止出现不正确的上游标头。与add-header一样,reqadd选项不会删除任何现有的相同名称的标头,而set-header会删除。