10

我正在使用 Berkshelf、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

我的 Berks 文件:

site :opscode

metadata
cookbook '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

(PS我知道需要更改文件权限,我刚刚摆弄了很多东西,一旦我得到其他一切工作,我会更新这些)

这是属性/default.rb:

override['nginx']['enable_default_site'] = false

你可以看到我试图禁用 web.json 中的默认站点、属性和配方本身,但它们都没有保留。

我没有定义节点或单独节点,我不确定这是否是一个问题。到目前为止,我对 vagrant 的主要问题是如何做事的无限可能性。没有两个示例以相同的方式完成,我不确定什么被认为是“最佳”或“正确”的方式。

4

2 回答 2

12

您可以使用 nginx_site 及其名称按名称禁用任何 nginx 站点。您遇到的问题是因为 nginx_site定义实际上是在寻找要设置为 true 或 false 的启用参数,而不是设置为:禁用的操作参数。

要禁用默认站点添加到您的配方:

nginx_site 'default' do
  enable false
end

从 nginx opscode 食谱的 1.7.1 版开始,这对我有用。我不知道这是否适用于社区提供的版本,因为它似乎已经有几个月了。

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

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

希望有帮助:)

于 2013-07-21T06:29:55.717 回答
5

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

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

这来自 nginx 食谱安装在我的盒子上的 RHEL 包。

于 2013-08-30T13:13:31.950 回答