1.什么是nginx
nginx是一个常见的http和反向代理服务器,之所以流行是它可以在支持50000个高并发连接下,系统的CPU、内存消耗很低,运行很稳定。
2.nginx作用
(1)路由功能
可以根据访问的域名选择后台服务器,比如用在微服务领域
(2)负载均衡
在高并发下,利用负载均衡选择服务器,降低服务端压力,增大并发量
(3)动静分离
充当静态服务器,比如html文件,比tomcat性能高很多
3.正向代理和反向代理
(1)正向代理
正向代理是客户端明确知道要访问的是目标是谁,但无法直接访问,所以客户端找了个代理服务器,让代理服务器去转发访问。比如我们常见的翻墙软件。
正向代理中,客户端是知道自己要访问请求是由代理服务器转发的,服务端只知道请求是代理服务器发起的,不知道正在发起的是客户端。
(2)反向代理
反向代理比较常见的就是负载均衡。客户端实际上不知道自己访问的是个代理服务器,也不知道访问的是服务器集群中具体的哪一台服务器。是由nginx通过具体的算法将请求转发到一台具体的服务器,比如轮询。
4.nginx主进程和工作进程
nginx工作包含一个主进程(master)和N个worker进程。配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户运行,而worker、 cache loader和cache manager均应以非特权用户身份运行。
(1)主进程
主进程负责读取验证配置信息,可以提供无需终止服务,重新加载配置;监控worker进程状态,监控,启动停止worker进程。当有worker进程进程退出,重新启动一个worker进程替代;重新打开配置文件;创建、绑定及关闭套接字;接收来自外界的信号
(2)工作进程
接收、传入并处理来自客户端的连接;提供反向代理及过滤功能;nginx任何能完成的其它任务
5.nginx目录结构
nginx安装完成后,主要有4个目录
- conf:配置文件
- html:静态文件
- logs:日志文件
- sbin:二进制文件
5.1 nginx.conf
配置文件结构
#user nobody; #主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行。
worker_processes 1; // worker进程的数量
worker_rlimit_nofile 100000; #worker进程的最大打开文件数限制
#error_log logs/error.log;//用来定义全局错设日志文件的路径和日志名称。
//日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,面crit(严重)输出日志最少。默认是error
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;//用来指定进程id的存储文件位置。
events { //事件区块开始
use epoll; //nginx的工作模式
worker_connections 1024; //每个worker进程支持的最大连接数
} //事件区块结束
http { // HTTP区块开始
include mime.types; //对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来
default_type application/octet-stream; // 默认的媒体类型
sendfile on; //开启高效传输模式
keepalive_timeout 65; //连接超时
#gzip on; 设置是否开启gzip模块
#access_log logs/access.log main;//默认使用“main”日志格式,也可以自定义格式。
server { //第一个Server区块开始,表示一个独立的虚拟主机站点
listen 80; // 提供服务的端口,默认80
server_name localhost; //提供服务的域名主机名
location / { //第一个location区块开始,地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location命令对nginx进行动态和静态网页过滤处理
root html; //站点的根目录,相当于Nginx的安装目录
index index.html index.htm; // 默认的首页文件,多个用空格分开
} //第一个location区块结果
error_page 500502503504 /50x.html; // 出现对应的http状态码时,使用50x.html回应客户
location = /50x.html { //location区块开始,访问50x.html
root html; // 指定对应的站点目录为html
}
}
5.2 日志文件内容
日志切割:
#编写logcut/sh:
#!/bin/bash
#设置日志文件存放目录
LOG_HOME="/usr/local/nginx/logs/"
#备分文件名称
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)"
#重命名日志文件
mv ${LOG_HOME}/access.log ${LOG_HOME}/access.${LOG_PATH_BAK}.log
mv ${LOG_HOME}/error.log ${LOG_HOME}/error.${LOG_PATH_BAK}.log
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${LOG_HOME}/nginx.pid`
定时任务
配置linux的cron,crontab文件格式:minute hour day month week command
比如:*/1 * * * * /usr/local/nginx/sbin/logcut.sh
开启定时任务:
/etc/rc.d/init.d/crond start #定时任务开启
注意
/etc/init.d/rsyslog start #系统日志,如不开启,看不到定时任务日志