GitLab Mattermost 中的 400 Bad Request

400 Bad Request in GitLab's Mattermost

GitLab 8.9.4 运行通过端口 802 在 Ubuntu Server 16.04 虚拟机中正常运行(综合): external_url 'http://gitlab_url:802'

我在 /etc/gitlab/gitlab.rb:
中通过这一行启用了 Mattermost mattermost_external_url 'http://gitlab_url:8065'

我的路由器也开了8065端口。 但这是我尝试在浏览器中访问 gitlab_url:8065 时得到的结果:

400 Bad Request
Request Header Or Cookie Too Large
nginx

guide 中,我跳过了 "Running GitLab Mattermost on its own server" 部分,因为如果我可以使用嵌入式版本,它对我来说没问题。

阅读"Manually (re)authorising GitLab Mattermost with GitLab"部分,我转到Admin Area中的Applications部分,我发现了一个"Mattermost"应用程序。 那里的两个url是错误的(可能是因为我第一次设置了一个虚拟mattermost_external_url),所以我手动更正了它们。我不确定我是否尝试了 with/without 端口或两者。

我尝试删除 GitLab 中的 Mattermost 应用程序并重新开始 Mattermost 配置。我也尝试重置 Mattermost(做 this)但我总是遇到同样的错误。

我也试过在/etc/gitlab/gitlab.rb中设置这个:

mattermost['gitlab_enable'] = true
mattermost['gitlab_secret'] = "***"
mattermost['gitlab_id'] = "***"
mattermost['gitlab_scope'] = ""
mattermost['gitlab_auth_endpoint'] = "http://gitlab_url:8065/oauth/authorize"
mattermost['gitlab_token_endpoint'] = "http://gitlab_url:8065/oauth/token"
mattermost['gitlab_user_api_endpoint'] = "http://gitlab_url:8065/api/v3/user"

我启用了日志:
mattermost['log_file_directory'] = '/var/log/gitlab/mattermost'

cat /var/log/gitlab/mattermost/mattermost.log基本上告诉我:

Automatic database upgrade failed.!!!

但这是我第一次尝试设置 Mattermost!

另请注意,每次我 运行 sudo gitlab-ctl reconfigure(我在每次修改后调用它)都会得到一个 laaarge 输出。

(我发了同样的问题here

DJ Mountney gave the answer here:

The Mattermost service runs by default on port 8065 (behind nginx), the mattermost external url setting is telling nginx what port to listen on for mattermost.

If you set the two to the same port, only one will get it. In your case it was nginx, if you run sudo gitlab-ctl tail mattermost you will likely see that it has failed to bind to the port.

If you change the mattermost_external_url to a different port, it should start working.

的确,改变最重要的端口解决了它。即:

mattermost_external_url 'http://gitlab_url:8066'

还要注意 gitlab_auth_endpointgitlab_token_endpointgitlab_user_api_endpoint url 应该指向 gitlab 应用程序 + 端口(802 在我的例子中,而不是 8066) :

mattermost['gitlab_auth_endpoint'] = "http://gitlab_url:802/oauth/authorize"
mattermost['gitlab_token_endpoint'] = "http://gitlab_url:802/oauth/token"
mattermost['gitlab_user_api_endpoint'] = "http://gitlab_url:802/api/v3/user"