前端或后端的X-Forwarded-Proto https(HAProxy)?
我已经在后端服务器应用程序前面设置了一个HAProxy来启用HTTPS。我已经读到我需要设置前端或后端的X-Forwarded-Proto https(HAProxy)?,https,haproxy,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 这似乎使它工作-例如,我可以登录到我的后端服务
X-Forward-Proto-https
在haproxy.cfg文件中,我尝试在前端中使用以下方法实现这一点:
frontend haproxy
bind :8443 ssl crt frontend/server.pem
reqadd X-Forwarded-Proto:\ https
default_backend my-backend
这似乎使它工作-例如,我可以登录到我的后端服务器和导航到不同的页面。如果我没有proto选项,我只能登录,但不能导航到任何其他页面
现在,如果在后端添加该选项,请改为(从前端删除该选项),方法是:
它也可以工作,我可以在我的后端服务器应用程序中导航不同的页面
那么,哪种方法才是正确的呢?在前端或后端还是无关紧要?无关紧要。当您有多个后端时,在前端执行此操作通常是有意义的
您还可以在前端使用
http请求集头X-Forwarded-Proto
,而不是使用reqadd
req*
指令的功能比http请求
旧得多,因此后者通常是首选的,但您更喜欢它的一个重要原因是,这里是为什么您应该使用set header
而不是add header
:您不希望客户端能够伪造只有代理才应该注入的头。对于非https前端,您还应该http请求设置头X-Forwarded-Proto http
,这样就不可能存在不正确的上游头。addheader
选项与reqadd
一样,不会删除任何同名的现有头,而set header
会删除 好的,那么在前端,您的意思是我应该设置“http请求集头X-Forwarded-Proto https if{ssl_fc}”还是“http请求集头X-Forwarded-Proto:\https”?不确定最后一个版本的格式是否正确。http请求集头X-Forwarded-Proto-https
。不使用冒号和反斜杠。另请注意http请求集标题X-Forwarded-Port
可用于转发到非标准port@CorinFletcher我只见过在前端使用X-Forwarded-Port:
通知后端请求到达前端的端口,而不是它被转发到的地方。作为端口8080上的HTTP到达前端的HTTP请求(例如)将包含X-Forwarded-Proto:HTTP
和X-Forwarded-port:8080
,以便在需要的情况下,后端可以有足够的信息来重建URL${X-Forwarded-Proto}://example.com:${X-Forwarded-port}/
。在HAProxy中,这将是http请求集头X-Forwarded-Port%fp
。
backend my-backend
http-request add-header X-Forwarded-Proto https if { ssl_fc }
server my-backend 127.0.0.1:9000