Nginx 虚拟主机配置和日志管理 [2]

一、nginx虚拟主机配置

Nginx虚拟主机对应的文件实体就是/usr/local/nginx/nginx.conf文件。
Nginx配置文件分为几段:

worker_processes   1;// 有1个工作的子进程,可以配置,一般设置为CPU数*核数

events {    // 一般用于配置nginx连接的特性,如1个worker允许同时建立多少连接
    worker_connections  1024;      // 指一个子进程最大允许连接1024个连接
}

http {
待补充
}

二、nginx日志管理

2.1 日志格式

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

nginx.conf文件中,虽然上面这段话被注释,但缺省启用的日志格式就是main格式,输出到logs/access.log文件中。

nginx支持为每个server定制log。
观察nginx的server段,能看到如下信息:
# access_log logs/host.access.log main;
翻译成中文的意思是:本server访问的日志文件是 logs/host.access.log,日志格式使用的是预定义的main格式。当然nginx支持自定义的其他格式。

什么是main格式:
main格式是预定义的日期格式,main只是它的代号,便于引用。nginx提供的main格式如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

2.2 定时任务与日志切割

如果所有的日志都放在一个文件里,根据日志去排查生产问题时会异常的低效;不恰当的日志打印或者是海量的业务访问量,会致使日志文件的大小急剧膨胀最后撑爆磁盘。所以千万不要忽视日常运维中的日志管理。

常用的日志管理策略包含以下几个方面:

  • 打印:将程序日志打印到指定的日志文件当中
  • 切割:每天在一个固定的时点,通常是0点,对日志文件做切割,对当前的日志文件重命名并移到指定的历史日志文件夹中,其中重命名的方法可以是文件名拼接上日志产生的日期。最后生成一个新的日志文件,并将程序的日志输出指向该新文件
  • 清理:启动定时任务,每隔一段时间清理过期日志

脚本编写:

touch log.sh
vim log.sh

# !/bin/bash
# 定义日志文件路径
LOGPATH=/usr/local/nginx/logs/access.log
# 定义存放历史日志文件目录的命名规则
BASEPATH=/usr/local/nginx/logs/$(date -d yesterday +%Y-%m)

mkdir -p $BASEPATH

# 定义日志名的生成规则,指定存放目录
bak=$BASEPATH/access-$(date -d yesterday +%Y-%m-%d-%H%M).log

mv $LOGPATH $bak
touch $LOGPATH
# 重定向nginx日志输出到新建的日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

接下来使用linux系统提供的定时任务工具定时调度log.sh脚本:

crontab -e
# 在打开的文件中输入如下内容,保存退出后会自动执行定时任务
*/1 * * * * sh /usr/local/nginx/logs/log.sh

crontab命令的定时粒度设置参考下图:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容