在使用vagrant / chef-solo安装nginx之后,需要进行vagrant重新加载才能运行

时间:2014-05-09 23:58:36

标签: nginx vagrant

我使用以下Vagrantfile安装nginx。在我运行vagrant后,对http://192.168.33.14/的请求从nginx返回404。运行' vagrant reload'后,向http://192.168.33.14/发出请求将返回预期的代理结果。

我希望代理在流浪之后按预期工作。我在运行nginx cookbook之后编写配置更改,所以我怀疑在编写配置文件后我需要重新加载nginx。我尝试了运行sudo /usr/sbin/nginx -s reload的shell配置程序,但nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)失败了。

Vagrant.configure("2") do |config|

    config.vm.box = "opscode-ubuntu-14.04"
    config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box"

    config.omnibus.chef_version = :latest

    config.vm.provision "shell", inline: "echo 'set nocp' > /home/vagrant/.vimrc"

    config.vm.define "nginx" do |nginx|

        nginx.vm.network "private_network", ip: "192.168.33.14"

        nginx.vm.provision :chef_solo do |chef|
            chef.cookbooks_path = "cookbooks"
            chef.add_recipe "nginx"

            chef.json = {
                :nginx => {
                    dir: '/etc/nginx'  # this is the default value, sample only
                }
            }
        end

        nginx.vm.provision "shell",
            inline: "echo -e $1 > /etc/nginx/conf.d/nginx.conf",
            args: [<<-EOS
                server {
                    listen *:80;

                    location ~ ^/ {
                        proxy_pass http://192.168.33.11:8080;
                    }
                }
            EOS
            ]
    end

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,也使用Ubuntu 14.04作为基本框。

这篇文章对我有所帮助: http://www.rollnorocks.com/2014/05/fear-and-loathing-with-chef-and-nginx/

简而言之,初始安装的PID位置与配置中设置的不同。 chef配方设置配置PID(默认为/var/run/nginx.pid),但初始安装使用默认的Ubuntu设置(/run/nginx.pid)。

解决此问题的一种快速方法是将此行添加到属性文件中: 覆盖['nginx'] ['pid'] ='/ run / nginx.pid'

这意味着厨师PID位置设置为Ubuntu在初始安装时使用的相同位置。

更好的解决方法是改进配方,以便初始安装使用由厨师设置的PID - 我找不到添加的位置,所以现在我正在使用上面的快速修复。

答案 1 :(得分:0)

找到了另一种解决方法,将install_method设置为source:

vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks"
    chef.add_recipe "nginx"

    chef.json = {
        :nginx => {
            install_method: "source"
        }
    }
end

我在这里找到了解决方法:https://github.com/miketheman/nginx/pull/223