Этот модуль был перенесен с Джеймса Фраймана [email protected] на Vox Pupuli.
Этот модуль управляет конфигурацией NGINX.
apt-transport-https
. include nginx
nginx::resource::server { 'kibana.myhost.com' :
listen_port => 80,
proxy => ' http://localhost:5601 ' ,
}
nginx::resource::server { 'www.puppetlabs.com' :
www_root => ' /var/www/www.puppetlabs.com ' ,
}
nginx::resource::upstream { 'puppet_rack_app' :
members => {
' localhost:3000 ' => {
server => ' localhost ' ,
port => 3000,
weight => 1,
},
' localhost:3001 ' => {
server => ' localhost ' ,
port => 3001,
weight => 1,
},
' localhost:3002 ' => {
server => ' localhost ' ,
port => 3002,
weight => 2,
},
},
}
nginx::resource::server { 'rack.puppetlabs.com' :
proxy => ' http://puppet_rack_app ' ,
}
class { 'nginx' :
mail => true ,
}
nginx::resource::mailhost { 'domain1.example' :
auth_http => ' server2.example/cgi-bin/auth ' ,
protocol => ' smtp ' ,
listen_port => 587,
ssl_port => 465,
starttls => ' only ' ,
xclient => ' off ' ,
proxy_protocol => ' off ' ,
proxy_smtp_auth => ' off ' ,
ssl => true ,
ssl_cert => ' /tmp/server.crt ' ,
ssl_key => ' /tmp/server.pem ' ,
}
Тип данных Array для членов nginx::resource::upstream заменяется Hash. Следующая конфигурация больше не действительна:
nginx::resource::upstream { 'puppet_rack_app' :
members => {
' localhost:3000 ' ,
' localhost:3001 ' ,
' localhost:3002 ' ,
},
}
С этого момента конфигурация должна выглядеть так:
nginx::resource::upstream { 'puppet_rack_app' :
members => {
' localhost:3000 ' => {
server => ' localhost ' ,
port => 3000,
},
' localhost:3001 ' => {
server => ' localhost ' ,
port => 3001,
},
' localhost:3002 ' => {
server => ' localhost ' ,
port => 3002,
},
},
}
По умолчанию при создании ресурса сервера будет создан только HTTP-сервер. Чтобы также создать сервер HTTPS (с поддержкой SSL), установите на сервере ssl => true
. У вас будет HTTP-сервер, прослушивающий listen_port
(порт 80
по умолчанию), и HTTPS-сервер, прослушивающий ssl_port
(порт 443
по умолчанию). Оба сервера будут иметь одинаковое server_name
и аналогичную конфигурацию.
Чтобы создать только HTTPS-сервер, установите ssl => true
, а также установите для listen_port
то же значение, что и для ssl_port
. Установка одного и того же значения отключает HTTP-сервер. Полученный сервер будет прослушивать ssl_port
.
По умолчанию этот модуль может настроить устаревшую директиву ssl on
. Когда вы в следующий раз запустите puppet, он будет удален, поскольку теперь факт nginx_version
станет доступен. Чтобы избежать этой проблемы идемпотентности, вы можете вручную установить параметр nginx_version
базового класса.
Для местоположений требуются определенные настройки в зависимости от того, должны ли они быть включены в HTTP, HTTPS или оба сервера.
Если у вас есть только HTTP-сервер (т. е. ssl => false
на сервере), убедитесь, что вы не установили ssl => true
ни в одном месте, которое вы связываете с сервером.
Если вы установили ssl => true
, а также установили для listen_port
и ssl_port
разные значения на сервере, вам нужно будет указать конкретные настройки местоположения, поскольку у вас будет HTTP-сервер, прослушивающий listen_port
, и HTTPS-сервер, прослушивающий ssl_port
:
ssl => false
(это значение по умолчанию).ssl => true
для этого местоположения и убедитесь, что ssl_only => false
(это значение по умолчанию для ssl_only
).ssl => true
и ssl_only => true
. Если вы установили ssl => true
, а также установили listen_port
и ssl_port
одно и то же значение на сервере, у вас будет один HTTPS-сервер, прослушивающий ssl_port
. Чтобы добавить местоположение на этот сервер, установите ssl => true
и ssl_only => true
для этого местоположения.
Определение ресурсов nginx в Hiera.
nginx::nginx_upstreams :
' puppet_rack_app ' :
ensure : present
members :
' localhost:3000 ' :
server : ' localhost '
port : 3000
' localhost:3001 ' :
server : ' localhost '
port : 3001
' localhost:3002 ' :
server : ' localhost '
port : 3002
nginx::nginx_servers :
' www.puppetlabs.com ' :
www_root : ' /var/www/www.puppetlabs.com '
' rack.puppetlabs.com ' :
proxy : ' http://puppet_rack_app '
nginx::nginx_locations :
' static ' :
location : ' ~ "^/static/[0-9a-fA-F]{8}/(.*)$" '
server : www.puppetlabs.com
www_root : /var/www/html
' userContent ' :
location : /userContent
server : www.puppetlabs.com
www_root : /var/www/html
nginx::nginx_mailhosts :
' smtp ' :
auth_http : server2.example/cgi-bin/auth
protocol : smtp
listen_port : 587
ssl_port : 465
starttls : only
nginx::stream : true
nginx::nginx_cfg_prepend :
include :
- ' /etc/nginx/modules-enabled/*.conf '
nginx::nginx_streamhosts :
' syslog ' :
ensure : ' present '
listen_port : 514
listen_options : ' udp '
proxy : ' syslog '
proxy_read_timeout : ' 1 '
proxy_connect_timeout : ' 1 '
raw_append :
- ' error_log off; '
nginx::nginx_upstreams :
' syslog ' :
context : ' stream '
members :
' 10.0.0.1:514 ' :
server : ' 10.0.0.1 '
port : 514
' 10.0.0.2:514 ' :
server : ' 10.0.0.2 '
port : 514
' 10.0.0.3:514 ' :
server : ' 10.0.0.3 '
port : 514
Пример конфигурации для Debian и RHEL/CentOS (>6), получение пакетов Nginx и Passenger из репозитория Phusion. Дополнительные примечания см. в https://github.com/voxpupuli/puppet-nginx/blob/master/docs/quickstart.md.
class { 'nginx' :
package_source => ' passenger ' ,
http_cfg_append => {
' passenger_root ' => ' /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini ' ,
}
}
Вот пример для OpenBSD:
class { 'nginx' :
package_flavor => ' passenger ' ,
service_flags => ' -u '
http_cfg_append => {
passenger_root => ' /usr/local/lib/ruby/gems/2.1/gems/passenger-4.0.44 ' ,
passenger_ruby => ' /usr/local/bin/ruby21 ' ,
passenger_max_pool_size => ' 15 ' ,
}
}
passenger
исходного кода пакета добавит репозиторий Phusion Passenger к источникам APT. Для каждого виртуального хоста вы должны указать, какой Ruby следует использовать.
nginx::resource::server { 'www.puppetlabs.com' :
www_root => ' /var/www/www.puppetlabs.com ' ,
server_cfg_append => {
' passenger_enabled ' => ' on ' ,
' passenger_ruby ' => ' /usr/bin/ruby ' ,
}
}
Конфигурация виртуального хоста для обслуживания Puppet Master:
nginx::resource::server { 'puppet' :
ensure => present ,
server_name => [ ' puppet ' ],
listen_port => 8140,
ssl => true ,
ssl_cert => ' /var/lib/puppet/ssl/certs/example.com.pem ' ,
ssl_key => ' /var/lib/puppet/ssl/private_keys/example.com.pem ' ,
ssl_port => 8140,
server_cfg_append => {
' passenger_enabled ' => ' on ' ,
' passenger_ruby ' => ' /usr/bin/ruby ' ,
' ssl_crl ' => ' /var/lib/puppet/ssl/ca/ca_crl.pem ' ,
' ssl_client_certificate ' => ' /var/lib/puppet/ssl/certs/ca.pem ' ,
' ssl_verify_client ' => ' optional ' ,
' ssl_verify_depth ' => 1,
},
www_root => ' /etc/puppet/rack/public ' ,
use_default_location => false ,
access_log => ' /var/log/nginx/puppet_access.log ' ,
error_log => ' /var/log/nginx/puppet_error.log ' ,
passenger_cgi_param => {
' HTTP_X_CLIENT_DN ' => ' $ssl_client_s_dn ' ,
' HTTP_X_CLIENT_VERIFY ' => ' $ssl_client_verify ' ,
},
}
$full_web_path = ' /var/www '
define web::nginx_ssl_with_redirect (
$backend_port = 9000,
$php = true ,
$proxy = undef ,
$www_root = " ${full_web_path} / ${name} / " ,
$location_cfg_append = undef ,
) {
nginx::resource::server { "${name}.${facts['networking']['domain']}" :
ensure => present ,
www_root => " ${full_web_path} / ${name} / " ,
location_cfg_append => {
' rewrite ' => ' ^ https://$server_name$request_uri? permanent '
}‚,
}
if ! $www_root {
$tmp_www_root = undef
} else {
$tmp_www_root = $www_root
}
nginx::resource::server { "${name}.${facts['networking']['domain']} ${name}" :
ensure => present ,
listen_port => 443,
www_root => $tmp_www_root ,
proxy => $proxy ,
location_cfg_append => $location_cfg_append ,
index_files => [ ' index.php ' ],
ssl => true ,
ssl_cert => ' /path/to/wildcard_mydomain.crt ' ,
ssl_key => ' /path/to/wildcard_mydomain.key ' ,
}
if $php {
nginx::resource::location { "${name}_root" :
ensure => present ,
ssl => true ,
ssl_only => true ,
server => " ${name} .${facts['networking']['domain']} ${name} " ,
www_root => " ${full_web_path} / ${name} / " ,
location => ' ~ . php$ ' ,
index_files => [ ' index.php ' , ' index.html ' , ' index.htm ' ],
proxy => undef ,
fastcgi => " 127.0.0.1: ${backend_port} " ,
fastcgi_script => undef ,
location_cfg_append => {
fastcgi_connect_timeout => ' 3m ' ,
fastcgi_read_timeout => ' 3m ' ,
fastcgi_send_timeout => ' 3m '
}
}
}
}
nginx::resource::location { "some_root" :
ensure => present ,
location => ' /some/url ' ,
fastcgi => " 127.0.0.1:9000 " ,
fastcgi_param => {
' APP_ENV ' => ' local ' ,
},
}
web::nginx_ssl_with_redirect { 'sub-domain-name' :
backend_port => 9001,
}