最近,升级了朋友服务器 (LNMP),nginx 也跟着升级了,但是升级之后,发现,朋友的 ecshop 登录不了了。现象是,输入错误的密码,报告正常,输入正确的密码,就刷新一下,又回到了登录页面。
仔细观察,发现,页面是跳转到了index.php的,只是因为网速快,一下就又跳回来了,感觉只是刷新下,没有变化,呵呵100M宽带也能带来不少麻烦 ((*^__^*) 嘻嘻……)。
结果查看源码,发现了了问题是出在 https 安全登录检测上的。
在文件 includes/cls_ecshop.php 156 行左右有如下代码
/** * 获得 ECSHOP 当前环境的 HTTP 协议方式 * * @access public * * @return void */ function http() { return (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'http://' : 'http://'; }
因为检测 isset($_SERVER[‘HTTPS’]) 是 true 而且 里面的值是空,不为off;所以返回了 https
为什么 更新了 nginx 之后就这样呢,大家可以看下nginx的配置文件。
/etc/nginx/fastcgi_params
fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; #因为下面这项配置,导致了,https是一定会被设置的,如果你不想修改ecshop,又刚好有权限修改配置文件,可以把这个给注视了 fastcgi_param HTTPS $https; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
而朋友的ecshop不是在https上工作的,是在http上的,所以,就不停的跳到了登录页面,更详细信息的,可以再百度下。