Automatically set up Nginx as a proxy to backend application servers or Apache. Provides a definition to use in recipes, and automatically configures proxies based on attributes.
This cookbook's home is at https://github.com/3ofcoins/chef-cookbook-nginx-proxy/
- nginx
- apache2 (included only if apache backend is used)
This cookbook provides an nginx_proxy definition that can be used
directly in recipes, and uses it to automatically configure proxies
based on attributes.
To use the definition, include the cookbook in your cookbook's
depends, optionally add recipe[nginx-proxy::setup] to the run
list, and use nginx_proxy in your recipes.
name- name of the file insites-available/; default value forserver_nameserver_name- server name for nginxssl_key- basename of SSL keyssl_key_path- full path to SSL private key, defaults to"#{ssl_key}.key"innode['nginx_proxy']['ssl_key_dir']ssl_certificate_path- full path to SSL certificate (full PEM file including intermediate certificates). Defaults to"#{ssl_key}.pem"innode['nginx_proxy']['ssl_certificate_dir]port- port on localhost for the backendapache(value optional) - if provided and true, configure Apache to listen onnode['nginx_proxy']['apache_port']and use it as a backendurl- full URL to backend, can be used instead ofportorapacheredirect- if true, redirect to theurlrather than proxy its contentaka- can be set to one or more aliases that will redirect to the proxy. Last parameter may be a hash specifying parameters fornginx_proxycalls for the aliases (e.g. SSL keys)custom_config- string, or a list of strings (lines), to include verbatim in the configuration.location_config- string, or a list of strings (lines), to include verbatim in the location configuration.allow_origin- regular expression of origins to enable CORS for. Note:*is not supported in this mechanism, for open CORS use acustom_configsnippet. If this is set, following parameters can be used to further customize the configuration:access_control_allow_credentialsif set totrue, theAccess-Control-Allow-Credentialswill be setaccess_control_allow_headerscan be set to list of allowed headersaccess_control_allow_methodscan be set to list of allowed methods (defaults to['GET', 'OPTIONS'];OPTIONSis always added and doesn't need to be specified)access_control_max_agecan be set to configure validity of preflight response
nginx_proxy 'icinga.example.com' do
apache
ssl_key 'star.example.com'
endnginx_proxy 'nagios.example.com' do
url 'https://icinga.example.com'
redirect true
endnginx_proxy 'new.example.com' do
apache
ssl_key 'star.example.com'
aka 'old.example.com', 'yet-older.example.com',
ssl_key: 'star.example.com'
endnginx_proxy 'example.info' do
url 'http://example.com/'
endnginx_proxy 'site.example.com' do
port 4000
endIf you include nginx-proxy in your run list, it will process the
node['nginx_proxy']['proxies'] attribute hash to call the nginx_proxy
definition: each key will be passed as a name, and values are
interpreted in the following way:
- if value is
'apache'or:apache, thenapacheparameter is set - if value is a number or a string that is a number, then
portparameter is set to the provided value - if value is a string that's not a number, then
urlparameter is set to the value - if value is a dictionary, it's applied as parameters
node['nginx_proxy']['proxies']['nagios.example.com'] = :apache
node['nginx_proxy']['proxies']['site.example.com'] = 4000
node['nginx_proxy']['proxies']['example.info'] = 'http://example.com'
node['nginx_proxy']['proxies']['new.example.com']['apache'] = true
node['nginx_proxy']['proxies']['new.example.com']['ssl_key'] = 'star.example.com'
node['nginx_proxy']['proxies']['new.example.com']['aka'] = [
'old.example.com', 'yet-older.example.com',
ssl_key: 'star.example.com' ]
node['nginx_proxy']['proxies']['new.example.com']['location_config'] = [
"proxy_http_version 1.1;",
"proxy_set_header Upgrade $http_upgrade;",
"proxy_set_header Connection "upgrade";"]node['nginx_proxy']['proxies']['...']-- proxies for data-driven recipe (see above)node['nginx_proxy']['apache_port'](default: 81) -- port to have Apache listen on when used as a backendnode['nginx_proxy']['ssl_key_dir'](default:/etc/ssl/private) -- directory holding private SSL keysnode['nginx_proxy']['ssl_certificate_dir'](default:/etc/ssl/certificates) -- directory holding public SSL certificatesnode['nginx_proxy']['nginx_recipe'](default:nginx) -- recipe to include for base nginx setup
Author:: Maciej Pasternacki maciej@3ofcoins.net