上一篇文章手把手教程:使用Docker创建Nginx,并部署Vue项目我们介绍了如何使用Docker创建Nginx,并部署Vue项目。评论区有人问Docker nginx如何实现日志分割

这篇文章,我们专门来介绍一下Docker nginx日志分割(按天或按小时分割日志)。




docker如何修改nginx日志配置 docker nginx日志输出_nginx映射本地文件


为了阅读方便,我们重新介绍使用Docker创建Nginx的步骤,和上一篇文章相比有一些小的修改。

准备工作

  • 拉取镜像

拉取nginx镜像到本地:

docker pull nginx:latest
  • 创建挂载目录
mkdir -p /usr/local/nginx/{conf,html,logs,conf.d}
  1. conf : 存放外置nginx配置文件
  2. html : 存放Vue包
  3. logs : 存放nginx日志文件
  4. conf.d : 存放具体项目的nginx配置文件
  • 将打包好的Vue项目包(一个名为dist的文件夹)放到 /usr/local/nginx/html 目录下。
[root@192 html]# ls -l /usr/local/nginx/html/总用量 4drwxrwxr-x. 9 admin admin 250 3月   7 17:17 dist
  • 在/usr/local/nginx/conf下创建 nginx.conf 文件,作为外置配置文件使用。
user  root;worker_processes  1;error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;events {    worker_connections  1024;}http {    include       /etc/nginx/mime.types;    default_type  application/octet-stream;    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  /var/log/nginx/access.log  main;    sendfile        on;    #tcp_nopush     on;    keepalive_timeout  65;    #gzip  on;    include /etc/nginx/conf.d/*.conf;}
  • 在/usr/local/nginx/conf下创建 log_format.conf文件,作为日志分割配置文件使用。
if ($time_iso8601 ~ "^(d{4})-(d{2})-(d{2})T(d{2}):(d{2}):(d{2})") {        set $year $1;        set $month $2;        set $day $3;        set $hour $4;}access_log /var/log/nginx/${server_name}_${year}-${month}-${day}-${hour}_access.log main;

如上配置,可以实现日志的按小时分割,生产环境一般改为按天分割即可。

注意:此处会按小时生成日志文件,Nginx容器需要有文件生成的权限,nginx.conf 的第一行user 后不能为nginx。必须改为

user root
  • 创建项目配置文件

在nginx.conf中我们可以看到 include /etc/nginx/conf.d/*.conf 。Nginx会扫描这个目录下所有以.conf结尾的文件。

我个人习惯在nginx.conf设置全局配置,在/etc/nginx/conf.d/下创建单独的项目配置文件。这样更清晰一些。

在/usr/local/nginx/conf.d 目录下创建vip.conf

[root@192 nginx]# vim conf.d/vip.conf server {    listen       80;    server_name  vip;    include log_format.conf;        location / {        root   /usr/share/nginx/html;        index  index.html index.htm;    }}
  1. include: 引入前面我们定义的日志分割配置文件 log_format.conf
  2. root:表示匹配成功之后进入的目录,我们创建容器后会把/usr/local/nginx/html/dist 目录下的文件拷贝到容器的/usr/share/nginx/html目录下。
  3. index:表示默认的首页面
  • 创建容器
docker run -d -p 80:80 --name nginx80 --restart=always  -v /usr/local/nginx/html/dist/:/usr/share/nginx/html  -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  -v /usr/local/nginx/logs/:/var/log/nginx  -v /usr/local/nginx/conf.d:/etc/nginx/conf.d  -v /usr/local/nginx/conf/log_format.conf:/etc/nginx/log_format.conf  nginx:latest

如果返回一长串字符即为成功。

参数说明:

  1. -d 后台运行
  2. -p 设置端口映射 宿主机端口:容器端口
  3. --name 设置容器别名
  4. --restart=always 设置容器开机启动
  5. -v 数据卷映射 宿主机目录:容器目录。这样方便我们管理容器配置文件及日志文件

效果验证

  • 浏览器访问Vue项目


docker如何修改nginx日志配置 docker nginx日志输出_nginx 日志_02


说明部署Vue前端项目成功

  • 查看日志目录
[root@192 logs]# ll总用量 8-rw-r--r--. 1 root root    0 3月   9 11:08 access.log-rw-r--r--. 1 root root  291 3月   9 11:08 error.log-rw-r--r--. 1 root root 2110 3月   9 11:08 vip_2020-03-09-03_access.log

可以看到,产生了vip_2020-03-09-03_access.log,日志分割也成功了。