当前位置: 首页 > news >正文

[Linux][经验总结]Nginx报错:unknown directive “sub\_filter“ 解决与优化

一、报错现象

nginx: [alert] could not open error log file: open() "/home/wingaso/nginx/nginx/log/error.log" failed (2: No such file or directory)
2025/11/08 10:58:19 [emerg] 2220058#0: unknown directive "sub_filter" in /home/wingaso/nginx/nginx/conf/nginx.conf:86
nginx: configuration file /home/wingaso/nginx/nginx/conf/nginx.conf test failed

二、核心原因

  1. 日志目录不存在,Nginx 无法写入错误日志;

  2. sub_filter 指令依赖 ngx_http_sub_module 模块,该模块默认未编译进 Nginx,需手动指定编译参数启用。

三、解决步骤

第一步:创建日志目录并配置权限

执行以下命令递归创建目录,确保 Nginx 运行用户拥有读写权限:

mkdir -p /home/wingaso/nginx/nginx/logs
chown -R nginx:nginx /home/wingaso/nginx/nginx/logs
chmod 755 /home/wingaso/nginx/nginx/logs

第二步:验证模块是否已安装

通过大写 V 参数查看 Nginx 编译参数,确认是否包含 --with-http_sub_module(及其他需附加的常用模块):

nginx -V

无目标参数则需执行后续编译步骤。

第三步:安装编译依赖(附加模块必需)

编译以下所有附加常用模块需先安装依赖,
CentOS/RHEL 系统执行:

yum install -y pcre-devel openssl-devel zlib-devel geoip-devel gd-devel

Ubuntu/Debian 系统替换为:

apt-get install -y libpcre3-dev libssl-dev zlib1g-dev libgeoip-dev libgd-dev

第四步:编译 Nginx(集成全部附加常用模块)

进入与已安装版本一致的 Nginx 源码目录,执行以下编译命令(已按/home/wingaso路径适配,包含全部指定常用模块):

./configure --prefix=/data/software/nginx/nginx --sbin-path=/data/software/nginx/nginx/sbin/nginx --conf-path=/data/software/nginx/nginx/conf/nginx.conf --error-log-path=/data/software/nginx/nginx/logs/error.log --http-log-path=/data/software/nginx/nginx/logs/access.log --pid-path=/data/software/nginx/nginx/run/nginx.pid --lock-path=/data/software/nginx/nginx/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/data/software/nginx/nginx/tmp/client/ --http-proxy-temp-path=/data/software/nginx/nginx/tmp/proxy/ --http-fastcgi-temp-path=/data/software/nginx/nginx/tmp/fcgi/ --http-uwsgi-temp-path=/data/software/nginx/nginx/tmp/uwsgi --http-scgi-temp-path=/data/software/nginx/nginx/tmp/scgi --with-pcre --with-http_sub_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_v2_module --with-http_auth_request_module --with-http_slice_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_geoip_module --with-http_image_filter_module

第五步:替换二进制文件并重启

  1. 编译生成新文件(不要make install,避免覆盖原安装):
make
  1. 备份旧版本二进制文件,避免回滚风险:
cp /home/wingaso/nginx/nginx/sbin/nginx /home/wingaso/nginx/nginx/sbin/nginx_$(date +%Y%m%d).bak
  1. 替换新编译文件并验证重启:
cp objs/nginx /home/wingaso/nginx/nginx/sbin/nginx
/home/wingaso/nginx/nginx/sbin/nginx -t
/home/wingaso/nginx/nginx/sbin/nginx -s reload

输出 “test is successful” 即配置生效。

