当前位置: 首页 > 编程笔记 >

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

祁嘉木
2023-03-14
本文向大家介绍使用https,$_SERVER['HTTPS']却不等于on?,包括了使用https,$_SERVER['HTTPS']却不等于on?的使用技巧和注意事项,需要的朋友参考一下

目前有两台服务器,都是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 之后的版本

 

参考地址:

  1. Nginx:普通的HTTP请求被发送到HTTPS端口
  2. FastCGI application behind NGINX is unable to detect that HTTPS secure connection is used
 类似资料:
  • 问题内容: 我在线上看过很多教程,说您需要检查服务器是否通过HTTPS进行了安全连接。我的问题是,在我使用的某些服务器上,这是一个未定义的变量,导致错误。我可以检查是否应该定义另一个变量? 为了清楚起见,我目前正在使用以下代码来确定它是否为HTTPS连接: 问题答案: 即使未定义,这也应该始终有效 : 该代码与IIS兼容。 : 1)如果通过HTTPS协议查询脚本,则设置为非空值。 2)请注意,当将

  • 使用 HTTPS HTTPS 即 HTTP over SSL/TLS,是 HTTP 的安全版本,在 HTTP 上加了一层处理加密信息的模块。 SSL/TLS 全称安全传输层协议 Transport Layer Security, 是介于 TCP 和 HTTP 之间的一层安全协议,不影响原有的 TCP 协议和 HTTP 协议,所以使用 HTTPS 基本上不需要对 HTTP 页面进行太多的改造。浏览器

  • 我有一个Spring Boot 1.3.0应用程序,其中包含Spring Security OAuth,作为一种SSO集成。 问题是,应用程序运行在非SSL环境中,负载平衡器(F5)后面有一个非标准端口,强制使用SSL,OAuth提供程序要求将所有重定向URL注册为https,但Spring OAuth客户端(使用@EnableOAuthso自动配置)将仅使用以下URL重定向到OAuth提供程序。

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 我有项目,我在ubuntu服务器上安装了SSL证书。我已经做了我发现的每一个解决方案,但每次打开页面时仍然会收到这条消息。 以下是我为强制Laravel使用https所做的更改: 我变了。htaccess在我的公用文件夹中,并添加了以下行 2-应用程序内- 3-我创建了php artisan make:middleware ForceSSL,并将以下代码添加到句柄函数中 在内核中。php 在里面e

  • 问题内容: 我尝试像这样在python中使用https代理: 是从文件读取的代理,格式为ip:port。我在浏览器中检查了这个https代理,它可以工作。但是在python中,此代码挂起了几秒钟,然后出现异常: 我尝试使用socks5代理,它适用于安装了PySocks的socks5代理。但是对于https我有这个例外,有人可以帮我吗 问题答案: 为指定代理列表时,密钥是协议,值是domain /