在Chef-server上禁用ssl?

时间:2015-05-22 21:16:24

标签: chef chef-recipe

我在nginx['enable_non_ssl']=true文件中设置/etc/opscode/chef-server.rb并运行chef-server-ctl reconfigure但是当我尝试为主厨卷曲http端口时,我仍然会获得重定向设置。请参阅以下错误。

我的chef-server.rb文件:

  

cat /etc/opscode/chef-server.rb

nginx['enable_non_ssl']=true
nginx['non_ssl_port']=80

运行重新配置:

  

chef-server-ctl reconfigure

Starting Chef Client, version 12.0.3
resolving cookbooks for run list: ["private-chef::default"]
[2015-05-25T13:12:26+00:00] WARN: Cookbook 'local-mode-cache' is empty or entirely chefignored at /opt/opscode/embedded/cookbooks/local-mode-cache
[2015-05-25T13:12:26+00:00] WARN: Cookbook 'local-mode-cache' is empty or entirely chefignored at /opt/opscode/embedded/cookbooks/local-mode-cache
[2015-05-25T13:12:26+00:00] WARN: Cookbook 'local-mode-cache' is empty or entirely chefignored at /opt/opscode/embedded/cookbooks/local-mode-cache
....

显示我仍然被重定向的卷曲命令:

  

curl http://chef-xxx.xxxxxx.com

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>openresty/1.7.10.1</center>
</body>
</html>

如何让厨师服务器正常工作?

4 个答案:

答案 0 :(得分:1)

Relevant settings from Chef:

  

注意   默认情况下,chef-server.rb文件不存在。要修改Chef服务器的设置,请在/ etc / opscode /目录中创建名为chef-server.rb的文件。

     

注意   此文件在以前版本的Enterprise Chef中命名为private-chef.rb。从Enterprise Chef升级到Chef服务器12后,将private-chef.rb文件符号链接到chef-server.rb。不推荐使用private-chef.rb文件,从Chef server 12开始。

nginx['enable_non_ssl']
  

用于允许端口80重定向到端口443.当此值设置为false时,允许前端硬件上的负载平衡器执行WebUI和API的SSL终止。默认值:false。

nginx['non_ssl_port']   
  