四、附加常用模块实用场景(全量说明)

  • --with-http_ssl_module:支持 HTTPS 协议,适配网站加密传输、接口安全访问场景;

  • --with-http_stub_status_module:查看 Nginx 连接数、请求数等运行状态,用于服务监控与性能排查;

  • --with-http_gzip_static_module:静态文件 Gzip 压缩,减少传输带宽、提升页面加载速度;

  • --with-http_sub_module:反向代理时替换页面文本 / URL,适配域名迁移、内容定制场景;

  • --with-http_realip_module:反向代理环境下获取客户端真实 IP,用于日志分析、IP 黑白名单控制;

  • --with-http_addition_module:在响应首尾添加自定义内容(如版权信息、统计代码),适配统一页面样式需求;

  • --with-http_dav_module:支持 WebDAV 协议,用于文件在线编辑、上传管理场景;

  • --with-http_flv_module:优化 FLV 流媒体传输,支持伪流媒体,适配视频直播、点播平台;

  • --with-http_mp4_module:优化 MP4 文件传输,支持按时间点播放,适配视频断点续播功能;

  • --with-http_v2_module:支持 HTTP/2 协议,实现多路复用、头部压缩,提升现代网站并发效率;

  • --with-http_auth_request_module:基于子请求动态认证,适配对接 OAuth2、LDAP 等权限系统场景;

  • --with-http_slice_module:大文件断点续传,适配云存储下载、大附件分发场景;

  • --with-stream:启用 TCP/UDP 四层代理,适配 MySQL、Redis、SSH 等非 HTTP 服务转发;

  • --with-stream_ssl_module:四层代理 SSL 加密,适配数据库、缓存服务的安全传输需求;

  • --with-stream_realip_module:四层代理获取真实客户端 IP,用于非 HTTP 服务的日志追溯与 IP 限制;

  • --with-http_geoip_module:基于 IP 解析地理位置,适配地域访问控制、个性化内容推荐场景;

  • --with-http_image_filter_module:直接缩放、裁剪图片,无需外部工具,适配静态资源服务器、图片自适应展示场景;

  • --with-pcre:支持正则表达式,为 URL 匹配、Rewrite 规则等功能提供基础支持。

五、配置示例(sub_filter)

location / {proxy_pass http://backend_server;sub_filter 'old.domain.com' 'new.domain.com';  # 替换页面中旧域名sub_filter_once off;  # 替换所有匹配内容(默认仅替换首次)
}

说明:适配 Nginx 1.9 + 版本,需根据实际业务调整替换内容和代理地址。

六、问题排查要点

  1. 编译报错:优先检查对应依赖是否安装(如缺失gd-devel导致http_image_filter_module失败、缺失openssl-devel导致http_ssl_module失败);

  2. 版本不一致:源码版本需与已安装版本完全一致(nginx -v查看),否则出现模块兼容性问题;

  3. 权限报错:日志(logs)、临时目录(tmp)需确保 Nginx 运行用户(如 nginx)有读写权限,执行chown -R nginx:nginx 目录路径调整;

  4. 指令无效:通过nginx -V确认模块已编译,nginx -t验证配置语法无误,两者均正常则重启 Nginx 生效。

七、总结

解决sub_filter报错核心是 “验证模块→装依赖→重编译”,而集成全部附加常用模块可避免后续重复编译。实操中需注意版本一致性、依赖完整性与文件备份,确保服务稳定。遇到 Nginx 指令报错,先通过nginx -V排查模块是否存在,再针对性处理,效率更高。

http://www.dtcms.com/a/586227.html

相关文章:

  • cesium126,230420,程序运行时动态加载本地倾斜摄影:使用 C++ 编程
  • 男孩子怎么做网站赚钱wordpress 文章转义
  • DevEco Studio 查看 previewer 里 console.log 的日志
  • 天津河东做网站贵吗青岛网站设计公司联系方式
  • SpringBoot面试题04-BeanDefinition
  • 电脑网站怎么创建到桌面上讲课app怎么制作
  • 东莞网站建设怎么收费wordpress中文分享插件下载
  • CosyVoice 2 部署加速推理模型(Ubuntu 24.04)
  • 【C++初阶】string类的模拟实现
  • 学做网站根学ps有前途吗网站建设费 科目
  • 铁岭做网站包括哪些微信运营工具
  • GUI自动化测试--自动化简单示例
  • 深圳住房建设厅网站首页seop
  • U盾(USB-KEY)的物理组成原理
  • C4D纽扣嵌条和拉链工具详解:服装建模的细节利器
  • 访问中国建设银行官方网站学校网站建设会议讲话稿
  • 沧县网站制作价格网页设计尺寸多大
  • Step7 组态 PC Station 与 CM1243-5 基于 Profibus 的 S7 通信
  • wordpress主题那个好河源网站页面优化ppt
  • 【信号处理】(高斯分布)最大熵定理
  • 网站备案号查电话号码php建站程序
  • 遵化建设局网站近期新闻热点大事件
  • 教育类集群网站建设python做网站优势
  • 未成年人思想道德建设网站招标网上的项目好中标吗
  • 【C++】封装哈希桶实现unordered_map和unordered_set
  • 多语言网站建设应注意哪些事项做沙盘实训在哪个网站做
  • 沈阳专业制作网站东莞家具网站建设
  • 制造业营销外贸网站建设手机网站建设 技术规范
  • C# var 关键字详解:从入门到精通
  • 使用 SQLAlchemy 连接数据库:从基础到最佳实践