nginx-jsconf
v0.1.2
Published
A library and a CLI tool to convert nginx configuration from YAML or JSON to nginx configuration format.
Downloads
29
Readme
This project provides a JavaScript library and a CLI tool to convert nginx configuration from YAML or JSON format to nginx configuration format, as well as functions to traverse and transform the configuration.
See jirutka/nginx-json-schema for description of the YAML/JSON format.
Install CLI
Using npm
npm install --global nginx-jsconf
Download from Releases
nginx-jsconf is also provided as a single JavaScript file with bundled dependencies, requiring only Node.js (version 18 or later) on the system.
curl -LO https://github.com/jirutka/nginx-jsconf/releases/download/v0.1.2/nginx-jsconf.mjs
curl -fsSL https://github.com/jirutka/nginx-jsconf/releases/download/v0.1.2/checksums.txt | sha256sum -c --ignore-missing
install -D -m755 nginx-jsconf.mjs -t /usr/local/bin/
Examples
CLI: Convert configuration from YAML to nginx format
nginx-jsconf --context main --out nginx.conf nginx.yml
JavaScript: Convert JS(ON) object to nginx format
import { stringify } from 'nginx-jsconf'
const config = {
server: [
{
listen: '443 http2 ssl',
server_name: 'example.org',
allow: [
'127.0.0.1/8',
'10.12.0.0/16',
],
deny: 'all',
location: {
'/': {
proxy_pass: 'http://1.2.3.4',
proxy_set_header: {
Host: '$http_host',
'X-Forwarded-For': '$proxy_add_x_forwarded_for',
'X-Forwarded-Host': '$host',
},
proxy_buffering: false,
},
'~ \\.(?:css|js)$': {
add_header: {
'Cache-Control': '"max-age=31556952, public"',
}
}
}
}
]
}
console.log(stringify('http', config, { indentation: 4 }))
JavaScript: Transform configuration
import { transform } from 'nginx-jsconf'
const addProxyHeadersTransformer = {
name: ['server', 'location', 'if'],
block: true,
if: context => 'proxy_pass' in context,
transform: context => ({
...context,
proxy_set_header: {
...context.proxy_set_header,
'X-Forwarded-For': '$proxy_add_x_forwarded_for',
'X-Forwarded-Host': '$host',
}
})
}
const adjustIncludePathTransformer = {
name: 'include',
context: ['server', 'location'],
block: false,
transform: value => {
const values = Array.isArray(value) ? value : [value]
return values.map(name => `/etc/nginx/incl/${name}.conf`)
}
}
const newConfig = transform('main', config, [
addProxyHeadersTransformer,
adjustIncludePathTransformer,
])
License
This project is licensed under MIT License.