小编mut*_*ron的帖子

nginx try_files 在 SSL 终止负载平衡器(haproxy)后面使用错误的方案重定向

我有一个 nginx 1.6.2 服务器作为后端运行在执行 SSL 终止的负载平衡器后面。与后端服务器的所有通信都通过 HTTP 进行。

发生的事情示意图:

          /--http---> frontend:80  --\
client --+                            +--http---> backend:8000
          \--https--> frontend:443 --/

                      LOAD BALANCER                BACKENDS
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我目前只有一个后端。负载均衡器运行 HAProxy 1.5,我可以控制它。

我在后端 nginx 配置的块中有一个非常典型的try_files指令server

server {
    server_name frontend;
    ...
    try_files $uri $uri/ =404;
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,默认情况下,当我访问没有斜杠的目录时,例如https://frontend/somedir,nginx 想要将 HTTP 301 重定向发送到绝对 URL,例如http://frontend:8000/somedir/.

我可以让 nginx 省略 8000 端口号使用port_in_redirect off.

但是,我似乎无法http://在 nginx 生成的重定向开始时更正该方案。我可以让 nginx 做的最好的事情是从https://frontend/somedirto重定向http://frontend/somedir/,有效地剥离 SSL!

负载均衡器正在发送一个X-Forwarded-Proto标头,但我看不到 nginx 在制作重定向时有任何方式来查询它;事实上,2012 年有一个回答说 …

nginx haproxy

9
推荐指数
2
解决办法
2027
查看次数

标签 统计

haproxy ×1

nginx ×1