我在我的一台服务器上使用nginx,我下载其源代码并使用以下代码编译:
./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-http_ssl_module \
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--add-module=/opt/ngx_http_substitutions_filter_module \
--with-http_stub_status_module
在conf.d中设置和添加文件,并且工作正常。但突然间,当我重新启动它时,它给了我错误消息:
nginx: [emerg] unknown directive "stub_status" in /etc/nginx/conf.d/mytest.conf:6
我查看了更多细节,发现它无法加载模块" http_stub_status_module"。我知道我用安装编译它。
我的问题是有什么方法我可以重新加载这个模块或添加在conf中的某个地方使其工作?? **我不想再安装它,因为如果我再次编译它将删除我当前的配置。
答案 0 :(得分:3)
与其他软件(如Apache)不同,Nginx没有在运行时加载模块的机制;他们必须编译。
如果在构建新版本之前在旧版本上运行nginx -V
,您将收到一条消息,其中包含使用它构建的configure
命令。尝试在新的源代码树中使用相同的树;如果你实际上没有你需要的模块,那么它将失败。如果使用相同命令的配置和后续构建都成功,那么您应该有理由相信您的新构建具有与旧构建相同的功能。当然,您仍然需要注意可能对nginx本身或任何这些模块进行的任何重大更改。
答案 1 :(得分:0)
问题是您的系统上可能有多个nginx二进制文件,现在尝试在没有模块的情况下加载该二进制文件。这是一种常见的情况,当有人在通过软件包管理器安装后从源代码编译自己的东西。