我读过很多关于StackOverflow的问题。对很多人来说,它们很有帮助,但对我来说没有。
我需要隐藏服务器名称,或者至少更改它。
我编写了一个docker文件,用于下载一个动态模块并在下一步将其注入到配置中。
ARG VERSION=alpine
FROM nginx:${VERSION} as builder
ENV MORE_HEADERS_VERSION=0.34
ENV MORE_HEADERS_GITREPO=openresty/headers-more-nginx-module
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
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}
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
FROM nginx:${VERSION}
COPY --from=builder /usr/src/nginx/nginx-${NGINX_VERSION}/objs/*_module.so /etc/nginx/modules/
COPY devops/nginx/nginx.conf /etc/nginx/
EXPOSE 81 82
CMD ["nginx", "-g", "daemon off;"]
然后,我将该模块添加到nginx.conf
文件中(我还尝试不使用“”加载该模块)
load_module "modules/ngx_http_headers_more_filter_module.so";
最后,我写了http块
http{
more_clear_headers server;
more_set_headers "server: hidden";
server_tokens off;
proxy_pass_header server; //Tried to add it for reverse proxying, but it did not work
}
仅关闭服务器令牌;工作。我已经删除了nginx版本,但没有它的签名。more_clear_headers和more_set_headers不影响它。我错过了什么?
P.S.检查了服务器中的模块文件夹,我的模块加载正确
P.P.S.尝试了大写S的服务器,也没有成功(正如许多人建议的那样,但我的响应是小写的)
1条答案
按热度按时间tyu7yeag1#
除非您使用Nginx Plus(付费)或自己构建Nginx并删除源代码中包含的头文件,否则服务器头文件无法删除。
https://serverfault.com/questions/214242/can-i-hide-all-server-os-info的副本