2015-05-27 53 views
1

我正在運行Nginx,它被配置爲允許我訪問另一臺可用作反向代理的服務器上的多個資源。例如,Adminer通過反向代理登錄

main server:http://example.com 
slave: http://example.com/slave 
adminer on slave: http://example.com/slave/admin/adminer.php 

到目前爲止一切都正常。我在Adminer中輸入我的數據庫用戶名和密碼,麻煩就開始了。檢查Adminer登錄後返回的標頭,我注意到它發回了一個

Location:/admin/adminer.php?username=user 

頭。這是麻煩的根源。在我的瀏覽器上,自然而然,它被解釋爲相對於當前服務器而不是反向代理。在找到一個位置標題的地方後,我嘗試了黑客的代碼,但是它只是停止了它的蹤跡。

我該如何防止這種情況發生?我曾考慮過在Nginx上運行一個Lua腳本來檢查頭文件並將其替換掉,但是這讓我感到不知所措,即使我能夠運行它,我也會讓我的服務器執行大量不必要的工作。

我非常感謝任何幫助。


編輯

探索這個問題後有點多,我開始認爲adminer可能不是做太多的錯誤。它實際上使用$ _SERVER ['REQUEST_URI']值來構造位置標題,而這恰好來自/admin/adminer.php。我注意到referer,$ _SERVER ['HTTP_REFERRER']具有完整的原始請求路徑http://example.com/slave/admin/adminer.php。所以解決辦法是發回地址/slave/admin/adminer.php?username=user

簡單嗎?那麼,問題是在我的設置/slave/將是可變的,所以我需要在代碼中解決它。我可以用PHP的一個地方很容易地做到這一點,但我想知道......當然Nginx提供了一個更簡單的替代方案嗎?

我或許應該提

  • 的Ubuntu 14.04在兩個主&從
  • Nginx的1.6.2安裝小瓶易於得到的nginx-演員(Lua中模塊啓用味)
  • PHP5-FPM 5.5 0.9
  • MariaDB的10
  • Adminer 4.2.1

回答

1

我遇到了同樣的問題,我想出的最簡單的解決方法是修補adminer PHP腳本。我只是在adminer.php這樣開始硬編碼$_SERVER["REQUEST_URI"]

--- adminer.php 2015-10-22 12:31:18.549068888 +0300 
+++ adminer.php 2015-10-22 12:31:40.097069554 +0300 
@@ -1,4 +1,5 @@ 
<?php 
+$_SERVER["REQUEST_URI"] = "/slave/admin/adminer.php"; 
/** Adminer - Compact database management 
* @link http://www.adminer.org/ 
* @author Jakub Vrana, http://www.vrana.cz/ 

如果你把上面的一個名爲fix你可以簡單地包含adminer.php的目錄中運行 patch < /path/to/fix你應該得到的正常工作版本。如果需要,運行patch -R < /path/to/fix將恢復原始行爲。


要了解修補程序文件的結構,請閱讀this SO thread

+0

非常感謝你的這個提示。這將成爲一種拯救生命的方式。 – DroidOS