zoukankan      html  css  js  c++  java
  • 使用https,$_SERVER['HTTPS']却不等于on?

    目前有两台服务器,都是http和https协议共存。

    但是部分程序遇到一些问题,因为PHP中有根据$_SERVER['HTTPS']来设置环境常量。

    一台服务器可以拿到值为on,另外一台却是NULL

    一步步排查后才知道,这是个 fastcgi 配置的问题!

    解决方法的办法就是Nginx配置加上:

    fastcgi_param HTTPS $https if_not_empty;

    完整配置如下:

    location ~ .php$ {
     fastcgi_pass    127.0.0.1:9012;
     fastcgi_connect_timeout 300;
     fastcgi_send_timeout 300;
     fastcgi_read_timeout 300;
     fastcgi_buffer_size 32k;
     fastcgi_buffers 8 32k;
     fastcgi_split_path_info ^(.+.php)(/.*)$;
     include fastcgi_params;
     fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param HTTPS $https if_not_empty;
    }

    很多人认为使用

    fastcgi_param HTTPS on;

    这样是没错,但要注意,按我理解,这样也会导致一个问题。因为这种方式属于写死环境变量,在此环境变量生效的区域,服务器无法判断是http请求还是https请求。

    最好的答案就(参考下面 nginx 官方的链接)

    fastcgi_param HTTPS $https if_not_empty;

    有 https 协议时才自动使用 https on,否则忽略这个参数。

    • $https:如果链接是 SSL 就返回 ON,否则返回空字符串。
    • if_not_empty:当参数有值时才传递到服务器

    注意:这个 if_not_empty 额外参数只适合 Nginx 1.1.11 之后的版本

  • 相关阅读:
    权限认证机制
    在线工具统计
    Redis内存模型
    Redis数据结构
    开发工具清单
    MySql数据库优化、备份和恢复
    MySql 性能优化神器 Explain
    ASP.NET Core 3.1 迁移到 NET 5.0
    MySql Sql语句
    DTU的通讯工作模式有哪些
  • 原文地址:https://www.cnblogs.com/tianakong/p/13047955.html
Copyright © 2011-2022 走看看