nginx实战
- 一、安装nginx
-
- (1)准备环境(两个节点)!!
- (2)下载解压nginx包
- (3)编辑nginx文件
- (4)清空配置并重新编辑
- (5)可以用命令检查配置是否正确
- (6)启动nginx服务
- 二、环境准备
-
- 1.把文件和脚本复制
- 2.编辑配置文件
-
- (1)定义common的taskes
- (2)定义变量
- (3)拷贝用到的文件
- (4)建立用户,启动服务,删除安装包
- (5)调用copy和install
- 3.执行
- 4、管理配置文件
-
- (1)创建目录放置管理文件
- (2)创建、复制文件
- (3).编辑文件重新加载服务
- (4).编辑复制.conf和hosts的文件
- (5).编辑变量文件
- (6).编辑更新的入口文件
- (7)编辑回滚的入口文件
- (8)执行
一、安装nginx
(1)准备环境(两个节点)!!
cd /etc/ansible
yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel
(否则会出现错误)
错误:
make: *** No rule to make target `build', needed by `default'. Stop.
(出现错误需要重新 ./configure)
(2)下载解压nginx包
wget http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz
tar -zxf nginx-1.9.6.tar.gz
cd nginx-1.9.6
./configure --prefix=/usr/local/nginx
make && make install
(3)编辑nginx文件
vi /etc/init.d/nginx
内容:
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usx/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"start()
{
echo -n $"Starting $prog: "mkdir -p /dev/shm/nginx_tempdaemon $NGINX_SBIN -c $NGINX_CONFRETVAL=$?echoreturn $RETVAL
}
stop()
{
echo -n $"Stopping $prog: "killproc -p $NGINX_PID $NGINX_SBIN -TERMrm -rf /dev/shm/nginx_tempRETVAL=$?echoreturn $RETVAL
}
reload()
{
echo -n $"Reloading $prog: "killproc -p $NGINX_PID $NGINX_SBIN -HUPRETVAL=$?echoreturn $RETVAL
}
restart()
{
stopstart
}
configtest()
{
$NGINX_SBIN -c $NGINX_CONF -treturn 0
}
case "$1" instart)start;;stop)stop;;reload)reload;;restart)restart;;configtest)configtest;;*)echo $"Usage: $0 {start|stop|reload|restart|configtest}"RETVAL=1
esac
exit $RETVAL
(4)清空配置并重新编辑
> /usr/local/nginx/conf/nginx.conf
vi /usr/local/nginx/conf/nginx.conf
内容(注释尽量删掉,可能会报错):
user nobody nobody; //定义nginx运行的用户和用户组
worker_processes 2; //nginx进程数,一般为CPU总核心数
error_log /usr/local/nginx/logs/nginx_error.log crit; //全局错误日志定义类型
pid /usr/local/nginx/logs/nginx.pid; //进程文件
worker_rlimit_nofile 51200;
events //工作模式与连接数上限
{
use epoll;
worker_connections 6000;
}
http //http下的一些配置
{
include mime.types; //文件扩展名与文件类型映射表
default_type application/octet-stream; //默认文件类型
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
'$host "$request_uri" $status'
'"$http_referer" "$http_user_agent"';
sendfile on; //开启高效文件传输模式
tcp_nopush on; //防止网络阻塞
keepalive_timeout 30; //长连接超时时间,单位为秒
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on; //防止网络阻塞
gzip on; //开启gzip压缩输出
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
server //虚拟主机配置
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/1ocal/nginx/html$fastcgi_script_name;
}
}
}
(5)可以用命令检查配置是否正确
/usr/local/nginx/sbin/nginx -t
(6)启动nginx服务
service nginx start
显示权限不够,增加权限
chmod 777 /etc/init.d/nginx
如果httpd服务开启的话,端口被占用,需要先关闭httpd
然后再启动,完成
二、环境准备
1.把文件和脚本复制
首先创建安装目录
cd /etc/ansible/
mkdir nginx_install
cd nginx_install
mkdir -p roles/{
common,install}/{
handlers,files,meta,tasks,templates,vars}
说明: roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作。每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。files为安装时用到的一些文件,meta为说明信息,说明角色依赖等信息,tasks里面是核心的配置文件,templates通常存一些配置文件,启动脚本等模板文件,vars下为定义的变量.
在nginx所在目录下将nginx文件打包成tar包,将nginx.tar.gz复制到/etc/ansible/nginx_install/roles/install/files下
cd /etc/ansible/
tar -zcvf nginx.tar.gz nginx-1.9.6
mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/
cp nginx-1.9.6/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/
cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/
2.编辑配置文件
(1)定义common的taskes
vim /etc/ansible/nginx_install/roles/common/tasks/main.yml
内容:
- name: Install initializtion require softwareyum: name={
{
item }} state=installedwith_items:- zlib-devel- pcre-devel
(2)定义变量
vim /etc/ansible/nginx_install/roles/install/vars/main.yml
内容:
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
(3)拷贝用到的文件
vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml
内容:
- name: Copy Nginx Softwarecopy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Softwareshell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
- name: Copy Nginx Start Scripttemplate: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Configtemplate: src=nginx.conf dest={
{
nginx_basedir }}/conf/ owner=root group=root mode=0644
(4)建立用户,启动服务,删除安装包
vim /etc/ansible/nginx_install/roles/install/tasks/install.yml
内容:
- name: Create Nginx Useruser: name={
{
nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Serviceshell: /etc/init.d/nginx start
- name: Add Boot Start Nginx Serviceshell: chkconfig --level 345 nginx on
- name: Delete Nginx compression filesshell: rm -rf /tmp/nginx.tar.gz
(5)调用copy和install
vim /etc/ansible/nginx_install/roles/install/tasks/main.yml
内容:
- include: copy.yml
- include: install.yml
(6)定义一个入口配置文件
vim /etc/ansible/nginx_install/install.yml
内容:
---
- hosts: testhostremote_user: rootgather_facts: Trueroles:- common- install
3.执行
ansible-playbook /etc/ansible/nginx_install/install.yml
如果最后二节点启动不了nginx,看看/usr/local/nginx下的配置文件是否复制过来了,重新在一节点将nginx.tar.gz 移到/etc/ansible/nginx_install/roles/install/files
4、管理配置文件
(1)创建目录放置管理文件
mkdir -p /etc/ansible/nginx_config/roles/{
new,old}/{
files,handlers,vars,tasks}
说明:
其中new为更新时用到的,old为回滚时用到的,files下面为nginx.conf和vhosts目录,handlers为重启nginx服务的命令
关于回滚,需要在执行playbook之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证new/files下面的配置和线上的配置一致
(2)创建、复制文件
进入/usr/local/nginx/conf并创建vhosts目录
cd /usr/local/nginx/conf/
mkdir vhosts
cd vhosts
touch 1.conf
在nginx.conf文件下最后一个大括号前添加:(在02节点也操作)
include /usr/local/nginx/conf/vhosts/*.conf;
复制nginx.conf 文件和 vhosts目录
cp -r nginx.conf vhosts/ /etc/ansible/nginx_config/roles/new/files/
(3).编辑文件重新加载服务
vim /etc/ansible/nginx_config/roles/new/handlers/main.yml
内容:
- name: restart nginxshell: /etc/init.d/nginx reload
(4).编辑复制.conf和hosts的文件
vim /etc/ansible/nginx_config/roles/new/tasks/main.yml
内容:
- name: copy conf filecopy: src={
{
item.src }} dest={
{
nginx_basedir }}/{
{
item.dest }} backup=yes owner=root group=root mode=0644with_items: - {
src: nginx.conf, dest: conf/nginx.conf }- {
src: vhosts, dest: conf/ }notify: restart nginx
(5).编辑变量文件
vim /etc/ansible/nginx_config/roles/new/vars/main.yml
内容:
nginx_basedir: /usr/local/nginx
(6).编辑更新的入口文件
cd /etc/ansible/nginx_config/
vim update.yml
这是更新的入口文件
内容:
---
- hosts: testhostuser: rootroles:- new
(7)编辑回滚的入口文件
**说明:**回滚操作就是把旧的配置覆盖,然后重新加载nginx服务, 每次改动nginx配置文件之前先备份到old里,对应目录为/etc/ansible/nginx_config/roles/old/files
vim backup.yml
内容:
---
- hosts: testhostuser: rootroles:- old
(8)执行
ansible-playbook /etc/ansible/nginx_config/update.yml
执行回滚前,先备份旧的文件
rsync -av /etc/ansible/nginx_config/roles/new/ /etc/ansible/nginx_config/roles/old/
然后执行
ansible-playbook /etc/ansible/nginx_config/backup.yml