https://github.com/xgfone/ngconf
A generic parser of the NGINX config format
https://github.com/xgfone/ngconf
conf config configuration nginx nginx-conf nginx-configuration
Last synced: 3 months ago
JSON representation
A generic parser of the NGINX config format
- Host: GitHub
- URL: https://github.com/xgfone/ngconf
- Owner: xgfone
- License: apache-2.0
- Created: 2020-01-10T14:12:52.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-04-29T12:50:25.000Z (about 4 years ago)
- Last Synced: 2025-01-31T18:56:56.315Z (4 months ago)
- Topics: conf, config, configuration, nginx, nginx-conf, nginx-configuration
- Language: Go
- Size: 11.7 KB
- Stars: 6
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ngconf [](https://travis-ci.org/xgfone/ngconf) [](http://godoc.org/github.com/xgfone/ngconf) [](https://raw.githubusercontent.com/xgfone/ngconf/master/LICENSE)
The package `ngconf` supplies a generic parser of the `NGINX` config format referring to the implementation [python-nginx](https://github.com/radiosilence/python-nginx), and supports Go `1.x`.
## Example
```go
package mainimport (
"fmt""github.com/xgfone/ngconf"
)const conf = `
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;events {
worker_connections 768;
# multi_accept on;
}stream {
server {
listen 127.0.0.1:8443;
proxy_connect_timeout 1s;
proxy_pass backend;
}
}http {
##
# Basic Settings
##sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;# server_names_hash_bucket_size 64;
# server_name_in_redirect off;include /etc/nginx/mime.types;
default_type application/octet-stream;##
# SSL Settings
### Dropping SSLv3, ref: POODLE
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;##
# Logging Settings
##access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;##
# Gzip Settings
##gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;##
# Virtual Host Configs
##include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}`func main() {
root, err := ngconf.Decode(conf)
if err != nil {
fmt.Println(err)
return
}// Remove a config block.
root.Del("events")// Add a new config item.
stream := root.Get("stream")[0]
backend := stream.Add("upstream", "backend")
backend.Add("hash", "$remote_addr", "consistent")
backend.Add("server", "backend1:443", "max_fails=3", "fail_timeout=30s")// // Get a config item.
backend = stream.Get("upstream", "backend")[0]
hash := backend.Get("hash", "$remote_addr")
fmt.Println(len(hash), "node:", hash[0].Directive, hash[0].Args)// Print the whole config.
fmt.Println("========================= Config =========================")
fmt.Println(root)/// Output:
//
// 1 node: hash [$remote_addr consistent]
// ========================= Config =========================
// user www-data;
// worker_processes auto;
// pid /run/nginx.pid;
// include /etc/nginx/modules-enabled/*.conf;
//
// stream {
// server {
// listen 127.0.0.1:8443;
// proxy_connect_timeout 1s;
// proxy_pass backend;
// }
//
// upstream backend {
// hash $remote_addr consistent;
// server backend1:443 max_fails=3 fail_timeout=30s;
// }
// }
//
// http {
// ##
// # Basic Settings
// ##
// sendfile on;
// tcp_nopush on;
// tcp_nodelay on;
// keepalive_timeout 65;
// types_hash_max_size 2048;
//
// # server_tokens off;
// # server_names_hash_bucket_size 64;
// # server_name_in_redirect off;
// include /etc/nginx/mime.types;
// default_type application/octet-stream;
//
// ##
// # SSL Settings
// ##
// # Dropping SSLv3, ref: POODLE
// ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
// ssl_prefer_server_ciphers on;
//
// ##
// # Logging Settings
// ##
// access_log /var/log/nginx/access.log;
// error_log /var/log/nginx/error.log;
//
// ##
// # Gzip Settings
// ##
// gzip on;
//
// # gzip_vary on;
// # gzip_proxied any;
// # gzip_comp_level 6;
// # gzip_buffers 16 8k;
// # gzip_http_version 1.1;
// # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
// ##
// # Virtual Host Configs
// ##
// include /etc/nginx/conf.d/*.conf;
// include /etc/nginx/sites-enabled/*;
// }
//
// #mail {
// # # See sample authentication script at:
// # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
// #
// # # auth_http localhost/auth.php;
// # # pop3_capabilities "TOP" "USER";
// # # imap_capabilities "IMAP4rev1" "UIDPLUS";
// #
// # server {
// # listen localhost:110;
// # protocol pop3;
// # proxy on;
// # }
// #
// # server {
// # listen localhost:143;
// # protocol imap;
// # proxy on;
// # }
// #}
}
```