php https server_使用https,$_SERVER['HTTPS']却不等于on?

本文介绍了在两台服务器上遇到的一个问题,即PHP通过$_SERVER['HTTPS']获取HTTPS状态时,一台返回'on',另一台返回NULL。问题根源在于fastcgi配置。解决方案是在Nginx配置中添加`fastcgi_param HTTPS $https if_not_empty;`。这个配置使得只有在实际存在HTTPS协议时才会设置HTTPSON,否则忽略。注意,`if_not_empty`参数适用于Nginx 1.1.11及以上版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

fastcgi_param HTTPS $https if_not_empty;

完整配置如下:

location ~ .*\.(php|php5)?$

{

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_param HTTPS $https if_not_empty;

fastcgi_index index.php;

include fastcgi_params;

}

很多人认为使用

fastcgi_param HTTPS on;

这样是没错啦,不过强迫使用这个参数,不太有效哦!

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

fastcgi_param HTTPS $https if_not_empty;

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

$https:如果链接是 SSL 就返回 ON,否则返回空字符串。

if_not_empty:当参数有值时才传递到服务器

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

参考地址:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值