2017-02-20 162 views
0

我們有2個帶有NuGet代理存儲庫的Nexus SSO服務器。一個在我們的專用網絡環境(v3.0.0)中,另一個在具有互聯網訪問的DMZ(v3.0.1)內。SonaType Nexus NuGet代理服務器404轉發到另一個Nexus時

請求首先發送到私有Nexus服務器,該請求將請求轉發到DMZ中的Nexus服務器,然後該請求轉發到外部nuget.org存儲庫。所以基本上:

客戶端 - >私人代理 - > DMZ代理 - >互聯網。

使用此方法,客戶端得到的錯誤無法找到包。從私人代理服務器上的日誌中,我發現它將請求轉發給dmz代理服務器,如 http://dmzproxy/repository/NuGetRepository/FindPackagesById?id='angularjs' 但收到404未找到。

解決該問題,我試圖繞過直接從該服務器運行nuget.exe私人代理,具體做法是:

客戶端 - > DMZ代理 - >互聯網

這種方法的實際工作,並使用nuget.exe與-Verbosity詳細的,我可以看到,nuget.exe發送到DMZ代理一個略有不同的要求比私人代理的作用:

http://dmzproxy/repository/NuGetRepository/FindPackagesById()?id=「angularjs」

的COM通過Nexus發送的請求,你可以看到不同之處在於FindPackagesById之後的圓括號()。因此,爲了進行測試,我在瀏覽器窗口中複製/粘貼了兩個請求URL,實際上,沒有括號,我得到一個404,帶圓括號的我得到一個包提要頁面。

因此,當服務於NuGet時,Nexus可以使用圓括號,但在將請求轉發給另一個Nexus服務器時,似乎不適用它,從而導致404響應。

回答

0

經過進一步測試並與SonaType支持聯繫後,我發現Nexus 3.0.0和3.0.1確實不支持FindPackagesById請求?沒有括號,即使這正是Nexus本身轉發請求的方式。

最新的Nexus版本(目前是3.2.1)雖然仍然轉發沒有括號的請求,但確實支持這兩種方式。所以,將所有Nexus服務器更新到最新版本應該可以解決這個問題。

在這個特定的組織內,更新說起來容易做起來難。因此,在此期間,我使用重寫規則配置了一個反向代理,該代理將私有Nexus服務器的請求轉發給DMZ中的Nexus服務器,並重寫「FindPackagesById?」到「FindPackagesById()?」。在更新所有Nexus服務器之前,這不是理想的情況,而是臨時工作的解決方案。