Skip to content

Commit 0677cc8

Browse files
committed
Docs: clarify build requirements and SSL library support.
1 parent 17bf911 commit 0677cc8

File tree

1 file changed

+38
-4
lines changed

1 file changed

+38
-4
lines changed

README.md

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,47 @@ The module implements following specifications:
2424

2525
### Requirements
2626

27+
- NGINX sources, 1.25.0 or later.
2728
- Regular NGINX build dependencies: C compiler, make, PCRE2, Zlib
2829
- System-wide installation of OpenSSL 1.1.1 or later
2930
- Rust toolchain (1.81.0 or later)
31+
- `pkg-config` or `pkgconf`
3032
- [libclang] for rust-bindgen
3133

34+
The NGINX and its dependency versions should match the ones you plan to deploy,
35+
including any patches that change the API.
36+
37+
> [!TIP]
38+
> The module built against a specific release of unmodified NGINX Open Source
39+
> with `--with-compat --with-http_ssl_module` is compatible with a corresponding
40+
> release of NGINX Plus.
41+
> Refer to https://www.f5.com/company/blog/nginx/compiling-dynamic-modules-nginx-plus
42+
3243
[libclang]: https://rust-lang.github.io/rust-bindgen/requirements.html
3344

45+
#### Important note on SSL libraries
46+
47+
It is important to ensure that the module uses the same SSL implementation as
48+
NGINX. SSL contexts and certificate objects are passed between the module and
49+
NGINX code, and any mismatches in types can cause memory issues and crashes.
50+
51+
The best way to guarantee this is to build both with a system-provided shared
52+
library.
53+
54+
If you absolutely have to use an alternative SSL implementation, ensure that
55+
the module uses it during build by setting appropriate
56+
[`OPENSSL_*` variables](https://docs.rs/openssl/latest/openssl/#manual) for the
57+
Rust bindings to OpenSSL. Check [build-aws-lc.mk](build/build-aws-lc.mk) and
58+
[build-aws-lc-static.mk](build/build-aws-lc-static.mk) CI configurations for
59+
examples.
60+
61+
Also, note that dynamic build of the module must use dynamic linking for the SSL
62+
library. Static linking in that scenario will result in two copies of the
63+
library code with independent global state.
64+
65+
See [SSL library compatibility](https://github.com/nginx/nginx-acme/wiki/Compatibility#ssl-libraries)
66+
in the project wiki for the state of support of alternative SSL implementations.
67+
3468
### Building
3569

3670
One way to build the module is to export a path to a configured NGINX source
@@ -67,9 +101,9 @@ auto/configure, all the module build-time options are set via environment
67101
variables passed to the `cargo build` or `make` commands.
68102
Currently accepted options are:
69103

70-
- `NGX_ACME_STATE_PREFIX`: sets a default prefix for per-issuer state paths.
71-
If unset, state paths are created relative to the NGINX prefix directory.
72-
The prefix directory should exist and be readable to the worker processes.
104+
- `NGX_ACME_STATE_PREFIX`: sets a default prefix for per-issuer state paths.
105+
If unset, state paths are created relative to the NGINX prefix directory.
106+
The prefix directory should exist and be readable to the worker processes.
73107

74108
Example:
75109

@@ -262,7 +296,7 @@ Enables or disables verification of the ACME server certificate.
262296

263297
**Syntax:** state_path `path` | `off`
264298

265-
**Default:** acme_`name` or `$NGX_ACME_STATE_PREFIX`/acme_`name`
299+
**Default:** acme\_`name` or `$NGX_ACME_STATE_PREFIX`/acme\_`name`
266300

267301
**Context:** acme_issuer
268302

0 commit comments

Comments
 (0)