我已经在后端服务器应用程序之前设置了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
它也可以工作,我可以在后端服务器应用程序中浏览不同的页面。
那么哪种方法是正确的呢?在前端还是后端,还是没关系?
答案 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
会删除。