使用nginx反向代理docker中的git和redmine

冬日裡的籬笆發表於2017-01-16

最近因為工作需要,需要在伺服器上安裝配置docker,並且在docker上安裝配置gitlab和redmine,並且使用nginx對他們進行反向代理,使得在公司區域網內客戶端瀏覽器上輸入http://serverip/gitlab和http://serverip/redmine就能很好的訪問gitlab和redmine。

          對於ubuntu上安裝docker和docker上安裝gitlab和redmine,我這裡就不描述了,我這裡主要講的是我在使用nginx反向代理gitlab和redmine時遇到的問題以及我的解決方案。

       我在docker上安裝gitlab和redmine時,分別publish 出來的對映埠就是10180和10083,起初在區域網內客戶端的瀏覽器上輸入http://serverip:10180和http://serverip:10083是能很好訪問他們的。我在使用nginx反向代理的時候,竊以為可以直接簡單粗暴的跳轉代理過去,於是,我剛開始的nginx的配置是這樣的:

http{

         ……

          server {

                      listen 80;

                      server_name  localhost;

                      location /gitlab {

                                 ……

                                 proxy_pass  http://serverip:10180;

                      }

                     location /redmine {

                                 ……

                                 proxy_pass  http://serverip:10083;

                      }

                   ……

          }​

}

在我對nginx的理解中和我工作的經驗中判斷,這是可行的。但是我每次在客戶端訪問時,他總是會出錯,總是報出404的網頁錯誤,在我檢視​nginx的錯誤日誌時發現,他每次都會跑到nginx的預設html目錄下去尋找gitlab目錄和redmine目錄,然而這兩個目錄是不存在的,所以網頁會報出404的錯誤。對於這個錯誤我使用了很多方法都無法很好的解決,使用的這些方法有:

(1)將proxy_pass變數改為proxy_pass  http://127.0.0.1:10180,proxy_pass http://127.0.0.1:10083,但是我發現這是很不穩定的,他每次只是去伺服器的快取中訪問相應頁面,如果快取中沒有相應的頁面的時候,他也一樣會報出404的錯誤​.

(2)​ 將proxy_set_header Host  $host設定為proxy_set_header Host  $host:$server_port發現也還是無法很好的跳轉代理。

最後,在一篇小文章中看到了一個虛擬ip的解決方案,於是就抱著嘗試的心態試了試,結果真的可以很好的訪問,檢視access日誌時發現訪問是正確的,這種配置是:

先將eth0虛擬一個ip地址,使用ifconfig eth0:1 yourip命令虛擬,我在更改nginx.conf時將server的配置如下:

 server {

                      listen yourip:80;

                      server_name  yourip;

                      location /gitlab {

                                 ……

                                 proxy_pass  http://serverip:10180;

                      }

                     location /redmine {

                                 ……

                                 proxy_pass  http://serverip:10083;

                      }

                   ……

          }​

在客戶端的瀏覽器中輸入http://yourip/gitlab和http://yourip/redmine就能很好的訪問gitlab和redmine了!

相關文章