JoergFiedler.freebsd-jailed-nginx
freebsd-jailed-nginx
这个角色提供了一个监听 localhost:{80,443}
的监狱式 nginx 服务器,用于处理传入请求。
该角色还提供了一个有效的 SSL 配置,利用 Let's Encrypt 提供的功能。
您需要提供一个自定义的 dhparam.pem
文件。请在与您的剧本相邻的 files
文件夹内创建一个以您的服务器名称(example.com
)命名的文件夹。
证书将通过定期的 weekly
进行验证/生成。为了立即让服务器运行,安装了一个自签名的本地主机证书。您可以在监狱启动后手动生成您的 Let's Encrypt 证书,使用以下命令:
/usr/local/bin/acme-client-weekly.sh
该角色还可以用于支持 WordPress 或 Joomla 安装。为了访问 webroot 目录,还配置了一个 SFTP 服务器,通过公钥认证来保证安全。
此角色也可用于创建 SSL 终止代理,将流量转发到特定域的监狱或外部站点。
要求
此角色旨在用于全新的 FreeBSD 安装。您可以使用提供 VirtualBox 和 EC2 的 Vagrant Box。
角色变量
nginx_letsencrypt_enabled
设置为 yes
时启用自动证书管理,与 Lets Encrypt 一起为所有 nginx 服务器启用此功能。如果启用,它将安装 acme-client
工具并为服务器准备一些配置。默认值:no
。
nginx_letsencrypt_acme_private_key
使用此变量指定将用于与 LetsEncrypt 通信的私钥。默认值:'''
。
nginx_letsencrypt_api_host
要联系的服务器的主机名。默认值:acme-v02.api.letsencrypt.org
。
nginx_tarsnap_enabled
是否应使用 tarsnap 备份所有 nginx 服务器的 webroot。必须在主机本身启用(tarsnap_enabled: yes
)。默认值:{{ tarsnap_enabled | default("no") }}
。
nginx_syslogd_server
nginx 应该使用的 syslogd 服务器,以写入错误和访问日志。默认值:{{ syslogd_server | default("localhost") }}
。
nginx_pf_redirect
如果设置为 yes
,则将流量转发到 http(s) 端口到该监狱的 nginx 服务器。默认值:no
。
如果启用,默认配置将把指向主机外部接口的端口 80 和 443 的流量转发到此监狱。此配置可以使用 nginx_pf_rdrs
变量更改。
nginx_pf_rdrs
配置流量从主机到监狱的重定向工作。默认配置如下:
nginx_pf_rdrs:
- ports:
- 'http'
- 'https'
ext_ip: '{{ host_net_ext_ip }}'
ext_if: '{{ host_net_ext_if }}'
这意味着所有在主机的外部接口上以外部 IP 终止的流量,将会被重定向到监狱内的 NGINX 的 http 端口。
nginx_servers
此变量保存此监狱的 nginx 服务器实例数组。您可以使用此功能配置不同类型的 nginx 监狱,例如 HTTPS 终止代理,提供多个静态网站或 PHP 启用的网站。请参见以下示例部分。
aliases: ''
basic_auth_enabled: no
force_www: no
https:
enabled: no
letsencrypt_enabled: no
key_file: 'localhost-key.pem'
certbundle_file: 'localhost-certbundle.pem'
dhparam_file: 'localhost-dhparam.pem'
name: 'localhost'
php_fpm_enabled: no
sftp:
user: '{{ server_sftp_user }}'
uuid: '{{ server_sftp_uuid }}'
authorized_keys: '{{ server_sftp_authorized_keys }}'
home: '{{ server_home }}'
port: '{{ server_sftp_port }}'
sftp_enabled: no
webroot: '{{ server_webroot }}'
aliases
如果服务器应该处理其他请求而不是指向 server_name
的请求。提供用空格分隔的域名列表。使用 default
创建 Nginx 默认服务器。默认值:''
。
basic_auth_enabled
设置为 true
以启用此服务器的基本身份验证。您需要提供 htpasswd
文件并将其保存在文件 {{ server_name }}/htpasswd
下。
force_www
如果服务器应该重定向到 www
域名。如果设置为 yes
,所有对 name
的请求都会重定向到 www 子域。您还需要将 www.name
添加到 aliases
属性中。默认值:no
。
https
与 SSL/HTTPS 相关的设置。
enabled
设置为 yes
启用此服务器的 SSL/HTTPS。仅 HTTP 请求将被重定向到 HTTPS。
letsencrypt_enabled
如果设置为启用,此服务器的 HTTPS,将由 Lets Encrypt 和 acme-client
创建证书。您还需要将 nginx_letsencrypt_enabled
设置为 yes
以启用此功能。默认值:no
。
name
此服务器的域名,例如 example.com
。默认值:default
。
php
与 PHP 相关的设置。
fpm_enabled
设置为 true
以安装和启用 php-fpm
包。如果启用,则将安装在 nginx_php_fpm_pkgs
中列出的以下软件包。默认值:no
。
fastcgi_cache
设置为 off
以禁用 fastcgi 缓存。默认值:z_nginx
。
max_requests
每个子进程在重新生成之前应执行的请求数。默认值:1000
。
max_children
可以创建的最大子进程数。默认值:5
。
memory_limit
设置脚本可以分配的最大内存字节数。默认值:128M
。
upload_max_filesize
上传文件的最大大小。默认值:48M
。
post_max_size
设置允许的贴子数据的最大大小。默认值:64M
。
sftp_enabled
为此服务器启用 sftp
。创建一个用户并根据以下说明调整设置。默认值:false
。
sftp
用于设置用户和配置 SSHD 以允许访问 web 服务器根目录以上传文件的设置。
user
SFTP 用户的名称。默认值:'sftp_{{ name | truncate(5, True, "") }}'
。
uuid
SFTP 用户的 UUID。默认值:5000
。
home
用户的主目录。sshd
将更改根目录到此目录。当未设置时,将其设置为 web 服务器的主目录。默认值:'/srv/{{ name }}'
。
port
应通过此角色重定向到监狱的外部端口。默认值:10022
。
authorized_keys
应用于验证用户的公钥。默认值:'{{ host_sshd_authorized_keys_file }}'
。
依赖关系
示例剧本
代理主机,将流量转发到其他外部服务器。
- hosts: all
become: true
tasks:
- import_role:
name: 'JoergFiedler.freebsd-jail-host'
- include_role:
name: 'JoergFiedler.freebsd-jailed-nginx'
vars:
nginx_pf_redirect: true
nginx_letsencrypt_enabled: yes
nginx_servers:
- name: 'test.moumantai.de'
https:
enabled: yes
letsencrypt_enabled: yes
proxy:
host: 'www.freebsd.org'
scheme: 'https'
port: 443
local: no
jail_net_ip: '10.1.0.10'
jail_name: 'nginx'
使用 php-fpm
模块和 HTTPS 的 Nginx 服务器。
- hosts: all
become: true
tasks:
- import_role:
name: 'JoergFiedler.freebsd-jail-host'
- include_role:
name: 'JoergFiedler.freebsd-jailed-nginx'
vars:
jail_net_ip: '10.1.0.10'
jail_name: 'nginx'
nginx_pf_redirect: yes
nginx_servers:
- name: 'default'
https:
enabled: yes
php:
fpm_enabled: yes
sftp_enabled: yes
sftp:
authorized_keys: '~/.vagrant.d/insecure_private_key.pub'
许可
BSD
作者信息
如果您喜欢这个项目或有改进的想法,请在 GitHub 上提出问题。谢谢。