gpt4 book ai didi

perl - 有没有办法在Catalyst中强制$ c-> uri_for生成以https开头的URI?

转载 作者:行者123 更新时间:2023-12-04 05:21:54 25 4
gpt4 key购买 nike

我已经使用Catalyst编写了一个Web应用程序,该应用程序具有很多形式,需要在https上运行。没有硬编码的URL,所有内容都使用$c->uri_for$c->req->uri。使用运行在http之上的开发服务器,一切在开发环境中都运行良好。

今天,当我继续部署应用程序时,我注意到了一个问题。当前设置生产环境的方式,客户端浏览器通过HTTPS与F5负载平衡器进行对话,而F5通过HTTP与内部网络上的Web服务器进行对话。

[ Browser ] ---HTTPS---> [ F5 ] ---HTTP---> [ Web Server ]



现在,由于Web服务器仅获取 HTTP请求,因此将以HTTP开头生成所有URI。这表示:
<form action='[% c.uri_for('/secure/form') %]' method='post'>

变成:
<form action='http://websitename.org/secure/form' method='post'>

现在所有浏览器都提示您正在通过不安全的连接提交数据。我需要 c.uri_for以https开头。

该应用程序今天需要上线,因此我对所有表单操作进行了大规模搜索/替换:
<form action='[% c.uri_for('/secure/form') | replace('http:', 'https:'%]' method='post'>

好了,现在这破坏了开发,因此我根据配置键对表单操作进行了条件化:
[% IF c.config.production %]
<form action='[% c.uri_for('/secure/form') | replace ('http:', 'https:') %]' method='post'>
[% ELSE %]
<form action='[% c.uri_for('/secure/form') %]' method='post'>
[% END %]

不用说,这一切在多个层面上似乎都是错误的。有人有更好的主意吗?有没有一种方法可以强制 $c->uri_for生成以https开头的URI?

解决方案

如果您使用的是Catalyst 5.80008或更高版本,则设置 MyApp->config(using_frontend_proxy => 1);并简单地让您的代理设置 X-Forwarded-Port header 。对于5.80008之前的Catalyst版本,仍然设置 using_frontend_proxy,以便获得实际的client_ip,但是要生成正确的URI,请让您的Web服务器将环境变量 HTTPS设置为 ON

最佳答案

您可以尝试以下配置选项:

MyApp->config(using_frontend_proxy => 1);

Catalyst's documentation中有描述

关于perl - 有没有办法在Catalyst中强制$ c-> uri_for生成以https开头的URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com