我在后端服务器应用程序前面设置了HAProxy以启用HTTPS.我已经读过我需要设置X-Forward-Proto https. 在haproxy.cfg文件中,我尝试在前端执行以下操作: frontend haproxy bind :8443 ssl crt frontend/server.p
在haproxy.cfg文件中,我尝试在前端执行以下操作:
frontend haproxy bind :8443 ssl crt frontend/server.pem reqadd X-Forwarded-Proto:\ https default_backend my-backend
这似乎使它工作 – 例如我可以登录到我的后端服务器并导航到不同的页面.如果我没有proto选项,我只能登录但不能导航到任何其他页面.
现在我在后端添加选项(从前端删除):
backend my-backend http-request add-header X-Forwarded-Proto https if { ssl_fc } server my-backend 127.0.0.1:9000
它也有效,我可以导航我的后端服务器应用程序中的不同页面.
那么这是正确的方法呢?在前端或后端还是没关系?
没关系.当你有多个后端时,通常在前端执行此操作是有意义的.你也可以在前端使用http-request set-header X-Forwarded-Proto,而不是使用reqadd.
req *指令的功能比http-request更旧,所以后者通常是首选,但是有一个重要的原因,你应该更喜欢它,这里以及为什么你应该使用set-header而不是add-header:你不要我希望客户端能够伪造只有代理应该注入的标头.对于非https前端,您还应该http请求set-header X-Forwarded-Proto http,以便不会出现错误的上游标头. add-header选项与reqadd一样,不会删除任何现有的同名头文件,而set-header则会删除.