<?php
//http转化为https
if ($_SERVER["HTTPS"] <> "on")
{
$xredir="https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
header("Location: ".$xredir);
}
?>
用此代码会出现死循环
我的应用
SSL CDN加速>>>>>SSL七层负载均衡>>>>>内部nginx没有SSL
浮在均衡器配置443转向内部80
并且负载均衡器上也配置有证书
cdn上也有证书
如何做http跳转https啊
如果在cdn上开启全面ssl即cdn访问源网站使用http模式那么上面的代码就行不通了会死循环因为php判断的是内部服务器的$_SERVER["HTTPS"。判断结果是http那么跳转到https 但是cdn上永远会使用http访问源网站
如果开启全面ssl
即 cdn开启ssl ,负载均衡器开启ssl 负载均衡器到内部服务器也启用ssl 这样三层加密速度慢不说 我测试了一下好像也会重复定向
我画一下请求过程
HTTP
CDN 80 >>>> 负载均衡 80>>>>> 内部服务器 80 完全正常
HTTPS模式
用户>>>>>CDN 443 >>>> 负载均衡 80>>>>> 内部服务器 80 怎么做http跳转到https
用户 >>>>>CDN 443 >>>> 负载均衡 443>>>>> 内部服务器 80 怎么做http跳转到https
用户 >>>>>CDN 443 >>>> 负载均衡 443>>>>> 内部服务器 443 怎么做http跳转到https
如果不做跳转上面3钟HTTPS模式访问都正常
但是要做跳转都会出现重复定向 怎么破啊大神们看看
而且负载均衡器好像也不支持SNI
1
holinhot OP 或者负载均衡模式从http改到tcp
|
2
holinhot OP |
3
msg7086 2015-05-16 15:46:13 +08:00
你负载均衡的时候给后端pass一个header不就好了
|
4
Septembers 2015-05-16 15:55:25 +08:00
前端检查下完事
if (location.protocol === 'http:') { location.protocol = 'https:'; } |
5
b0x 2015-05-16 17:18:24 +08:00
可以在服务器上完成的事就不要用编程语言来做了,一条rewrite规则完事
|
6
wy315700 2015-05-16 17:19:21 +08:00
负载均衡是用的HTTP访问的服务器,,没把scheme传进来
|
7
flowfire 2015-05-16 19:23:20 +08:00
rewrite。。。。再不行就前端检测吧
|
8
chinassl 2015-05-16 21:04:12 +08:00
直接用301不能搞定?
|
10
liuhaotian 2015-05-16 21:10:00 +08:00
|
12
holinhot OP @Septembers 还是前端检测下吧。
|
13
holinhot OP @Septembers
<script language="JavaScript"> function check_secure() { var httpsRE = /^https/i; if (!window.location.origin.match(httpsRE)) { window.location = "https://" + window.location.hostname + window.location.pathname + window.location.search; } } check_secure(); </script> 反正就一个简单的页面 |
14
Septembers 2015-05-16 23:05:07 +08:00 via Android
@holinhot 你写复杂了 我给出的例程应该是可以用的
|
15
holinhot OP @Septembers 试了下你的 好像用不跳转
|
16
minongbang 2015-05-17 02:11:07 +08:00
估计很难.
|
17
b0x 2015-05-17 03:16:15 +08:00
@holinhot .. 前面复杂的流程不讲...光讨论内部服务器的http转https,你同时监听80和443不可以么- -,到80的请求重定向到https不就行了.
你用php的header()跳转,和用server的rewrite跳转,有啥本质区别....一定要用php是有多想不开 |
18
killerv 2015-05-17 08:33:56 +08:00 via Android
楼上+1,rewrite很简单的事情为什么非要PHP?
|
19
RIcter 2015-05-17 08:34:31 +08:00 via iPhone
@liuhaotian 跳轉https在前端並沒有什麼大礙。
|
20
liuhaotian 2015-05-17 12:39:40 +08:00 via iPhone
@RIcter 这样难道不就意味着并不是强制 https吗
|
21
b0x 2015-05-17 15:02:01 +08:00
前端来做http跳转 https 的意义何在- -...
也就是可跳可不跳了 |
22
hostker 2015-05-17 19:56:28 +08:00 1
发现被人at到了,我们的做法是CDN前端遇到https在回源时候加了一个名叫KERSSL的HTTP Header,值是on,后端PHP判断有没有这个Header就可以准确判断了。其实我们的PHP环境还配合自己的前端进行了修改,https请求PHP读到的端口是443,而且$_SERVER['HTTPS']是on(这句是废话当我打广告吧)。楼主可以参考一下我们,前提是楼主有办法给CDN的https加特殊头部。
另外楼上各位说一条rewrite解决的,都没仔细看。 |