WebUI和API绑定到非SSL连接的端口。默认值:80。使用nginx [&#39; enable_non_ssl&#39;]在此端口号上启用或禁用SSL重定向。设置为false以禁用非SSL连接。

因此,根据上述内容,我相信您需要在chef-server.rb目录中编辑/创建/etc/opscode/文件,然后运行chef-server-ctl reconfigure

答案 1 :(得分:1)

我得到了相同的问题,修复了它

我在重新安装Chef Server(chef-manage v2.4.4

时遇到了同样的问题
  

您可以通过阅读已部署的Chef服务器的更改日志来查看Chef Manage版本:http://your-chef-server.com/changelog

     

enter image description here

我们想要什么

在专用服务器上安装了我的厨师服务器实例后,它可以正常使用SSL。

但我们的生产服务器部署在专用VLAN中的专用主机上,用户通过作为反向代理运行的nginx Web服务器访问服务或Web应用程序。

因此,为了将厨师服务器置于生产模式,我必须配置我的反向代理来代理请求:

这里是正确的请求/响应路由模式:

请求:

client    443 >> 443 chef.company.com (DNS: rev-proxy)
rev-proxy  80 >> 80  chef.vlan

响应:

rev-proxy  80 << 80  chef.vlan
client    443 << 443 chef.company.com

正常问题

但是,与您一样,厨师服务器默认配置会强制SSL从反向代理重定向到vlan中的厨师主机。 它会导致无限重定向循环:

client     443 >> 443 rev-proxy
proxy       80 >> 80  chef.vlan
client      80 << 80  chef.company.com (redirect to https://$host$request_uri)
client     443 >> 443 rev-proxy
proxy       80 >> 80  chef.vlan
client      80 << 80  chef.company.com (redirect to https://$host$request_uri)
...
client     443 >> 443 rev-proxy
proxy       80 >> 80  chef.vlan
client      80 << 80  chef.company.com (redirect to https://$host$request_uri)
...

正常修复

所以我们必须禁用SSL chef.vlan端。

普通方法是通过插入以下指令来编辑文件/opt/obscode.chef-server.rb(如果它不存在则创建它):

nginx['enable_non_ssl']=true

并且可选地(因为这已经是默认值)以下一个:

nginx['non_ssl_port']=80

因此我们只需要来重新配置厨师服务器:

# chef-server-ctl reconfigure

但是在chef-server

中有一个错误

但是厨师模板配方中有一个错误,它用于生成nginx confi文件。因此,当我们重新配置厨师服务器时,将忽略先前的指令。

所以无限循环停留在那里。

  

Bug Ticket:https://tickets.opscode.com/browse/CHEF-3999

此外,您还可以看到以下其他资源:

  

https://github.com/chef/omnibus-chef/pull/57

     

https://docs.chef.io/config_rb_server.html

     

https://github.com/chef/chef-server/issues/973

解决问题

为了解决这个问题,我不得不从bug票中调整建议的解决方案。

在主厨

上找到nginx配置文件
root@chef-srv:~# find / -name nginx.conf
/opt/chef-manage/embedded/service/gem/ruby/2.2.0/gems/unicorn-4.9.0/examples/nginx.conf
/opt/opscode/embedded/service/gem/ruby/2.2.0/gems/unicorn-5.1.0/examples/nginx.conf
/opt/opscode/embedded/conf/nginx.conf
/var/opt/opscode/nginx/etc/nginx.conf

最后一个是嵌入式nginx conf文件。它包含以下集团代码,问题的根源:

# We support three options: serve nothing on non_ssl_port (80),
# redirect to https, or actually serve the API.
      server {
        listen 80;
        access_log /var/log/opscode/nginx/rewrite-port-80.log;
        return 301 https://$host$request_uri;
      }

找到源自嵌入式nginx配置

的nginx配置配方
root@chef-srv:~# find / -name nginx.rb
/opt/chef-manage/embedded/cookbooks/omnibus-chef-manage/recipes/nginx.rb
/opt/chef-manage/embedded/cookbooks/cache/cookbooks/omnibus-chef-manage/recipes/nginx.rb
/opt/opscode/embedded/cookbooks/private-chef/recipes/nginx.rb
/var/opt/opscode/local-mode-cache/cookbooks/private-chef/recipes/nginx.rb

第三个是生成嵌入式nginx配置的模板:

/opt/opscode/embedded/cookbooks/private-chef/recipes/nginx.rb
  === > /var/opt/opscode/nginx/etc/nginx.conf

修复配方

我们必须修复它addind以下几行:

node.default [&#39; private_chef&#39;] [&#39; nginx的&#39;] [&#39; enable_non_ssl&#39;] =真

我们应该将它附加到以下块:

# Save node attributes back for use in config template generation
node.default['private_chef']['nginx']['ssl_certificate'] ||= ssl_crtfile
node.default['private_chef']['nginx']['ssl_certificate_key'] ||= ssl_keyfile
node.default['private_chef']['nginx']['ssl_dhparam'] ||= ssl_dhparam

所以最终的块代码如下:

# nano /opt/opscode/embedded/cookbooks/private-chef/recipes/nginx.rb

# Save node attributes back for use in config template generation
node.default['private_chef']['nginx']['ssl_certificate'] ||= ssl_crtfile
node.default['private_chef']['nginx']['ssl_certificate_key'] ||= ssl_keyfile
node.default['private_chef']['nginx']['ssl_dhparam'] ||= ssl_dhparam
node.default['private_chef']['nginx']['enable_non_ssl']=true

应用更改

最后,我们必须通过重新配置厨师服务器从配方模板重新生成nginx配置文件:

# chef-server-ctl reconfigure

然后路线模式按预期工作。

享受!

答案 2 :(得分:0)

chef-server.rb文件中的更改使url成为http但是当我再次登录时提示https登录意味着;用户登录在http中为两次,在https中为一次。

请告诉我您是否有机会尝试此操作以及配置中的任何成功作为HTTP实例提前感谢。

答案 3 :(得分:0)

所以,我调查了这个问题,然后找到了:

除了Nginx之外,WebUI chef-manage使用Unicorn网络服务器,而App的属性为config.force_ssl = true,除非ENV [&#39; NO_SSL&#39;]。

因此,要禁用SSL,您需要传递env变量export NO_SSL=true来运行WebUI的命令或运行脚本。