我遇到了同样的问题并解决了它
我在最近安装 Chef Server (chef-manage v2.4.4) 时遇到了同样的问题
您可以通过阅读已部署 Chef 服务器的更改日志来查看您的 Chef Manage 版本:http(s)://your-chef-server.com/changelog
我们想要什么
在专用服务器上安装我的 Chef 服务器实例后,它确实可以正常使用 SSL。
但我们的生产服务器部署在专用 VLAN 中的专用主机上,用户通过作为反向代理运行的 nginx Web 服务器访问服务或 Web 应用程序。
因此,要将 Chef 服务器置于生产模式,我必须配置我的反向代理来代理请求:
这里是正确的请求/响应路由模式:
请求:
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 有一个 bug
但是在用于生成 nginx 配置文件的 chef 模板配方中有一个错误。因此,当我们重新配置厨师服务器时,前面的指令将被忽略。
所以无限循环停留在那里。
Bug 票: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 票中调整建议的解决方案。
在 chef 主机上找到 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
修正配方
我们必须通过以下几行来修复它:
node.default['private_chef']['nginx']['enable_non_ssl']=true
我们应该将它附加到以下块:
# 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
然后路由模式按预期工作。
享受吧!