Skip to content

xgfone/ngconf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ngconf Build Status GoDoc License

The package ngconf supplies a generic parser of the NGINX config format referring to the implementation python-nginx, and supports Go 1.x.

Example

package main

import (
	"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;
	// #       }
	// #}
}