Sign inSign up

vincejv/nginx

By vincejv

•Updated 4 months ago
Archived

FreeNGINX clang + glibc + quic + http/3, (this image is archived: use vincejv/angie)

Image
Web servers
0

8.3K

vincejv/nginx repository overview

ā āš ļø ARCHIVED REPOSITORY

This Docker image is officially archived and is no longer being maintained.

ā šŸ“¦ Migration Notice

Please migrate to the new, updated repository for active development, security patches, and updates, the project has switched to Angie for metrics availability:

šŸ‘‰ vincejv/angie on Docker Hub⁠ or ghcr.io/vincejv/angie on Github⁠


⁠What was this?

A stable and up-to-date FreeNGINX⁠ build featuring:

Thank you for using this image! Please update your Dockerfiles and compose files to point to vincejv/angie going forward.

⁠What is this?

Docker Image CI

Stable and up-to-date FreeNGINX⁠ with QUIC + HTTP/3 support⁠, Google's brotli compression⁠, njs module⁠ and Grade A+ SSL config⁠

⁠How to use this image

As this project is based on the official nginx image⁠ look for instructions there. In addition to the standard configuration directives, you'll be able to use the brotli module specific ones, see here for official documentation⁠

docker pull vincejv/nginx:latest

You can fetch an image from Github Containers Registry⁠ as well:

docker pull ghcr.io/vincejv/nginx:latest

⁠What's inside

$ docker run -it vincejv/nginx nginx -V
nginx version: freenginx/1.27.2 (quic-2a847df38232)
built by gcc 13.2.1 20231014 (Alpine 13.2.1_git20231014) 
built with OpenSSL 3.3.1 4 Jun 2024
TLS SNI support enabled
configure arguments: 
	--build=quic-2a847df38232
	--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/nginx.pid 
	--lock-path=/var/run/nginx/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 
	--user=nginx 
	--group=nginx 
	--with-http_ssl_module 
	--with-http_realip_module 
	--with-http_addition_module 
	--with-http_sub_module 
	--with-http_dav_module 
	--with-http_flv_module 
	--with-http_mp4_module 
	--with-http_gunzip_module 
	--with-http_gzip_static_module 
	--with-http_random_index_module 
	--with-http_secure_link_module 
	--with-http_stub_status_module 
	--with-http_auth_request_module 
	--with-http_xslt_module=dynamic 
	--with-http_image_filter_module=dynamic 
	--with-http_geoip_module=dynamic 
	--with-http_perl_module=dynamic 
	--with-threads 
	--with-stream 
	--with-stream_ssl_module 
	--with-stream_ssl_preread_module 
	--with-stream_realip_module 
	--with-stream_geoip_module=dynamic 
	--with-http_slice_module 
	--with-mail 
	--with-mail_ssl_module 
	--with-compat 
	--with-file-aio 
	--with-http_v2_module 
	--with-http_v3_module 
	--add-module=/usr/src/ngx_brotli 
	--add-module=/usr/src/headers-more-nginx-module-0.37 
	--add-module=/usr/src/njs/nginx 
	--add-dynamic-module=/usr/src/ngx_http_geoip2_module

$ docker run -it vincejv/nginx njs -v
0.8.4

⁠SSL Grade A+ handling

Please refer to Mozilla's SSL Configuration Generator⁠. This image has https://ssl-config.mozilla.org/ffdhe2048.txt DH parameters for DHE ciphers fetched and stored in /etc/ssl/dhparam.pem:

    ssl_dhparam /etc/ssl/dhparam.pem;

See ssllabs.com test results for matrix.vincejv.com⁠.

⁠nginx config files includes

  • .conf files mounted in /etc/nginx/main.d will be included in the main nginx context (e.g. you can call env directive⁠ there)
  • .conf files mounted in /etc/nginx/conf.d will be included in the http nginx context

⁠QUIC + HTTP/3 support

Screenshot 2021-05-19 at 16 31 10

Please refer to tests/https.conf config file for an example config used by the tests. And to Cloudflare docs on how to enable http/3 support in your browser⁠.

server {
    # http/3
    listen 443 quic reuseport;

    # http/2 and http/1.1
    listen 443 ssl;
    http2 on;

    server_name localhost;  # customize to match your domain

    # you need to mount these files when running this container
    ssl_certificate     /etc/nginx/ssl/localhost.crt;
    ssl_certificate_key /etc/nginx/ssl/localhost.key;

    # TLSv1.3 is required for QUIC.
    ssl_protocols TLSv1.2 TLSv1.3;

    # 0-RTT QUIC connection resumption
    ssl_early_data on;

    # Add Alt-Svc header to negotiate HTTP/3.
    add_header alt-svc 'h3=":443"; ma=86400';

    # Sent when QUIC was used
    add_header QUIC-Status $http3;

    location / {
        # your config
    }
}

Refer to run-docker.sh script on how to run this container and properly mount required config files and assets.

⁠Development

Building an image:

docker pull ghcr.io/vincejv/nginx:latest
DOCKER_BUILDKIT=1 docker build . -t vincejv/nginx --cache-from=ghcr.io/vincejv/nginx:latest --progress=plain
⁠Docker Compose example

It is necessary to expose both UDP and TCP ports to be able to HTTP/3

  nginx:
    image: vincejv/nginx
    ports:
      - '443:443/tcp'
      - '443:443/udp' # use UDP for usage of HTTP/3

Note: both TCP and UDP HTTP/3 ports needs to be the same

Tag summary

Content type

Image

Digest

sha256:baf4fc441…

Size

54.6 MB

Last updated

4 months ago

docker pull vincejv/nginx