2013-05-03 71 views
1

我想使用nginx作爲兩個Tomcat實例的反向代理,每個都在自己的VM中。 問題是:當我開始添加一個文件夾路徑到proxy_pass參數,我得到一個310錯誤:太多的重定向。nginx - > Tomcat與文件夾路徑 - 太多重定向

我在做什麼錯了?任何建議表示讚賞。 第一臺服務器工作正常,但如前所述,第二個,與添加的文件夾路徑不會工作。

這裏是我的nginx的配置:

server { 
    listen 80; 
    server_name oc.domain.tld; 
    location/{ 

     proxy_pass http://172.16.81.73; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 
} 

server { 
    listen 80; 
    server_name test.domain.tld; 
    location/{ 
     proxy_pass http://172.16.75.99/OpenClinica/; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

server { 
    listen  80 default_server; 
    server_name _; 
    return  444; 
} 

編輯:有沒有在時刻(適用於Tomcat & nginx的)

啓用SSL EDIT2:我重寫日誌是空的(如果我開機,對公告級別的調試)
我剛剛發現我的nginx的日誌(GET此行... /登錄/註冊線重複約20次:

190.215.166.212 - - [04/May/2013:22:29:21 -0400] "GET /OpenClinica/pages/login/login HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31" 
190.215.166.212 - - [04/May/2013:22:29:21 -0400] "GET /OpenClinica/pages/login/login HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31" 
190.215.166.212 - - [04/May/2013:22:29:25 -0400] "-" 400 0 "-" "-" 
190.215.166.212 - - [04/May/2013:22:29:25 -0400] "-" 400 0 "-" "-" 

看來,該nginx請求....登錄/登錄在一個循環。所以問題可能在tomcat方面?

+0

不確定它是否相關,但你的全部服務器應該是第一個而不是最後一個,不需要有一個server_name設置,並且應該返回標準的404錯誤,而不是標準代碼的奇怪自定義444錯誤。 – Danack 2013-05-03 19:31:35

+0

@Danack刪除默認的服務器行不會改變行爲,但thx爲您的評論。 – elnin0 2013-05-05 02:43:48

回答

0

我認爲可能發生的情況是,重定向發生在Tomcat端,而不是Nginx端,所以我想你可能沒有給我們足夠的信息來解決這個問題。

但是你可以很容易地通過enabling the rewrite log爲Nginx是由加入調查這個問題:

rewrite_log on; 

你會那麼能夠看到它到底是什麼重新寫,如果/在那裏陷入一個循環,如果它在Nginx方面。

編輯

I just discovered this lines in my nginx log(the GET .../login/login line is repeated for about 20 times: GET /OpenClinica/pages/login/login GET /OpenClinica/pages/login/login

這肯定聽起來像重定向裏面的Tomcat純粹發生,而不是它是一個內部Nginx的重定向作爲被他們之間傳遞的請求正確,但你的瀏覽器可以看到,它的被一直轉到同一個地方。

我不能確定的具體細節沒有看到所有的相關代碼,但它看起來像一些代碼是做等價的:

  1. 登錄或在登錄頁面上的用戶/ pages/login/login?
  2. 都能跟得上 - 在/頁/登錄/註冊

他們重定向到登錄頁面,因爲Nginx的是進行代理請求:

http://172.16.75.99/OpenClinica/; 

它總是添加OpenClinica到URL的開頭這樣Java應用程序認爲它從來不是/pages/login/login,所以它一直在重定向。

您可以通過使Java重定向變得更聰明或通過更改代理設置來刪除OpenClinica路徑來解決此問題,即

proxy_pass http://172.16.75.99 

沒有結尾的斜槓可以使URL路徑完全按用戶請求傳遞到Tomcat服務器。

(您可能還可以通過設置appBase路徑Tomcat中的應用程序來設置這一點,所以它知道預期的URL路徑開始OpenClinica - 但我不是一個Tomcat專家)

+0

感謝您的評論,當我打開調試注意到級別時,我的重寫日誌爲空,並啓用重寫日誌。我在最初的帖子中添加了更多信息。 – elnin0 2013-05-05 02:38:46

+0

「我的重寫日誌是空的」這很好 - 它表明Nginx沒有在重寫。這並不令人感到意外,因爲在您發佈的配置中沒有任何內容正在重寫。 – Danack 2013-05-05 13:10:15

+0

Thx爲解釋。現在我試圖用多個虛擬主機來配置Tomcat。 (這是非常可怕的和相當不好的記錄) – elnin0 2013-05-05 21:15:28