我有一个运行在Elastic Load Balancer(ELB)后面的Perl HTTPS应用程序。 HTBPS由ELB终止,ELB然后将请求作为HTTP转发给我的实例。使用AWS时,CGI自引用URL使用HTTP而不是HTTPS ELB
问题在于,因为实例本身是通过HTTP访问的,所以当我使用CGI模块生成自引用URL时,它们错误地使用HTTP而不是HTTPS,因此表单POST失败。
GET请求正常,因为它们被重定向,但是任何使用POST的操作都不起作用。
如果我检查我的CGI环境变量,我有以下...
HTTP_X_FORWARDED_PORT = 443
HTTP_X_FORWARDED_PROTO = https
REQUEST_SCHEME = http
SERVER_PROTOCOL = HTTP/1.1
的CGI模块使用可能或REQUEST_SCHEME
以SERVER_PROTOCOL
确定该网址应该使用http://
。
有没有什么办法可以在Apache或NGINX级别上使用环境变量来说服CGI该站点实际上是HTTPS?
您可以举一个使用CGI函数创建自引用URL的Perl代码示例吗? – simbabque
它使用'SERVER_PROTOCOL'。 https://metacpan.org/source/LEEJO/CGI-4.32/lib/CGI.pm#L3157 - 如果它总是在https环境中运行,那么您可以继承CGI或猴子补丁,该函数始终返回“https” 。 – simbabque