nginx - 使用Chef和Vagrant时如何禁用默认的Nginx网站?

标签 nginx chef-infra vagrant

我正在使用Berkshelf,Chef和Vagrant,并且尝试配置在nginx上运行的自定义站点。我正在使用opscode nginx配方,然后为自定义站点编写自己的配方。当我无所事事时,我收到一个关于不禁用默认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

我的Berksfile:
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网站的配方/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

(P.S.我知道需要更改文件许可权,我只是在摆弄很多事情,一旦其他所有事情都起作用,我将对其进行更新)

这是attributes/default.rb:
override['nginx']['enable_default_site'] = false

您可以看到我试图禁用web.json中的默认站点,属性和配方本身,但是它们都不粘。

我没有定义节点或单独节点,因此不确定是否有问题。到目前为止,我对 Vagrant 的主要问题是做事的无限可能。没有两个示例以相同的方式完成,我不确定哪种方法是“最佳”或“正确”的方法。

最佳答案

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

要禁用默认站点,请添加到您的食谱中:

nginx_site 'default' do
  enable false
end

从nginx opscode Cookbook的1.7.1版本开始,这对我有用。我不知道这是否可以与社区提供的版本一起使用,因为它似乎已经使用了几个月。

要获取最新版本,请添加到您的Berksfile中:
cookbook 'nginx', git: 'https://github.com/opscode-cookbooks/nginx'

希望能有所帮助:)

关于nginx - 使用Chef和Vagrant时如何禁用默认的Nginx网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17133829/

相关文章:

java - 将 Nginx 移动为使用 HTTPS 的问题无法解决(3 : Host not found)

chef-infra - 可以从同一属性文件中引用 Chef 属性吗?

apache - vagrant provisining 在 Windows 上不起作用,但在 Ubuntu 上起作用

linux - 使用 Vagrant 从配置 shell 脚本更新 .bashrc

linux - Node js + Nginx + 亚马逊 Linux + SSL

spring - Nginx HTTPS-> HTTP 使用 Spring 获取 403 "SSL required"错误

ruby - chef 10.28.0和ohai 8.0.1不同ruby版本要求如何处理

python - 命令 'python' 未找到 - 在我将其指定为 python3 的别名之后

django - uwsgi和django : ImportError: No module named __future__

ruby - Chef Solo - Ruby DSL 或 JSON 中的角色数据?