nginx_config_generator 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2007 Chris Wanstrath
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,8 @@
1
+ LICENSE
2
+ Manifest.txt
3
+ README
4
+ Rakefile
5
+ bin/generate_nginx_config
6
+ lib/config.yml.example
7
+ lib/nginx.erb
8
+ lib/nginx_config_generator.rb
data/README ADDED
@@ -0,0 +1,17 @@
1
+ A work in progress. Check it: http://errtheblog.com/post/#
2
+
3
+ Use it:
4
+ $ generate_nginx_config nginx_config.yml /etc/nginx.conf
5
+
6
+ See an example config file:
7
+ $ generate_nginx_config --example
8
+
9
+ You can set two environment variables:
10
+ - NGINX_CONFIG_YAML to specify the YAML config file
11
+ - NGINX_CONFIG_FILE to specify the nginx config file
12
+
13
+ By default, generate_nginx_config won't overwrite your OUT file. To rock this behavior,
14
+ pass in --overwrite or -o or -y or --force or -f. Whichever.
15
+
16
+ >> Chris Wanstrath
17
+ => chris[at]ozmm[dot]org
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'echoe'
3
+
4
+ Echoe.new('nginx_config_generator', '1.0') do |p|
5
+ p.rubyforge_name = 'err'
6
+ p.author = 'Chris Wanstrath'
7
+ p.email = 'chris@ozmm.org'
8
+ p.url = 'http://require.errtheblog.com/projects'
9
+ end
@@ -0,0 +1,2 @@
1
+ #! /usr/bin/env ruby
2
+ load File.dirname(__FILE__) + '/../lib/nginx_config_generator.rb'
@@ -0,0 +1,48 @@
1
+ # This defines the default roots and alternate roots.
2
+ # The name (or key) of your site will be sprintf'd with
3
+ # the below root, right.
4
+ root:
5
+ rails: /home/chris/sites/%s/current/public
6
+ default: /home/chris/sites/%s
7
+
8
+ # All your vhosts.
9
+ sites:
10
+ # We're naming this vhost 'errtheblog'
11
+ errtheblog:
12
+ # Two upstream servers to proxy balance.
13
+ upstream:
14
+ - 127.0.0.1:8000
15
+ - 127.0.0.1:8001
16
+ # Just a string of server names.
17
+ server_name: errtheblog.com www.errtheblog.com
18
+ # www.errtheblog.com => errtheblog.com
19
+ no_www: true
20
+ # Just strings that get spit out as rewrites
21
+ rewrites:
22
+ - ^/feed/feedburner http://feeds.feedburner.com/errtheblog
23
+ - ^/feed/atom.xml http://feeds.feedburner.com/errtheblog
24
+ # Which root to use. You can add a custom one here, too.
25
+ root: rails
26
+
27
+ cheat:
28
+ upstream: 127.0.0.1:8020
29
+ server_name: cheat.errtheblog.com
30
+
31
+ subtlety:
32
+ upstream: 127.0.0.1:8021
33
+ server_name: subtlety.errtheblog.com
34
+
35
+ sfruby:
36
+ upstream: 127.0.0.1:8030
37
+ server_name: sfruby.org www.sfruby.org
38
+ no_www: true
39
+ root: rails
40
+
41
+ trac:
42
+ upstream: 127.0.0.1:9000
43
+ server_name: require.errtheblog.com
44
+
45
+ qa:
46
+ server_name: qa.famupdate.com
47
+ auth_file: /home/builder/conf/htpasswd
48
+ root: /home/builder/site
data/lib/nginx.erb ADDED
@@ -0,0 +1,150 @@
1
+ ## http://brainspl.at/nginx.conf.txt
2
+
3
+ #user and group to run as
4
+ user nginx nginx;
5
+
6
+ # number of nginx workers
7
+ worker_processes 2;
8
+
9
+ # pid of nginx master process
10
+ pid logs/nginx.pid;
11
+
12
+ # Number of worker connections. 1024 is a good default
13
+ events {
14
+ worker_connections 1024;
15
+ }
16
+
17
+ # start the http module where we config http access.
18
+ http {
19
+ # pull in mime-types. You can break out your config
20
+ # into as many include's as you want to make it cleaner
21
+ include conf/mime.types;
22
+
23
+ # set a default type for the rare situation that
24
+ # nothing matches from the mimie-type include
25
+ default_type application/octet-stream;
26
+
27
+ # configure log format
28
+ log_format main '$remote_addr - $remote_user [$time_local] $status '
29
+ '"$request" $body_bytes_sent "$http_referer" '
30
+ '"$http_user_agent" "http_x_forwarded_for"';
31
+
32
+ # main access log
33
+ access_log logs/access.log main;
34
+
35
+ # main error log
36
+ error_log logs/error.log debug;
37
+ #error_log logs/error.log debug_http;
38
+
39
+ # no sendfile on OSX
40
+ sendfile on;
41
+
42
+ # These are good default values.
43
+ tcp_nopush on;
44
+ tcp_nodelay off;
45
+ # output compression saves bandwidth
46
+ gzip on;
47
+ gzip_http_version 1.0;
48
+ gzip_comp_level 2;
49
+ gzip_proxied any;
50
+ gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml
51
+ application/xml+rss text/javascript;
52
+
53
+ # this is where you define your mongrel clusters.
54
+ # you need one of these blocks for each cluster
55
+ # and each one needs its own name to refer to it later.
56
+ <% config['sites'].each do |name, site| %>
57
+ <% next unless site['upstream'] %>
58
+ upstream <%= name %> {
59
+ <% Array(site['upstream'] || site['upstreams']).each do |server| %>
60
+ server <%= server %>;
61
+ <% end %>
62
+ }
63
+ <% end %>
64
+
65
+ <% config['sites'].each do |name, site| %>
66
+ # the server directive is nginx's virtual host directive.
67
+ server {
68
+ # port to listen on. Can also be set to an IP:PORT
69
+ listen 80;
70
+
71
+ # sets the domain[s] that this vhost server requests for
72
+ server_name <%= site['server_name'] %>;
73
+
74
+ # doc root
75
+ root <%= (config['root'][ site['root'] || 'default' ] || site['root']) % name %>;
76
+
77
+ # vhost specific access log
78
+ access_log logs/<%= name %>.access.log main;
79
+
80
+ #Set the max size for file uploads to 50Mb
81
+ client_max_body_size 50M;
82
+
83
+ # this rewrites all the requests to the maintenance.html
84
+ # page if it exists in the doc root. This is for capistrano's
85
+ # disable web task
86
+ if (-f $document_root/maintenance.html){
87
+ rewrite ^(.*)$ /maintenance.html last;
88
+ break;
89
+ }
90
+
91
+ <% if site['no_www'] %>
92
+ if ($host ~* "www") {
93
+ rewrite ^(.*)$ http://<%= site['server_name'].split.first %>$1 redirect;
94
+ break;
95
+ }
96
+ <% end %>
97
+
98
+ location / {
99
+ <% Array(site['rewrite'] || site['rewrites']).each do |rewrite| %>
100
+ rewrite <%= rewrite %> break;
101
+ <% end %>
102
+
103
+ <% if site['auth_file'] %>
104
+ auth_basic "<%= name %> requires credentials.";
105
+ auth_basic_user_file <%= site['auth_file'] %>;
106
+ <% end %>
107
+
108
+ # needed to forward user's IP address to rails
109
+ proxy_set_header X-Real-IP $remote_addr;
110
+
111
+ # needed for HTTPS
112
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
113
+ proxy_set_header Host $http_host;
114
+ proxy_redirect false;
115
+ proxy_max_temp_file_size 0;
116
+
117
+ # check for index.html for directory index
118
+ # if its there on the filesystem then rewite
119
+ # the url to add /index.html to the end of it
120
+ # and then break to send it to the next config rules.
121
+ if (-f $request_filename/index.html) {
122
+ rewrite (.*) $1/index.html break;
123
+ }
124
+
125
+ # this is the meat of the rails page caching config
126
+ # it adds .html to the end of the url and then checks
127
+ # the filesystem for that file. If it exists, then we
128
+ # rewite the url to have explicit .html on the end
129
+ # and then send it on its way to the next config rule.
130
+ # if there is no file on the fs then it sets all the
131
+ # necessary headers and proxies to our upstream mongrels
132
+ if (-f $request_filename.html) {
133
+ rewrite (.*) $1.html break;
134
+ }
135
+
136
+ <% if site['upstream'] %>
137
+ if (!-f $request_filename) {
138
+ proxy_pass http://<%= name %>;
139
+ break;
140
+ }
141
+ <% end %>
142
+ }
143
+
144
+ error_page 500 502 503 504 /50x.html;
145
+ location = /50x.html {
146
+ root html;
147
+ }
148
+ }
149
+ <% end %>
150
+ }
@@ -0,0 +1,27 @@
1
+ #! /usr/bin/env ruby
2
+ %w(erb yaml).each &method(:require)
3
+
4
+ def error(message) puts(message) || exit end
5
+ def file(file) "#{File.dirname(__FILE__)}/#{file}" end
6
+
7
+ if ARGV.include? '--example'
8
+ example = file:'config.yml.example'
9
+ error open(example).read
10
+ end
11
+
12
+ env_in = ENV['NGINX_CONFIG_YAML']
13
+ env_out = ENV['NGINX_CONFIG_FILE']
14
+
15
+ error "Usage: generate_nginx_config [config file] [out file]" if ARGV.empty? && !env_in
16
+
17
+ overwrite = !(%w(-y -o -f --force --overwrite) & ARGV).empty?
18
+
19
+ config = YAML.load_file(env_in || ARGV.shift || 'config.yml')
20
+ template = file:'nginx.erb'
21
+
22
+ if File.exists?(out_file = env_out || ARGV.shift || 'nginx.conf') && !overwrite
23
+ error "=> #{out_file} already exists, won't overwrite it. Quitting."
24
+ else
25
+ open(out_file, 'w+').write(ERB.new(File.read(template), nil, '>').result(binding))
26
+ error "=> Wrote #{out_file} successfully."
27
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: nginx_config_generator
5
+ version: !ruby/object:Gem::Version
6
+ version: "1.0"
7
+ date: 2007-04-28 00:00:00 -07:00
8
+ summary: ""
9
+ require_paths:
10
+ - lib
11
+ email: chris@ozmm.org
12
+ homepage: http://require.errtheblog.com/projects
13
+ rubyforge_project: err
14
+ description: ""
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Chris Wanstrath
31
+ files:
32
+ - LICENSE
33
+ - Manifest.txt
34
+ - README
35
+ - Rakefile
36
+ - bin/generate_nginx_config
37
+ - lib/config.yml.example
38
+ - lib/nginx.erb
39
+ - lib/nginx_config_generator.rb
40
+ test_files: []
41
+
42
+ rdoc_options: []
43
+
44
+ extra_rdoc_files: []
45
+
46
+ executables:
47
+ - generate_nginx_config
48
+ extensions: []
49
+
50
+ requirements: []
51
+
52
+ dependencies: []
53
+