标签:自定义变量 bsp 成功 keepalive 默认值 bin 详细 ret 测试
使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装、添加程序管理脚本、设置开机启动、反向代理配置、证书分发、添加iptables规则等。脚本支持自定义nginx安装版本、设置编译模块、配置监听端口等。 1. Nginx Role规则说明 本脚本用于中间节点(Nginx反向代理)环境的自动化配置,主要内容包括: 安装基础依赖环境; 创建nginx启动用户(支持自定义用户); 下载nginx安装文件(可自定义nginx版本); 解压安装文件; 执行编译安装(可自定义编译参数和模块); 添加管理脚本,用于nginx服务的启动和关闭; 设置开机启动; 分发https证书文件; 反向代理配置; 添加iptables规则,允许访问nginx代理服务。 2. Nginx Role规则基本说明 2.1 目录结构说明 Nginx Role目录结构介绍: nginx # Nginx Role脚本根目录 ├── defaults # 脚本默认变量目录 │ └── main.yml # 脚本默认变量文件 ├── files # 文件目录 │ ├── https_cert # 文件目录,用于存放https证书文件 │ └── nginx_start_scripts # nginx启动脚本 ├── handlers # 任务处理器 │ └── main.yml # 定义了 nginx reload和iptables restarted两个处理器任务 ├── tasks # 任务目录 │ └── main.yml # ansible任务文件,定义了需要执行的自动化任务 ├── templates #模板目录 │ ├── nginx_config_file.j2 # nginx配置模板,使用了jinja2模版语言进行预定义,可通过变量传递配自定义置内容 │ └── nginx_install.j2 # nginx编译安装执行脚本 ├── tests # 脚本使用的测试用例,脚本执行案例 │ ├── inventory # 脚本执行使用的主机清单 │ └── test.yml # 脚本执行调用的playbook剧本 └── vars # 脚本变量目录 └── main.yml # 脚本变量文件 2.2 脚本变量说明 默认变量(nginx/defaults/main.yml) 变量名 默认值 说明 nginx_install true nginx编译安装 nginx_start_scripts true 分发nginx启动脚本 nginx_start_service true 启动nginx服务 nginx_start_on_boot true 设置开机启动 nginx_copy_https_cert false 分发https证书文件 nginx_revproxy_config false 设置反向代理配置 add_iptables_for_nginx false 添加iptables防火墙规则 通过默认变量可以控制脚本执行的内容,在使用本脚本前最好是执行下common脚本,先进行系统的初始优化工作。 脚本变量(nginx/vars/main.yml) --- nginx_user: nginx # nginx启动用户 nginx_group: nginx # nginx组 nginx_version: 1.15.8 # 要安装的nginx版本 download_url: http://nginx.org/download # nginx文件下载地址 download_dir: /usr/local/src # nginx文件下载存放目录 install_dir: /usr/local/nginx # nginx安装目录 model_config: # nginx编译安装参数 - "--user={{ nginx_user }}" - "--group={{ nginx_group }}" - "--prefix={{ install_dir }}" - "--with-http_realip_module" - "--with-http_sub_module" - "--with-http_gzip_static_module" - "--with-http_stub_status_module" - "--with-http_ssl_module" - "--with-pcre" 可以通过修改nginx_version来修改需要安装的版本,但需要确认下载地址download_url中存在对应版本,并可以下载。 2.3 nginx反向代理配置模版说明 nginx反向代理配置模版(nginx/templates/nginx_config_file.j2) user {{ nginx_user }}; worker_processes {{ ansible_processor_vcpus }}; events { worker_connections 102400; } http { include mime.types; default_type application/octet-stream; log_format main ‘$remote_addr $http_X_Forwarded_For [$time_local] ‘ ‘$upstream_addr $upstream_response_time ‘ ‘$http_host $request ‘ ‘"$status" $body_bytes_sent "$http_referer" ‘ ‘"$http_accept_language" "$http_user_agent" ‘; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; keepalive_timeout 65; {% for item in nginx_revproxy_sites %} # 对nginx_revproxy_sites配置变量进行循环 {% if item.host == ansible_host %} # 判断host是否等于当前执行任务的主机地址,如果相等继续执行后面操作 upstream {{ item.desc }}_backend { # 使用desc变量内容加上_backend作为upstream名称 {% for upstream in item.upstreams %} # 遍历upstreams server {{ upstream.address }}:{{ upstream.port }}; # 将遍历结果作为upstream模块集群转发地址(反向代理的回源请求地址,upstream支持多节点的集群负载) {% endfor %} } server { listen {{ item.listen_port | default(80) }}; # 配置http监听端口,如果没有定义listen_port默认使用80端口 server_name {{ item.domains | join(" ") }}; 配置访问域名,支持多域名设置 access_log logs/access.log main; {% if item.ssl_status %} # 判断ssl_status状态,如果状态为true,则将http请求跳转到https(跳转会加上listen_ssl_port和请求链接) return 301 https://$server_name:{{ item.listen_ssl_port | default(443) }}$request_uri; {% else %} # 如果ssl_status状态为false,则使用http代理将请求转发到上面定义的upstream集群 location / { proxy_pass http://{{ item.desc }}_backend; } {% endif %} } {% if item.ssl_status %} # ssl_status状态为true是进行https反向代理配置和域名证书配置 server { listen {{ item.listen_ssl_port | default(443) }} ssl; server_name {{ item.domains | join(" ") }}; ssl_certificate {{ item.ssl_crt }}; ssl_certificate_key {{ item.ssl_key }}; ssl_session_timeout 50m; ssl_protocols TLSv1.2; ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; ssl_prefer_server_ciphers on; access_log logs/access.log main; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_request_buffering off; proxy_ignore_client_abort on; proxy_pass https://{{ item.desc }}_backend; } } {% endif %} {% endif %} {% endfor %} } 反向代理模版配置说明: 配置模版使用了Jinja2模版语言使用自定义变量来动态进行配置文件的渲染; user {{ nginx_user }}:使用自定义的用户作为nginx启动用户; worker_processes {{ ansible_processor_vcpus }}:获取cup核数,设置worker_processes; 其他说明详见模版中注释内容。 3 Nginx role脚本使用说明 在脚本中已经创建了一个简单的使用案例(nginx/tests/)可以作为参考,同时前面已经介绍了默认变量和脚本变量,在脚本使用过程中可以去自定义这些变量内容。 使用脚本前先将脚本目录(nginx)拷贝到/etc/ansible/roles目录下 3.1 基本功能使用 通过以下事例可以完成nginx的编译安装和开机启动配置: 1) 新建一个主机清单文件(nginx/tests/inventory): [proxy_server] 192.168.0.100 192.168.0.101 这里默认已经使用common脚本进行了系统的初始化配置,可以通过密钥来登陆主机清单中的主机。如果清单中主机没有配置密钥登陆,在定义清单时需要制定远程登陆用户和密码: [proxy_server] 192.168.0.100 ansible_ssh_user=root ansible_ssh_pass=CPBal1Tid 192.168.0.101 ansible_ssh_user=root ansible_ssh_pass=KJadfiola 新建执行脚本用的playbook剧本(nginx/tests/nginx_site.yml) --- - hosts: proxy_server remote_user: root roles: - nginx 3) 执行脚本 cd /etc/ansible/roles/nginx/tests/ ansible-playbook nginx_site.yml -i inventory 脚本成功执行完成后,ansible会在inventory清单中的远程主机编译安装nginx,并添加到开机启动。 4)执行结果验证 ansible proxy_server -m shell -a "ps -ef |grep nginx" -i inventory 192.168.0.100 | CHANGED | rc=0 >> root 2228 1 0 13:24 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nginx 2229 2228 0 13:24 ? 00:00:00 nginx: worker process root 5781 5780 0 13:36 pts/0 00:00:00 /bin/sh -c ps -ef |grep nginx root 5783 5781 0 13:36 pts/0 00:00:00 grep nginx ....后面内容省略.... 可以看到远程主机已经成功安装了nginx并启动了nginx服务,当然你也可以确认下是否分发了nginx启动脚本和是否设置了开机启动。 3.2 反向代理配置和证书分发 如果想要在安装nginx的同时配置反向代理,和分发证书文件,按照下面步骤进行操作: 1)上传证书文件 将https证书文件上传到nginx/files/https_cert目录。 2)修改nginx/tests/nginx_site.yml文件 --- - hosts: proxy_server remote_user: root vars: nginx_copy_https_cert: true nginx_revproxy_config: true add_iptables_for_nginx: true nginx_revproxy_sites: # nginx 反向代理配置内容,对照《2.3 nginx反向代理配置模版说明》更便于理解 - host: 192.168.0.100 # 反向代理配置对应的主机 desc: t_server # 反向代理集群备注,nginx配置模版中引用它作为upstream名称 domains: # 域名,用于定义server_name,支持多个域名配置 - example.com - www.example.com upstreams: # nginx反向代理集群配置内容,可以添加多个节点,默认采用轮训方式进行请求转发 - { address: 192.168.10.11, port: 80} - { address: 192.168.10.12, port: 8080} listen_port: 80 # http监听端口,如果不设置,默认使用80端口 listen_ssl_port: 443 # https监听端口,如果不设置,默认使用https端口 ssl_status: true # 设置为true启用https配置 ssl_crt: /etc/ssl/test.com.crt # 证书文件 ssl_key: /etc/ssl/test.com.key # 证书文件 - host: 192.168.0.101 desc: z_server domains: - example01.com - wwww.example01.com upstreams: - { address: 192.168.0.21, port: 80} - { address: 192.168.0.22, port: 80} ssl_status: false roles: - nginx 执行nginx role的playbook剧本说明: nginx_copy_https_cert:默认变量,用来控制证书文件分发,设置为true,执行证书分发操作; nginx_revproxy_config:默认变量,用来启用反向代理配置,设置为ture,进行模版变量替换和分发; add_iptables_for_nginx:默认变量,用来添加iptables规则,需要保证系统已安装iptables-services服务(common基础优化脚本中已经定义安装过程); nginx_revproxy_sites:nginx反向代理的配置内容,详细说明件上面的备注。 配置注意事项: 如果启用了nginx_copy_https_cert、nginx_revproxy_config、add_iptables_for_nginx这三项配置,必须定义nginx_revproxy_sites; nginx_revproxy_sites中必定义字段有:host、desc、domain、upstreams、ssl_status; host: 用来确定反向代理配置对应的主机(该主机必须存在于inventory主机清单中); ssl_status:当ssl_status状态为true时,需要定义证书文件ssl_crt和ssl_key,其中证书名称必须和上传到nginx/files/https_cert目录中的名称对应; listen_port(listen_ssl_port): http(https)监听端口,这两个选项不是必须定义,如果在playbook中没有定义,脚本默认会采用80(443)端口,这两个监听端口不能用同一个端口。 配置文件使用的是yaml格式,在定义文件内容时注意缩紧。
使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装、添加程序管理脚本、设置开机启动、反向代理配置、证书分发、添加iptables规则等
标签:自定义变量 bsp 成功 keepalive 默认值 bin 详细 ret 测试
原文地址:https://www.cnblogs.com/jameslove/p/10920931.html