Nginx安装subs_filter模块遇configure脚本缺失问题求助
解决Nginx缺少
subs_filter_types指令及找不到configure脚本的问题 问题根源分析
你遇到的unknown directive "subs_filter_types"错误,是因为这个指令属于第三方替换过滤器模块(ngx_http_substitutions_filter_module),并不是Nginx默认内置的功能。要使用这个指令,你需要重新编译Nginx并添加该模块。而找不到configure脚本,大概率是因为你的Nginx是通过系统包管理器(比如apt、yum)安装的——这种方式安装的Nginx只会提供预编译的二进制文件,不会包含源码和configure脚本。
分步解决方案
1. 获取对应版本的Nginx源码
首先得保证你用的源码版本和当前安装的Nginx版本完全一致,否则编译出来的模块可能不兼容:
- 查看当前Nginx版本:
比如会输出nginx -vnginx version: nginx/1.18.0 - 下载对应版本的Nginx源码包(去Nginx官方渠道下载对应版本的源码,解压到本地任意目录,比如
/home/yourname/nginx-src),解压后进入源码目录,你就能看到configure脚本了。
2. 安装编译依赖(以Debian/Ubuntu为例)
编译Nginx需要一些基础依赖,先安装:
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
3. 克隆第三方模块仓库
git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
记住这个模块的路径,后面会用到。
4. 配置编译参数(关键!)
直接用./configure --add-module=...会丢失原有Nginx的所有功能,所以必须带上当前Nginx的编译参数:
- 查看当前Nginx的编译参数:
复制输出里nginx -Vconfigure arguments:后面的所有内容 - 进入Nginx源码目录,把第三方模块的参数加到原有参数后面,执行configure:
比如你的原有参数是./configure 你的原有编译参数 --add-module=/path/to/ngx_http_substitutions_filter_module--prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx ...,就把--add-module接在最后。
5. 编译并替换Nginx二进制
- 只编译,不要直接安装(避免覆盖现有配置):
make - 编译完成后,在源码目录的
objs文件夹里会有新的nginx二进制文件。先备份原有二进制:sudo cp /usr/sbin/nginx /usr/sbin/nginx.bak - 替换新的二进制:
sudo cp objs/nginx /usr/sbin/nginx
6. 验证与重启
- 测试配置是否正常:
nginx -t - 如果测试通过,重启Nginx:
sudo systemctl restart nginx
关于configure脚本的说明
configure是Nginx源码包自带的Shell脚本,每个Nginx版本的脚本都不一样,没有通用版本——它的作用是根据你的系统环境和指定参数,生成适合的Makefile用于编译。所以你必须下载对应版本的Nginx源码,才能拿到匹配的configure脚本。
举个例子,Nginx 1.18.0的configure脚本开头大概是这样的:
#!/bin/sh # Copyright (C) Igor Sysoev # Copyright (C) Nginx, Inc. NGINX_VERSION="1.18.0" PKG_RELEASE="1~buster" ...(后续是大量的系统检测、参数解析代码)
内容的提问来源于stack exchange,提问作者CzipO2
相关产品推荐
相关产品推荐

