使用Chef和Vagrant时如何禁用默认的nginx站点?

使用Chef和Vagrant时如何禁用默认的nginx站点?,nginx,chef-infra,vagrant,Nginx,Chef Infra,Vagrant,我正在使用Berkshellf、Chef和Vagrant,我正在尝试配置一个在nginx上运行的自定义站点。我正在使用opscode nginx配方,然后为自定义站点编写自己的配方。当我运行vagrant up时,我得到一个关于不禁用默认nginx站点的错误。我找到了几个不同的建议,但似乎都不管用 错误: STDOUT: STDERR: nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-

我正在使用Berkshellf、Chef和Vagrant,我正在尝试配置一个在nginx上运行的自定义站点。我正在使用opscode nginx配方,然后为自定义站点编写自己的配方。当我运行vagrant up时,我得到一个关于不禁用默认nginx站点的错误。我找到了几个不同的建议,但似乎都不管用

错误:

STDOUT:
STDERR: nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-    enabled/kyleboon.me:2
nginx: configuration file /etc/nginx/nginx.conf test failed
我的伯克斯档案:

site :opscode

metadata
cookbook 'nginx'
cookbook 'nginx', git: 'https://github.com/opscode-cookbooks/nginx'
我定义的“roles/web.json”角色:

{
  "name": "web",
  "chef_type": "role",
  "json_class": "Chef::Role",
  "description": "The base role for systems that serve HTTP traffic",
  "default_attributes": {
    "nginx": {
      "default_site_enabled": false
    },
    "app": {
      "name": "kyleboon.me",
      "web_dir": "/var/data/www/kyleboon.me"
    },
    "user":{
      "name": "vagrant"
    }
  },
  "run_list": [
    "recipe[nginx]",
    "recipe[kyleboon.me]"
  ]
}
以下是我正在添加的nginx站点的recipes/default/default.rb:

nginx_site 'default' do
  action :disable
end

%w(public logs).each do |dir|
  directory "#{node.app.web_dir}/#{dir}" do
    owner node.user.name
    mode "0755"
    recursive true
  end
end

template "#{node.nginx.dir}/sites-available/kyleboon.me" do
  source "site.erb"
  mode 0777
  owner node.nginx.user
  group node.nginx.user
end

nginx_site "kyleboon.me"

cookbook_file "#{node.app.web_dir}/public/index.html" do
  source "index.html"
  mode 0755
  owner node.user.name
end
(顺便说一句,我知道文件权限需要更改,我只是在摆弄很多东西,一旦其他一切正常,我会更新这些内容)

下面是attributes/default.rb:

override['nginx']['enable_default_site'] = false
您可以看到,我曾尝试禁用web.json中的默认站点、属性和配方本身,但它们都不起作用


我没有定义节点或单独节点,我不确定这是否是一个问题。到目前为止,我和流浪汉之间的主要问题是如何做事的可能性是无穷的。没有两个例子是以相同的方式完成的,我不确定什么是“最佳”或“正确”的方式

您可以使用nginx_站点及其名称按名称禁用任何nginx站点。您遇到的问题是,nginx_站点实际上正在寻找将enable参数设置为true或false,而不是将action参数设置为:disabled

要禁用默认站点,请将其添加到配方中:

nginx_site 'default' do
  enable false
end
从nginx opscode cookbook的1.7.1版开始,这对我来说是有效的。我不知道这是否会与社区提供的版本,因为它似乎是几个月前的工作

要获取最新版本,请添加到您的Berksfile:

site :opscode

metadata
cookbook 'nginx'
cookbook 'nginx', git: 'https://github.com/opscode-cookbooks/nginx'

希望这能有所帮助:)

我遇到了同样的错误,但我没有启用默认站点。相反,它来自
/etc/nginx/conf.d/default.conf
!我不得不求助于

file "/etc/nginx/conf.d/default.conf" do
  action :delete
end

这来自nginx cookbook正在我的盒子上安装的RHEL包。

我发现通过
节点['nginx']['enable_default_site']
禁用默认站点通常有效-可能您在站点中保留了一个符号链接,该链接是从以前的运行中启用的,不再由chef管理(Chef不会因为删除资源声明而删除内容)?我已经做了一个流浪破坏来确保。每次我提供时,它肯定会在启用的站点中创建链接,但我会再次检查。我认为Cliff Erson的答案是正确的。也许你想接受它?希望我可以问一个问题。禁用默认站点意味着什么?这是否意味着不映射到默认站点的请求定义的站点转到第一个站点,如中所述?我认为这是因为在nginx.conf.erb的末尾有两行,其中一行包括conf.d/*.conf,另一行包括/sites enabled/*。我非常确定这意味着禁用默认值将不起作用,因为即使您没有在sites enabled中创建符号链接,它仍然会被禁用从conf.d开始,这个错误现在在Nginx~->2.7.6中排序,即使在2016年也是完美的。