CakePHP强制SSL-env(';HTTPS';)始终为空

CakePHP强制SSL-env(';HTTPS';)始终为空,php,cakephp,ssl,https,cakephp-1.3,Php,Cakephp,Ssl,Https,Cakephp 1.3,我尝试了很多不同的解决方案(,),但几乎所有的解决方案都会导致404或infinately循环 最后,我找到了最接近工作的方法;但当我尝试加载我希望在其上使用SSL的操作之一时,它也会在Firefox中导致错误: 页面未正确重定向 Firefox检测到服务器正在重定向请求 这个地址永远不会完整 此问题有时可能是由于禁用或拒绝 接受饼干 最后,通过一系列调试,我发现env('HTTPS')由于某种原因总是返回null(就像$this->RequestHandler->isSsl();和$\u SE

我尝试了很多不同的解决方案(,),但几乎所有的解决方案都会导致404或infinately循环

最后,我找到了最接近工作的方法;但当我尝试加载我希望在其上使用SSL的操作之一时,它也会在Firefox中导致错误:

页面未正确重定向

Firefox检测到服务器正在重定向请求 这个地址永远不会完整

此问题有时可能是由于禁用或拒绝 接受饼干

最后,通过一系列调试,我发现
env('HTTPS')
由于某种原因总是返回
null
(就像
$this->RequestHandler->isSsl();
$\u SERVER['HTTPS']
)即使在使用HTTPS连接时也是如此。我无法理解为什么会发生这种情况,因为我的浏览器报告我是SSL安全的,并且我的证书似乎安装正确

更多信息 nginx服务器

listen 80;
listen 443 ssl;

ssl_certificate     /etc/ssl/certs/domain.chain.crt;
ssl_certificate_key /etc/ssl/private/domain.key;
...
var $secureItems = array('login', 'edit', 'viewDocs');

function beforeFilter() {
    $this->Auth->allow('index', 'display');
    $this->set('loggedUser', $this->Auth->user());

    $this->__checkSSL();
}
应用程序控制器

listen 80;
listen 443 ssl;

ssl_certificate     /etc/ssl/certs/domain.chain.crt;
ssl_certificate_key /etc/ssl/private/domain.key;
...
var $secureItems = array('login', 'edit', 'viewDocs');

function beforeFilter() {
    $this->Auth->allow('index', 'display');
    $this->set('loggedUser', $this->Auth->user());

    $this->__checkSSL();
}
\uuu checkSSL()
和支持函数直接来自前面的链接问题()

只要不是我在
$secureItems
中列出的操作之一,页面在HTTP和HTTPS中的加载就可以正常进行,只要我转到其中一个操作(HTTP或HTTPS),它就会自动重定向

感谢您的帮助

编辑

我很确定这个问题是由
env('HTTPS')
始终为空引起的无限循环。由于其为null,因此检查条件始终为false,并使其重定向到HTTPS URL,即使其已在HTTPS URL上


有没有其他方法可以检查HTTPS,或者有人能告诉我为什么
env('HTTPS')
总是返回空值?

您的编辑是朝着正确方向迈出的一步

由web服务器设置环境变量,例如
$\u server['HTTPS']

如果没有值,则只需查看web服务器(在您的示例中为nginx)或中间的任何web服务器(反向代理等)

我没有任何在nginx上使用SSL的经验,但从我收集的信息来看,您需要确保nginx正在为端口443上的连接发送
fastcgi_param HTTPS

也许可以添加这样的内容:

server {
    listen 443;
    server_name example.com;

    ssl on;
    fastcgi_param HTTPS on;

    # ...
}
搜索其他配置示例


我还发现,这可能会在以后的工作中发挥作用。

太棒了,我正在使用FastCGI,但我没有为此服务器设置HTTPS,让我试试。太棒了,效果很好!这绝对是问题所在。我刚才也发现这是同样的事情,它也有帮助。