GithubHelp home page GithubHelp logo

xgfone / ngconf Goto Github PK

View Code? Open in Web Editor NEW
6.0 3.0 1.0 12 KB

A generic parser of the NGINX config format

License: Apache License 2.0

Go 100.00%
nginx conf config configuration nginx-conf nginx-configuration

ngconf's Introduction

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

ngconf's People

Contributors

xgfone avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

imginx

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.