当从外部IP地址访问时,chef-server-webui会话不工作

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

 chef-server-ctl test 

哪个成功报告, 0失败。

服务器(Amazon EC2实例)具有1个networking接口,其中有一个内部地址分配给它。 假设IP地址是10.223.92.58hostname -f返回类似于:

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

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

为了允许通过公共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访问服务器并进入login页面。 login页面会将我(login成功后)redirect到用户编辑页面,以便更改我的密码。 (这是devise)。

问题:

redirect到用户编辑页面将不起作用,因为用户控制器(或其他控制器)会抱怨一个不存在的会话,并将我重新定向到login页面。 如果我尝试从本地DNS域名或IP访问该页面,则问题不存在。 我是否缺less一些configuration值?

我在Azure上使用厨师,但是我相信我已经发现了正确的设置。

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

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

 chef_server_webui['cookie_domain'] = 'FQDN' 

凡“FQDN”是您的完全合格的域名“myserver.mydomain.net”等

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

完成后,如果你向上滚动一下,在“食谱:厨师服务器::默认”下,你会看到它加载你的设置:

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

现在使用myserver.mydomain.net导航到WebUI允许您login。

我刚刚意识到了这个问题,所以我想我会提出这个问题。我是厨师的一名工程师,研究过这个问题。

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

我的调查的详细信息可以在我们以前的售票系统中find: https : //tickets.opscode.com/browse/CHEF-5301

这个问题在我们的GitHub问题中也被打开了: https : //github.com/opscode/chef/issues/1780

如果任何人有任何build议,我们可以configuration服务器开箱,以避免这种情况,我将不胜感激,如果你在GitHub问题上,因为我目前不明白这个问题的确切原因。 这似乎是Rails,cookie域和现代浏览器之间的奇怪的交互(这个问题似乎只影响Chrome和Firefox,而不是Safari或IE)。 如果你阅读我提供的链接,你可以看到我所知道的所有细节。

谢谢。

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

编辑:这个解决scheme,然后打破了我的Cookbook上传,我不得不重新学习老的AWS的经验教训,这是你必须放在/ etc / hosts的私有 IP。 重新configuration后,这两个问题仍然得到解决。

最后我可以解决这个问题。 它与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像在原始文件将无法正常工作。

然后restart厨师服务器应用设置:

 chef-server-ctl restart 

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