Skip to main content

Nginx Static Analysis

nginx-static-analysis

Parse Nginx configurations on your host and filter for directives/values.

Largely powered by Crossplane.

Installation

You're able to find the nginx-static-analysis binary in the following places:

# Pip
pip install nginx-static-analysis

# Arch
yay -S nginx-static-analysis-git

Analysing your Nginx configuration

You can list any directive within your Nginx configuration. For example, show all listen directives:

app@wifbtb-testalex-magweb-cmbl:~$ nginx-static-analysis -d listen
+-------------------------------------------------+--------------------+-------------------------------------+
|                       File                      |       Values       |              Directives             |
+-------------------------------------------------+--------------------+-------------------------------------+
|      /etc/nginx/servers/example.com.conf:3      |         80         | http -> include -> server -> listen |
|      /etc/nginx/servers/example.com.conf:4      |        443         | http -> include -> server -> listen |
|      /etc/nginx/servers/example.com.conf:5      |        8080        | http -> include -> server -> listen |
|      /etc/nginx/servers/example.com.conf:6      |        8888        | http -> include -> server -> listen |
| /etc/nginx/servers/testalex.hypernode.io.conf:3 | 80 default_server  | http -> include -> server -> listen |
| /etc/nginx/servers/testalex.hypernode.io.conf:4 | 443 default_server | http -> include -> server -> listen |
+-------------------------------------------------+--------------------+-------------------------------------+

Filtering also works for values, like showing all location blocks with value /. This shows you the tree leading up to the filtered values, and all children under the filter:

app@wifbtb-testalex-magweb-cmbl:~$ nginx-static-analysis -f location=/
+-------------------------------------------------+-----------------------+-----------------------------------------------------+
|                       File                      |         Values        |                      Directives                     |
+-------------------------------------------------+-----------------------+-----------------------------------------------------+
|             /etc/nginx/nginx.conf:10            |                       |                         http                        |
|             /etc/nginx/nginx.conf:87            |  /etc/nginx/servers/* |                   http -> include                   |
|      /etc/nginx/servers/example.com.conf:1      |                       |              http -> include -> server              |
|      /etc/nginx/servers/example.com.conf:8      |           /           |        http -> include -> server -> location        |
|      /etc/nginx/servers/example.com.conf:9      | http://localhost:8003 | http -> include -> server -> location -> proxy_pass |
| /etc/nginx/servers/testalex.hypernode.io.conf:1 |                       |              http -> include -> server              |
| /etc/nginx/servers/testalex.hypernode.io.conf:6 |           /           |        http -> include -> server -> location        |
| /etc/nginx/servers/testalex.hypernode.io.conf:7 |          403          |   http -> include -> server -> location -> return   |
+-------------------------------------------------+-----------------------+-----------------------------------------------------+

If you only want to show the filtered values, or any children under the filtered values, simply specify that you want to show that directive:

app@wifbtb-testalex-magweb-cmbl:~$ nginx-static-analysis -f location=/ -d return -d location
+--------------------------------------------------+---------+-------------------------------------------------+
|                       File                       |  Values |                    Directives                   |
+--------------------------------------------------+---------+-------------------------------------------------+
| /etc/nginx/servers/testalex.hypernode.io.conf:6  |    /    |      http -> include -> server -> location      |
| /etc/nginx/servers/testalex.hypernode.io.conf:7  |   403   | http -> include -> server -> location -> return |
| /etc/nginx/servers/testalex.hypernode.io.conf:10 | /banaan |      http -> include -> server -> location      |
| /etc/nginx/servers/testalex.hypernode.io.conf:11 |   404   | http -> include -> server -> location -> return |
|      /etc/nginx/servers/example.com.conf:8       |    /    |      http -> include -> server -> location      |
+--------------------------------------------------+---------+-------------------------------------------------+

By default it parses /etc/nginx/nginx.conf and all includes, but you can specify the starting file:

app@wifbtb-testalex-magweb-cmbl:~$ nginx-static-analysis -f /some/other/nginx.conf -d location
...

Feeding logs into the analysis

You can feed access/error logs into the analysis by piping it into stdin:

app@wifbtb-testalex-magweb-cmbl:~$ tail /var/log/nginx/access.log -n1 | nginx-static-analysis d location
+----------------------------------------------------+--------+------------------------------------------+
|                        File                        | Values |                Directives                |
+----------------------------------------------------+--------+------------------------------------------+
|            /etc/nginx/testsite.conf:18             |   /    |  http -> include -> server -> location   |
| /etc/nginx/sites/http.testalex.hypernode.io.conf:8 |   /    |            server -> location            |
|            /etc/nginx/magento2.conf:17             |   /    | server -> include -> include -> location |
+----------------------------------------------------+--------+------------------------------------------+

The analysis creates filters based on the incoming loglines. Those filters are combined with the arguments given to the nginx-static-analysis command.

Development

This package is using Python >=3.7. Simply pip install -r requirements/base.txt into your local venv to install the dependencies.

Testing

This package uses pytest for testing. You can run the tests with pytest, which will invoke an Nginx container with some sample configs. If not present, it'll be built automatically.

Build

This package can be build locally:

# Arch
pip install -r requirements/development.txt
makepkg -sCf  # Include -i to install the package locally

Metadata

Release files for nginx-static-analysis 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nginx-static-analysis 0.3.1
File Size Uploaded
nginx_static_analysis-0.3.1.tar.gz 13.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nginx-static-analysis 0.3.1
File Interpreter ABI Platform
nginx_static_analysis-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 25.8 kB

Release files / nginx_static_analysis-0.3.1.tar.gz

Download URL nginx_static_analysis-0.3.1.tar.gz
Size 13.2 kB
Tags Source
SHA-256 checksum
How to use checksums
2845789a5f32e5c2643f65faca64f146445a4745799fe52266ae244070a0757a
BLAKE2b-256 checksum
How to use checksums
80e82fe10457d4b637d3f958102c6592f473f5d936052675a6fe32676aa2ea12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release files / nginx_static_analysis-0.3.1-py3-none-any.whl

Download URL nginx_static_analysis-0.3.1-py3-none-any.whl
Size 12.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
885ddb0718a13f4622f57db06682dbac6786affb12dd488776d6454be633cb23
BLAKE2b-256 checksum
How to use checksums
c073578e6d327507040337cf898e9cf429d6951f663d43dedb6bcd663735d860
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.9.19

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.2.9

1 release file

0.2.8

1 release file

0.2.6

1 release file

0.2.5

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

2 release files

0.1.1

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page