在Alpine Linux下编辑/隐藏Nginx服务器标头



当我使用curl --head来测试我的网站时,它会返回服务器信息。

我按照本教程隐藏了nginx服务器标头。 但是当我运行命令时yum install nginx-module-security-headers,则返回yum: not found

我也尝试了apk add nginx-module-security-headers,它显示包丢失了。

我使用nginx:1.17.6-alpine作为我的基本 docker 映像。有谁知道如何从此 Alpine 下的标头隐藏服务器?

我想我这里有一个更简单的解决方案:https://gist.github.com/hermanbanken/96f0ff298c162a522ddbba44cad31081。非常感谢 Github 上的 hermanbanken 分享这个要点。

这个想法是创建一个多阶段构建,使用 nginx 高山图像作为编译模块的基础。这变成以下Dockerfile

ARG VERSION=alpine
FROM nginx:${VERSION} as builder
ENV MORE_HEADERS_VERSION=0.33
ENV MORE_HEADERS_GITREPO=openresty/headers-more-nginx-module
# Download sources
RUN wget "http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz" -O nginx.tar.gz && 
wget "https://github.com/${MORE_HEADERS_GITREPO}/archive/v${MORE_HEADERS_VERSION}.tar.gz" -O extra_module.tar.gz
# For latest build deps, see https://github.com/nginxinc/docker-nginx/blob/master/mainline/alpine/Dockerfile
RUN  apk add --no-cache --virtual .build-deps 
gcc 
libc-dev 
make 
openssl-dev 
pcre-dev 
zlib-dev 
linux-headers 
libxslt-dev 
gd-dev 
geoip-dev 
perl-dev 
libedit-dev 
mercurial 
bash 
alpine-sdk 
findutils
SHELL ["/bin/ash", "-eo", "pipefail", "-c"]
RUN rm -rf /usr/src/nginx /usr/src/extra_module && mkdir -p /usr/src/nginx /usr/src/extra_module && 
tar -zxC /usr/src/nginx -f nginx.tar.gz && 
tar -xzC /usr/src/extra_module -f extra_module.tar.gz
WORKDIR /usr/src/nginx/nginx-${NGINX_VERSION}
# Reuse same cli arguments as the nginx:alpine image used to build
RUN CONFARGS=$(nginx -V 2>&1 | sed -n -e 's/^.*arguments: //p') && 
sh -c "./configure --with-compat $CONFARGS --add-dynamic-module=/usr/src/extra_module/*" && make modules

# Production container starts here
FROM nginx:${VERSION}
COPY --from=builder /usr/src/nginx/nginx-${NGINX_VERSION}/objs/*_module.so /etc/nginx/modules/
.... skipped inserting config files and stuff ...
# Validate the config
RUN nginx -t

Alpine 存储库可能没有ngx_security_headers模块,但是,上述教程还提供了使用该模块的选项Headers More。您应该能够使用以下命令在 alpine 发行版中安装此模块:

apk add nginx-mod-http-headers-more

希望对您有所帮助。

我找到了替代解决方案。它显示二进制不兼容的原因是因为我在目标路由下预装了一个 nginx,并且它与我正在使用的标头更多模块不兼容。这意味着我不能简单地从 Alpine 软件包安装第三方库。

所以我准备了一个干净的Alpine OS,并按照GitHub存储库从源代码构建Nginx,并具有附加功能。生成结果的路径是您指定的前缀路径。

最新更新