nginx-quic-webdav
Full-featured mainline nginx with QUIC/HTTP3, SSL, aio, stream, WebDAV + dav-ext, Brotli, GeoIP2
2.4K
A full-featured mainline nginx built from source with QUIC & HTTP/3, WebDAV, and a curated set of commonly used modules for reverse-proxy and media workloads.
This image includes WebDAV via ngx_http_dav_module plus dav-ext with a patch for proper hidden-file support (useful for clients that rely on correct behavior around dotfiles). The dav-ext module comes from my fork (credits to @mid1221213):
Fork (snapshot): https://github.com/kuchkovsky/nginx-dav-ext-module
Upstream (original): https://github.com/mid1221213/nginx-dav-ext-module
Core build options:
- --with-compat
- --with-debug
- --with-pcre-jit
- --with-threads
- --with-file-aio
HTTP (built-in):
- --with-http_ssl_module
- --with-http_v2_module
- --with-http_v3_module
- --with-http_realip_module
- --with-http_dav_module
- --with-http_stub_status_module
- --with-http_auth_request_module
- --with-http_slice_module
- --with-http_addition_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_secure_link_module
- --with-http_sub_module
Note:
- gRPC and upstream zone are built-in by default in nginx mainline (no --with flags).
Stream/Mail (dynamic built-in):
- --with-stream=dynamic
- --with-stream_ssl_module
- --with-stream_ssl_preread_module
- --with-stream_realip_module
- --with-mail=dynamic
- --with-mail_ssl_module
Dynamic built-in HTTP modules:
- --with-http_image_filter_module=dynamic
- --with-http_perl_module=dynamic
- --with-http_xslt_module=dynamic
Third-party modules:
- dav-ext (static): nginx-dav-ext-module (fork linked above)
- Brotli (dynamic): ngx_brotli
- GeoIP2 (dynamic): ngx_http_geoip2_module (MaxMind DB)
- Headers-More (dynamic): headers-more-nginx-module
Dynamic modules are shipped as .so files under /usr/lib/nginx/modules. They are not active until you load them near the top of nginx.conf:
# You can load the modules either directly near the top of nginx.conf,
# or by placing small *.conf files with these load_module lines into:
# /etc/nginx/modules-enabled/
# (and including that directory from nginx.conf).
#
# Load only the modules you use.
#
# Note: load_module directives must be evaluated before "http { }", "stream { }", etc.
# Brotli compression (HTTP)
load_module /usr/lib/nginx/modules/ngx_http_brotli_filter_module.so;
load_module /usr/lib/nginx/modules/ngx_http_brotli_static_module.so;
# GeoIP2 (MaxMind DB based geo lookup for HTTP)
load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so;
# headers-more (add/clear/replace response/request headers beyond built-ins)
load_module /usr/lib/nginx/modules/ngx_http_headers_more_filter_module.so;
# Built-in dynamic HTTP modules
load_module /usr/lib/nginx/modules/ngx_http_image_filter_module.so;
load_module /usr/lib/nginx/modules/ngx_http_xslt_filter_module.so;
load_module /usr/lib/nginx/modules/ngx_http_perl_module.so;
# Built-in dynamic core modules (stream/mail)
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
load_module /usr/lib/nginx/modules/ngx_mail_module.so;
If you do not need a feature, do not load its module.
Default container config exposes HTTP on port 80. Quick test:
docker run --rm -p 8080:80 --name nginx-test kuchkovsky/nginx-quic-webdav:latest
Test:
curl -i http://localhost:8080/
services:
nginx:
image: kuchkovsky/nginx-quic-webdav:latest
container_name: nginx
restart: unless-stopped
ports:
- "80:80/tcp"
- "443:443/tcp"
- "443:443/udp"
volumes:
- ./config:/etc/nginx:ro
- ./log:/var/log/nginx:rw
Start:
docker compose up -d
docker compose logs -f
443/udp (or use host networking).--with-debug does not enable debug logs by default. To enable debug logging, set error_log ... debug; in nginx.conf..mmdb and geoip2 directives. The module alone does nothing.Content type
Image
Digest
sha256:62334d4e3…
Size
30.7 MB
Last updated
5 days ago
docker pull kuchkovsky/nginx-quic-webdav