从外部 IP 地址访问时 chef-server-webui 会话不起作用

从外部 IP 地址访问时 chef-server-webui 会话不起作用

我已chef-server在 Ubuntu 12.10 系统上使用.deb该版本的官方软件包进行了安装。安装完成后,我运行

chef-server-ctl test

报告成功、0失败。

该服务器(Amazon EC2 实例)有 1 个网络接口,已为其分配一个内部地址。假设 IP 地址为10.223.92.58hostname -f返回如下内容:

ip-10-223-92-58.eu-west-1.compute.internal

53.242.31.23但是,AWS EC2 允许使用或 DNS从互联网访问服务器ec2-53-242-31-23.eu-west-1.compute.amazonaws.com

为了允许通过公共 DNS 名称进行访问,我添加了以下几行/etc/chef-server/chef-server.rb

lb[:enable] = "false"
lb[:web_ui_fqdn] = "ec2-53-242-31-23.eu-west-1.compute.amazonaws.com"

nginx[:server_name] = "ec2-53-242-31-23.eu-west-1.compute.amazonaws.com"
nginx[:url] = "https://ec2-53-242-31-23.eu-west-1.compute.amazonaws.com"
nginx[:enable_non_ssl] = "true"

我可以使用访问服务器https://ec2-53-242-31-23.eu-west-1.compute.amazonaws.com并到达登录页面。登录页面会将我(登录成功后)重定向到用户编辑页面,以便更改我的密码。(这是设计使然)。

问题:

重定向到用户编辑页面将不起作用,因为用户控制器(或每个其他控制器)会抱怨不存在会话并一次又一次地将我重定向到登录页面。如果我尝试从其本地 DNS 域名或 IP 访问该页面,则不存在此问题。我是否缺少一些配置值?

答案1

我在 Azure 上使用 Chef,但我相信我已经找到了正确的设置。

@hek2mgl 非常接近,但是每次重新配置时他的方法都会被覆盖,我认为这不切实际。

在您的 /etc/chef-server/chef-server.rb 文件中,添加以下行:

chef_server_webui['cookie_domain'] = 'FQDN'

其中“FQDN”是您的完全限定域名“myserver.mydomain.net”等。

保存此文件后,$ sudo chef-server-ctl reconfigure

完成后,如果您向上滚动一点,在“Recipe: chef-server::default”下,您会看到它加载了您的设置:

...
"session_key": "_sandbox_session",
"cookie_domain": "all",
"cookie_domain": "myserver.mydomain.net",
...

现在使用 myserver.mydomain.net 导航到 WebUI 即可登录。

答案2

我刚刚意识到了这个问题,所以我想我应该加入讨论。我是 Chef 的工程师,我研究过这个问题。

对此,接受的答案是解决此问题的正确方法。请注意,遵循接受的答案还将允许您重新配置并保持设置不变,因为这是另一个答案中的问题。您不需要进行 hek2mgl 尝试的所有更改。设置 cookie 域就足够了。

在我们旧的票务系统里可以找到关于我的调查的全部细节:https://tickets.opscode.com/browse/CHEF-5301

此问题已在我们的 GitHub 问题中提出:https://github.com/opscode/chef/issues/1780

如果有人对如何配置服务器以避免这种情况有任何建议,我将不胜感激,如果你能就 GitHub 问题发表意见,因为我目前还不了解这个问题的确切原因。这似乎是 Rails、cookie 域和现代浏览器之间的奇怪交互(目前这个问题似乎只影响 Chrome 和 Firefox,而不是 Safari 或 IE)。如果你阅读我提供的链接,你可以看到我所知道的所有细节。

谢谢。

答案3

我遇到了同样的问题,我通过将弹性 IP 放入我的 /etc/hosts 中并使用与我的服务器主机名和我在 DNS 中使用的名称匹配的名称条目来解决该问题,然后运行 ​​chef-server-ctl reconfigure。

编辑:这个解决方案破坏了我的食谱上传,我不得不重新学习 AWS 的古老教训,那就是私人的您必须将 IP 放入 /etc/hosts 中。重新配置后,两个问题均已解决。

答案4

最后我终于解决了这个问题。它与 chef-server-webui 应用程序的会话设置有关。

我必须ec2-53-242-31-23.eu-west-1.compute.amazonaws.com在文件中明确指定会话域:

/opt/chef-server/embedded/service/chef-server-webui/config/initializers/session_store.rb

ChefServerWebui::Application.config.session_store :cookie_store, :key => '_sandbox_session', :domain => 'ec2-53-242-31-23.eu-west-1.compute.amazonaws.com'

仅使用:domain => all原始文件中的类似内容是行不通的。

然后restartchef-server 应用设置:

chef-server-ctl restart

笔记:不要chef-server-ctl reconfigure,这将再次覆盖设置。

相关内容