Docker 启动 Nginx 容器,如何增加拓展模块 ngx_http_stub_status_module?
如何在 Dockerfile 中构建包含此模块的 Nginx 镜像,我的目的是启动对 Nginx 的监控。
ngx_http_stub_status_module 模块提供对基本状态信息的访问。
这个模块不是默认构建的,它应该使用“--with-http_stub_status_module”配置参数来启用。
我创建了使用 Nginx 作为 Web 服务器的静态资源网站,现在打算用 Grafana 和 Prometheus 来监控此 Nginx,根据 nginx-prometheus-exporter 的文档,我需要安装此模块。注意:我想要在 Dockerfile 中构建,而不是在宿主机上二进制编译安装。
虽然 Nginx 默认不支持上述模块,但我在 Nginx 官方 Docker 镜像中发现编译了该模块。
nginx version: nginx/1.23.4
built by gcc 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4)
built with OpenSSL 3.0.7 1 Nov 2022 (running with OpenSSL 3.0.8 7 Feb 2023)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-perl_modules_path=/usr/lib/perl5/vendor_perl --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-Os -fomit-frame-pointer -g' --with-ld-opt=-Wl,--as-needed,-O1,--sort-common
经验证,Nginx Offical Docker Image 内置编译了ngx_http_stub_status_module模块。
拓展 Docker-Nginx 镜像的方法:
- 基于 docker-nginx 仓库提供的 modules 编译 Dockerfile,自定义构建镜像。
- docker-nginx 提供了更方便的构建方式 docker-nginx/pkg-oss,可以一键构建。优点是简单方便,缺点是只支持提供的模块。
- 使用第三方 Nginx 容器镜像而不是官方镜像,自行搜索。
参考
- pkg-oss https://github.com/nginx/pkg-oss
- docker-nginx https://github.com/nginxinc/docker-nginx
- How to Add Modules to Nginx Docker Image https://www.youtube.com/watch?v=26gcFN8-1Do
- What do I need to change in NGINX official Docker's image to have the set-misc-nginx module? https://stackoverflow.com/questions/57739560/what-do-i-need-to-change-in-nginx-official-dockers-image-to-have-the-set-misc-n
回答已在提问中更新。