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

最近因为工作需要,需要在服务器上安装配置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了!

你可能感兴趣的:(使用nginx反向代理docker中的git和redmine)