2013-11-03 165 views
0

我們有什麼:Nginx的proxy_pass餅乾

  • 一堆的Apache Nginx的。
  • 論壇Tinyboard。

通過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的返回值(登錄失敗):

  • cookie0:管理員
  • COOKIE1:Ib37H5U7hCi6Br9M09V
  • COOKIE2:Nn2wUxlnirvgzkn
  • mkhash:fN1jv3t9ccThde0Kp30h

實施例通過apache返回值(登錄成功):

  • cookie0:管理員
  • COOKIE1:SgaMoQ07upLoz9Q7Wdz6
  • COOKIE2:Zp6BQ2b20Jsh 1R
  • mkhash:SgaMoQ07upLoz9Q7Wdz6

阿帕奇掛在端口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; 
    } 
+1

這可能是不相關的PHP代碼,但您的服務器組態。嘗試使用echo或類似來調試cookie值,以確保它們通過nginx傳遞,並且如果它們沒有發佈您的nginx proxy_pass配置 – foibs

回答

2

在你的哈希生成你利用$_SERVER['REMOTE_ADDR']

這將始終爲127.0.0.1。

你需要將其更改爲$_SERVER['HTTP_X_REAL_IP']獲得相同的IP地址(X-實時IP是您已在nginx.conf定義了什麼)