【问题标题】:CakePHP Force SSL - env('HTTPS') always nullCakePHP 强制 SSL - env('HTTPS') 始终为空
【发布时间】:2012-02-04 11:08:03
【问题描述】:

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

最后我找到了this question,它似乎最接近工作;但是当我尝试加载我希望要求 SSL 的操作之一时,它也会在 Firefox 中导致错误:

页面未正确重定向

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

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

最后通过一堆调试,我发现env('HTTPS') 出于某种原因总是返回null$this->RequestHandler->isSsl();$_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();
}

__checkSSL() 和支持功能直接来自之前的链接问题(this one)。

页面在 HTTP 和 HTTPS 中加载正常,只要它不是我在 $secureItems 中列出的操作之一,只要我执行其中一项操作(HTTP 或 HTTPS),它就会无限重定向。

感谢任何帮助!

编辑

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

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

【问题讨论】:

    标签: php cakephp ssl https cakephp-1.3


    【解决方案1】:

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

    设置$_SERVER['HTTPS']等环境变量由Web服务器负责。

    如果这没有值,您只需查看 Web 服务器 - 在您的情况下为 nginx - 或中间的任何 Web 服务器(反向代理等)

    我对 nginx 上的 SSL 没有任何经验,但据我所知,您需要确保 nginx 发送 fastcgi_param HTTPS on 以获取端口 443 上的连接。

    添加这样的东西,也许:

    server {
        listen 443;
        server_name example.com;
    
        ssl on;
        fastcgi_param HTTPS on;
    
        # ...
    }
    

    搜索 "nginx fastcgi_param HTTPS" 以获取其他配置示例。

    我还找到了some other variables,它可能会在以后使用。

    【讨论】:

    • 太棒了,我正在使用 FastCGI,但我没有为此服务器设置 HTTPS,让我试试看。
    • 太棒了,效果很好!这绝对是问题所在。我刚才也找到了this question,也是一样的,也有帮助。
    猜你喜欢
    • 2021-12-22
    • 2014-12-20
    • 2012-02-02
    • 2013-10-09
    • 2023-04-10
    • 2017-08-22
    • 2021-07-14
    • 1970-01-01
    • 2015-12-05
    相关资源
    最近更新 更多