我们拥有什么:
通过Apache授权正常进行,但使用nginx作为函数mkhash:
function mkhash($username, $password, $salt = false) {
global $config;
if (! $salt) {
// Create some sort of salt for the hash
$salt = substr(base64_encode(sha1(rand(). time(), true). $config['cookies']['salt']), 0 , 15) ;
$generated_salt = true;
}
// Generate hash (method is not important as long as it's strong)
$hash = substr(base64_encode(md5($username . $config['cookies']['salt']. sha1($username . $password . $salt . ($config['mod']['lock_ip']? $_SERVER['REMOTE_ADDR']:''), true), true)), 0 , 20);
if (isset($generated_salt))
return array($hash, $salt);
else
return $hash;
}
未返回正确的值,授权失败。 验证如下:
if ($cookie[ 1 ]! == mkhash($cookie[0], $user['password'], $cookie[2] ) {
// Malformed cookies
destroyCookies();
mod_login();
exit;
}
为了成功,不应执行登录条件。
通过nginx返回的示例值(登录失败):
通过apache返回的示例值(登录成功):
Apache挂在端口82上(如果在该端口验证成功处理正确)。 Nginx本身只接受静态文件,动态内容取自Apache。可能是什么原因?
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
答案 0 :(得分:2)
在哈希生成中,您可以使用$_SERVER['REMOTE_ADDR']
这将始终设置为127.0.0.1。
您需要将其更改为$_SERVER['HTTP_X_REAL_IP']
以获取相同的IP地址(X-Real-IP是您在nginx.conf中定义的内容)