nginx 反代端口

在平台服务器上部署了 GitLab 社区版。GitLab 的集成度很高,自带了不少东西,什么 PostgresSQL 啊,Redis 啊,还有 nginx,一锅端上来。同一台 Server 上还部署了内部的文档服务器,以及网盘服务器,这两个都是独立的 HTTP Server,由于 80 已经被 GitLab 占了,所以它们只好分别监听了其他端口。

为了在访问时省的大家记忆 IP 的痛苦,内部搭建了域名服务器,GitLab 的域名很直接,就是 git.cg.com 了,如此一来,访问文档平台和网盘,就得在地址栏里加敲端口号。既然 GitLab 集成了 nginx,那么使用 nginx 反代一下,使这两者可以启用独立域名并抛开端口,岂不美哉?

服务未迁移之前,记得又耳哥做过配置,但是会莫名其妙失效,这次做了些功课,连带此问题也一并查明并解决了。他的方式显然是直接修改了 nginx 的配置文件,却不清楚 GitLab 服务重启的话,nginx.conf 这个文件是会被重新生成的,真正要修改的是在 /etc/gitlab/gitlab.rb 文件中,请参见老夫上一篇博文。

在其中加入 nginx[‘custom_nginx_config’] = “include /var/opt/gitlab/nginx/conf/nginx-cg.com.conf;” 然后到正确的路径下开始编写反代配置(记得要执行 gitlab-ctl reconfigure),最终的内容见下。

按照我的理解来解释下这个配置。upstream 定义了上游真正的服务位置,server 设定了代理流向。这中间有过个小坑。看网上示例的时候,upstream 后的名称是可以比较随意地指定的,所以最开头我写的是 mindoc 而不是 docs.cg.com。这样选择的初衷有二,一个是觉得这是个内部名称,简短为佳,二是觉得最好不要和下面 server 块里的 server_name 相同,生怕引起 nginx 解析时会产生死循环。但是测试发现,当 mindoc 服务自己的服务端指示客户端进行重定向之后,会出现功能不正常(因为带了原始请求的 URL,也就是 http://mindoc/ 这样的),而改成当前这样的名字后一切正常。此处最主要的问题在于对 nginx 的各个配置块与其内部工作机制了解太浅。

然后执行 gitlab-ctl restart 就好了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注