初识nginx(一)

感悟

在以前的运维过程中,大量环境都使用到了nginx,不管是与keepalived+haproxy做高可用,或者做缓存,或者做web应用服务器用来部署各种各样的环境,都使用到了它。但是真的了解它吗?并不,很多时候都是看一些博客里面的配置文件,或者在以前的配置文件上改改即用。所以对nginx的很多特性并不是很了解的。而作为一个运维,不仅要改善应用的稳定性,提升交付实施的效率,另外一方面就是提高资源的使用率节省成本。而nginx作为外端访问节点,这里面有很多文章可以做,所以有了重新学习nginx的欲望。

一、认识nginx

1.三个主要使用场景

静态资源
API服务
反向代理(缓存加速、负载均衡)

2.为什么会出现nginx?

访问量的增长
摩尔定律:性能提升
低效的apache

3.为什么要用nginx?

高并发、高性能
扩展性好,第三方模块多
BSD许可证
热部署、热升级
系统开销很小很小

4.nginx的组成

二进制文件
访问日志
错误日志
配置文件

5.版本发布情况以及主要特性和使用

官网连接:http://nginx.org/
image

主流版本:
官方版:社区nginx.org、商业版nginx.com
淘宝:Tengine
其它:社区OpenResty.org 商业OpenResty.com

编译安装nginx
————————————————————————————————
为什么选择编译而非apt-get或者yum?
因为直接下载的官方二进制文件不一定包含了我们想要的模块,我们如果需要定制化属于自己的模块,必须要重新编译后安装。基于此,我觉得不管是dockerfile或者本地部署nginx,都尽量使用编译安装。尤其是dockerfile,为符合docker极简思想,我们一定要编译最简单的nginx。为啥咧? 我经常看见很多老哥,经常说 为啥我的k8s服务器老是会磁盘报警?(你一个镜像1个G,每天发10个版本,你不报警谁报警?) 所以咧,如果用成本来考核一个运维,我觉得一个浪费资源的运维是不合格的,一定不是看过老马哥视频的。

————————————————————————————————


1.下载
http://nginx.org/download
2.编译
nginx-1.14.2
├── auto
├── CHANGES
├── CHANGES.ru
├── conf
├── configure
├── contrib
├── html
├── LICENSE
├── man
├── README
└── src
 配置项的高亮:cp -r contrib/vim/*  ~/.vim 
 复制此模块之后会显示出语法的高亮,便于配置nginx以及检查错误

configure的说明:
--help                             print this message

--prefix=PATH                      set installation prefix
--sbin-path=PATH                   set nginx binary pathname
--modules-path=PATH                set modules path
--conf-path=PATH                   set nginx.conf pathname
--error-log-path=PATH              set error log pathname
--pid-path=PATH                    set nginx.pid pathname
--lock-path=PATH                   set nginx.lock pathname

--user=USER                        set non-privileged user for
                                   worker processes
--group=GROUP                      set non-privileged group for
                                   worker processes

--build=NAME                       set build name
--builddir=DIR                     set build directory

--with  默认不会编译的模块

--without 默认编译的模块

中间模块 objs  主要的是modules 里面会看到里面的各种模块

最后使用make install 即可安装完成

配置nginx
image

1.重载
重载:nginx -s reload
热部署(nginx升级):
初始版本:
curl -I 127.0.0.1 
HTTP/1.1 200 OK
Server: nginx/1.14.2
2.热部署
原理:新版本的nginx编译好后 只需要更换nginx的二进制文件即可
即下载新的安装包,按照上述流程重新编译 编译完成之后拷贝二进制文件(原来的复制为old)  再向原来的nginx的主进程发USR2信令 这个时候就会新起nginx
master以及worker进程来承担请求
curl  -I  127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.15.8
Date: Tue, 08 Jan 2019 07:42:17 GMT

image

3.日志切割
做日志切割一方面是为了分析日志,另一方面是为了收集日志,我们可以在日志命名的时候再加上一些host信息,这样以后同步到ELK里面我们就能更准确的找到日志了,或者我们直接写到nginx的log模块里面去。也是为了后期维护的方便
A.编写脚本

#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
logs_backup_path="/usr/local/nginx/logs_backup/$year$month"               #日志存储路径

logs_path="/usr/local/nginx/logs/"                                                             #要切割的日志路径
logs_access="access"                                                                            #要切割的日志
logs_error="error"
pid_path="/usr/local/nginx/logs/nginx.pid"                                                 #nginx的pid

[ -d $logs_backup_path ]||mkdir -p $logs_backup_path
rq=`date +%Y%m%d`
#mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log
mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

3.做定时任务

crontab –e

59 23 * * * bash /usr/local/nginx/shell/cut_ngnix_log.sh   #每天23:59分开始执行;

二、nginx的简单使用

1.搭建静态资源服务器

2.具备缓存的静态资源服务器

3.日志可视化

4.ssl的认识

5.基于 OpenResty 用 Lua 语言实现简单服务

猜你喜欢

转载自yq.aliyun.com/articles/685110