2013-06-16 22 views
9

Tôi đang sử dụng Berkshelf, Chef và Vagrant và tôi đang cố gắng định cấu hình trang web tùy chỉnh chạy trên nginx. Tôi đang sử dụng công thức nginx opscode và sau đó viết công thức của riêng tôi cho trang web tùy chỉnh. Khi tôi chạy lang thang lên tôi nhận được một lỗi về việc không vô hiệu hóa trang web nginx mặc định. Tôi đã tìm thấy một số gợi ý khác nhau nhưng dường như không có gì hoạt động.Làm thế nào để vô hiệu hóa trang web nginx mặc định khi sử dụng Chef và Vagrant?

Lỗi:

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 

My Berksfile:

site :opscode 

metadata 
cookbook 'nginx' 

Các 'vai trò/web.json' vai trò tôi định nghĩa:

{ 
    "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]" 
    ] 
} 

Dưới đây là công thức nấu ăn/default/default.rb cho trang web nginx Tôi đang thêm:

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. Tôi biết các quyền tập tin cần phải được thay đổi, tôi đã chỉ được loay hoay với rất nhiều điều, tôi sẽ cập nhật những lần tôi nhận được mọi thứ khác làm việc)

Và đây là thuộc tính/default.rb:

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

Bạn có thể thấy tôi đã cố vô hiệu hóa trang web mặc định trong web.json, các thuộc tính và công thức riêng nhưng không ai trong số chúng dính vào.

Tôi không có nút hoặc nút solo được xác định và tôi không chắc đó có phải là vấn đề hay không. Vấn đề chính của tôi với âm đạo cho đến nay là những khả năng vô tận về cách làm việc. Không có hai ví dụ được thực hiện trong cùng một cách và tôi không chắc chắn những gì được coi là 'tốt nhất' hoặc 'phải' cách để đi.

+0

Tôi thấy rằng vô hiệu hóa trang web mặc định qua 'nút ['nginx'] ['enable_default_site']' thường hoạt động - có thể bạn có một liên kết tượng trưng còn sót lại trong các trang web được bật từ lần chạy trước đó không được đầu bếp quản lý nữa (Đầu bếp không xóa mọi thứ chỉ vì bạn loại bỏ khai báo tài nguyên)? – cmur2

+0

Tôi đã thực hiện một âm mưu phá hủy để đảm bảo. Nó chắc chắn có vẻ là tạo ra các liên kết trong các trang web kích hoạt mỗi lần tôi cung cấp nhưng tôi wil kiểm tra lại. –

+0

Tôi nghĩ câu trả lời của Cliff Erson là chính xác. Có lẽ bạn muốn chấp nhận nó? – kioopi

Trả lời

11

Bạn có thể tắt bất kỳ trang nginx nào bằng tên sử dụng nginx_site và tên của nó. Vấn đề bạn đang gặp là vì nginx_site definition thực sự đang tìm kiếm tham số cho phép được đặt thành true hoặc false chứ không phải thông số hành động được đặt thành: disabled.

Để vô hiệu hóa các trang web mặc định thêm vào công thức của bạn:

nginx_site 'default' do 
    enable false 
end 

này đang làm việc cho tôi như các phiên bản 1.7.1 của sách dạy nấu ăn nginx Opscode. Tôi không biết nếu điều này sẽ làm việc với các phiên bản được cung cấp bởi cộng đồng vì nó có vẻ là vài tháng tuổi.

Để có được phiên bản mới nhất thêm vào Berksfile của bạn:

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

Hy vọng rằng sẽ giúp :)

+1

Hoàn hảo, ngay cả trong năm 2016. –

5

Tôi nhận được lỗi tương tự, nhưng tôi không có trang web mặc định kích hoạt. Thay vào đó, nó đến từ /etc/nginx/conf.d/default.conf! Tôi phải nghỉ mát đến

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

Điều này đến từ gói RHEL mà sách nấu ăn nginx đang cài đặt trên hộp của tôi.

+0

Tôi nghĩ rằng điều này là do ở cuối nginx.conf.erb là hai dòng, một trong số đó bao gồm conf.d/*. Conf và phần còn lại bao gồm/sites-enabled/*. Tôi khá chắc chắn điều này có nghĩa là việc vô hiệu hóa mặc định sẽ không hoạt động vì ngay cả khi bạn chưa tạo liên kết tượng trưng trong các trang web, nó sẽ vẫn hiển thị từ conf.d – Bueller

+0

Lỗi này hiện được sắp xếp theo Nginx ~ -> 2.7 .6, https://github.com/miketheman/nginx/blob/master/recipes/commons_dir.rb#L51 – stefancarlton