编译源码安装NGINX后集成ModSecurity遇问题求助
问题解决:NGINX编译ModSecurity报错与Upstream解析失败
一、解决make modules报错问题
出现make: *** No rule to make target 'modules'. Stop.的核心原因是未在NGINX源码根目录执行命令,或configure未正确引入ModSecurity模块,解决步骤:
- 切换到你下载并解压的NGINX 1.18.0源码根目录(例如
cd /root/nginx-1.18.0) - 重新执行configure命令,必须指定ModSecurity的nginx连接器源码路径,示例:
注意替换./configure --add-module=/root/modsecurity-nginx/root/modsecurity-nginx为你实际的ModSecurity连接器源码路径,若之前有其他编译参数,需一并加上(比如--prefix=/usr/local/nginx等) - 执行
make modules,此时会在源码目录的objs子目录下生成ngx_http_modsecurity_module.so模块文件 - 将编译好的模块复制到NGINX的模块目录(比如
/usr/local/nginx/modules/):cp objs/ngx_http_modsecurity_module.so /usr/local/nginx/modules/ - 在NGINX主配置文件
nginx.conf的最顶部添加模块加载指令:load_module modules/ngx_http_modsecurity_module.so;
二、解决Upstream主机未找到问题
出现nginx: [emerg] host not found in upstream "website.com"是因为配置中指定的后端主机无法被DNS解析或地址错误,解决步骤:
- 打开报错的配置文件
/etc/nginx/sites-enabled/site.conf,定位到第39行的upstream配置块 - 针对
website.com做以下检查:- 用
ping website.com或nslookup website.com测试服务器是否能解析该域名,若解析失败,替换为后端服务器的真实IP地址 - 若该域名是测试用的占位符,临时替换为
localhost(如果本地有后端服务),或注释掉整个upstream块及关联的proxy_pass指令(仅测试配置用)
- 用
- 修改后执行
sudo nginx -t验证配置,无报错后执行sudo systemctl reload nginx生效
内容的提问来源于stack exchange,提问作者masterofconsfu
相关产品推荐
相关产品推荐

