gitlab docker nginx反向代理到子路径

时间:2018-11-14 00:16:44

标签: docker nginx gitlab

我正在尝试将nginx设置为反向代理,以将apps.mycompany.com/gitlab路由到与nginx在同一服务器上运行的gitlab docker容器:

nginx配置具有:

location /gitlab/ {
    proxy_pass     http://127.0.0.1:3000/;
    proxy_redirect default;
}

第一个http调用apps.mycompany.com/gitlab进行得很顺利,但html内的所有href(例如href:"/assets/...")基本上仍路由到apps.mycompany.com/assets/...而不是apps.mycompany.com/gitlab/assets/...

因此找不到资产和CSS文件。呈现的页面具有结构但没有样式,我什至不知道还有什么不起作用。

我对nginx的了解还不足以知道我在做什么错

2 个答案:

答案 0 :(得分:2)

NGINX

在您的nginx配置中,添加proxy_set_header选项并按如下所示更改proxy_pass

location /gitlab/ {
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:3000/gitlab/;
}

GITLAB

您要查找的是GitLab中的相对URL 配置。

如果您的GitLab版本为 8.5 或更高版本,请根据您的GitLab部署类型执行以下操作之一:

DOCKER-COMPOSE部署

将环境变量external_url添加到您的docker-compose.yml文件,示例文件中:

gitlab:
    image: 'gitlab/gitlab-ce:11.5.2-ce.0'
    restart: always
    environment:
            GITLAB_OMNIBUS_CONFIG: |
                    external_url 'http://apps.mycompany.com/gitlab/'
    ports:
            - '3000:80'

然后重新启动GitLab泊坞窗:

docker-compose up -d

DOCKER部署

如果您不使用docker-compose(我强烈推荐),则可以向external_url命令中添加docker run选项,执行示例:

docker run --detach --publish 3000:80 --restart always --env GITLAB_OMNIBUS_CONFIG="external_url 'http://apps.mycompany.com/gitlab/'" gitlab/gitlab-ce:11.5.2-ce.0

GitLab配置文件更新-可以用于各种部署

另一种方法是直接修改GitLab配置文件,但我建议对于独立的GitLab安装而不是Docker部署。

/etc/gitlab/gitlab.rb中修改GitLab配置,将external_url的值更改为以下内容:

external_url "http://apps.mycompany.com/gitlab"

此外,您还必须重新配置GitLab:

sudo gitlab-ctl reconfigure

然后重新启动服务:

sudo gitlab-ctl restart

您可以在official documentation中找到有关GitLab配置的更多详细信息。

我建议您还检查docker部署official documentation中的GitLab。

请注意,Omnibus GitLab中的相对URL支持是实验性,并且是在8.5版中引入的(对于较早的版本,您需要从源代码doc进行编译)。

答案 1 :(得分:0)

我的 https gitlab 设置:

docker-compose.yml:

web:
  image: 'gitlab/gitlab-ee:latest'
  restart: always
  hostname: 'gitlab.yourdomain.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://gitlab.yourdomain.com'
      gitlab_rails['gitlab_shell_ssh_port'] = 9122
      nginx['enable'] = true
      nginx['listen_port'] = 9180
      nginx['listen_https'] = false
  ports:
    - '9180:9180'
    - '9122:22'
  volumes:
    - '/opt/gitlab/config:/etc/gitlab'
    - '/opt/gitlab/logs:/var/log/gitlab'
    - '/opt/gitlab/data:/var/opt/gitlab'

nginx gitlab.conf:

server {
  listen       443;
  server_name  gitlab.yourdomain.com;

  location / {
    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_pass http://127.0.0.1:9180;
  }
}