如何查找Amazon Linux 2上通过amazon-linux-extras安装的NGINX源代码
针对Amazon Linux 2 通过amazon-linux-extras安装的Nginx 1.20获取并修改源码的操作方案
前置说明
通过amazon-linux-extras安装的Nginx是预编译的二进制包,默认不会附带源代码,你需要手动下载对应版本的源码包进行修改编译。
步骤1:获取当前Nginx的编译参数
编译替换前需要匹配原有Nginx的所有编译配置,避免功能缺失,执行以下命令导出参数:
nginx -V
复制输出内容中configure arguments:后面的全部内容,后续编译配置会用到。
步骤2:下载对应版本的Nginx源码
执行以下操作下载对应源码包:
- 先启用对应源并安装依赖工具:
amazon-linux-extras enable nginx1 yum install -y yum-utils - 下载Nginx源码RPM包:
yumdownloader --source nginx - 解压源码包:
rpm2cpio nginx-1.20*.src.rpm | cpio -idmv
解压完成后,ngx_http_header_filter_module.c的路径为:./BUILD/nginx-1.20.x/src/http/ngx_http_header_filter_module.c(x为你当前安装的小版本号)
步骤3:修改服务器响应头内容
打开ngx_http_header_filter_module.c,找到以下两行定义:
static char ngx_http_server_string[] = "Server: nginx" CRLF; static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
将引号内的字符串修改为你想要的响应头内容即可,比如完全隐藏Nginx标识可以改成:
static char ngx_http_server_string[] = "Server: " CRLF; static char ngx_http_server_full_string[] = "Server: " CRLF;
步骤4:编译替换原有Nginx二进制
- 安装编译依赖:
yum install -y gcc pcre-devel zlib-devel openssl-devel - 进入解压后的Nginx源码根目录,粘贴之前复制的configure参数并执行:
./configure [你之前复制的全部configure参数] - 执行编译:
make - 备份原有Nginx二进制文件,避免出错:
cp /usr/sbin/nginx /usr/sbin/nginx.bak - 替换新编译的二进制文件:
cp objs/nginx /usr/sbin/nginx - 测试配置合法性,没问题后重启服务生效:
nginx -t systemctl restart nginx
额外说明
- 如果你只需要隐藏Nginx版本号,不需要完全自定义Server头,不需要修改源码,直接在Nginx配置的http块中添加
server_tokens off;即可实现。 - 为了避免后续yum更新覆盖你修改的版本,可以在
/etc/yum.conf中添加exclude=nginx*,将Nginx加入更新排除列表。
内容的提问来源于stack exchange,提问作者PythonicExperience
相关产品推荐
相关产品推荐

