我在网站上有一个ajax请求,它有如下代码:
"id": {
"$t": "FULLURL"
},
… blablabla …
"title": {
"type": "text",
"$t": "test1"
},
… blablabla …
"gsx$articletitle": {
"$t": "Viva la Grischa"
}
现在它在实时网站上运行良好。它有一个像https://example.com这样的域名。现在我必须将此站点移动到负载平衡服务器。所以我创建了像https://ww.example.com这样的域,并将该域与负载均衡器服务器链接起来。但现在使用 http 而不是 https 发送ajax请求。
我已检查documentation,并说明要使用架构(例如http,https)。如果为空,则将使用用于当前请求的架构。所以假设我使用这样的网址访问了网站:https://ww.example.com/index.php?r=controller/action那么它不应该接受https请求吗?
答案 0 :(得分:1)
您的负载均衡器可能配置错误,无法传递HTTPS请求。 您的负载均衡器可能会收到HTTPS请求,但会通过HTTP将它们传递给您的应用程序服务器。因此,来自应用程序服务器的观点的请求是HTTP请求。
确定架构的函数是CHttpRequest::getIsSecureConnection
,如下所示:
public function getIsSecureConnection() {
return isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'],'on')===0 || $_SERVER['HTTPS']==1)
|| isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'],'https')===0;
}
要修复它,请确保您的负载均衡器在将请求传递给应用程序服务器时插入HTTP_X_FORWARDED_PROTO
标头。
答案 1 :(得分:0)
您可以检查请求是否为secureRequest
$request = Yii::$app->request;
if (!$request->isSecureConnection) {
// use http
} else {
// force the use of https
}