将nginx模块与chef nginx cookbook

时间:2015-08-14 16:07:22

标签: nginx centos chef

我正在尝试使用大厨来配置带有nginx的centos webserver。我想使用http_auth_request_module和headers_more_module。我的角色是这样的:

{
    "name" : "cms-aws",
    "description" : "a role to deploy cms to aws",
    "default_attributes" : {
        "nginx" : {
            "source" : {
                "modules" : ["nginx::http_auth_request_module","nginx::headers_more_module"]
            }
        }
    },
    "run_list" : [
        "runit",
        "python",
        "build-essential",
        "gunicorn",
        "nginx::source",
        "openssl",
        "yum",
        "git",
        "yum-epel",
        "my-custom-cookbook",
        "supervisor"
    ]
}

但是,当我在服务器上运行nginx -V时,这些模块没有列出,当我在conf文件中使用auth_request指令时,nginx会抱怨。

我也尝试过以下属性,但是当我运行它时,厨师找不到这些食谱:

"default_attributes" : {
    "nginx" : {
        "source" : {
            "modules" : ["http_auth_request_module","headers_more_module"]
        }
    }
},

编辑: 所以我已经确定我运行它的AMI已经安装了nginx。因此,当systemctl启动nginx时,它会触及预先存在的那个,而不是一个厨师安装的。我尝试修改我的属性:

"default_attributes" : {
    "nginx" : {
        "source" : {
            "modules" : ["nginx::http_auth_request_module","nginx::headers_more_module"]
        },
        "binary" : "/usr/sbin/nginx"
    }
},

但是主厨仍然会在/opt/nginx-1.6.2/sbin/nginx安装nginx,知道如何解决这个问题吗?

编辑编辑:关闭此AMI上没有开箱即用的nginx,因此cookbook会在/usr/sbin/nginx安装它,但是当我运行nginx -V时,未列出所需的模块。当我运行/opt/nginx-1.6.2/sbin/nginx -V时,它会列出所请求的模块。

1 个答案:

答案 0 :(得分:2)

即使从包中安装了nginx,nginx cookbook也会创建一个从/opt/nginx-1.6.2/sbin/启动nginx的runit服务。您可以使用runit的sv command

进行管理
sudo sv status nginx
sudo sv up nginx

在chef中从源代码编译nginx时,强行删除同一配方中的所有现有包是有意义的:

package("nginx") { action :remove }

由于您的nginx似乎编译正确(/opt/nginx-1.6.2/sbin/nginx -V产生了正确的结果),上述内容应足以解决问题。