自编译nginx的日志轮替配置

一般来说,linux通过rpm安装的nginx都自带有日志轮替的配置,所以并不会导致单个日志过大的问题。但如果我们通过自编译来部署nginx,是需要自行配置的。日志轮替的原理就是利用linux的logrotate工具进行,我们现在直接参考rpm安装的logrotate配置文件来进行配置,内容如下

/var/opt/rh/rh-nginx120/log/nginx/*log {
    create 0644 root root
    daily
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /var/opt/rh/rh-nginx120/log/nginx/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

将以上内容放到/etc/logrotate.d/ 目录下。

然而,第二天你会发现,日志并没有被归档?

让我们看一下日志/var/log/messages,会发现有以下一行不是很明显的报错日志,但这只说明退出码错误。

有没有更详细的的呢?有!这样的操作,一般都会发到root的系统mail邮箱中。我们查看一下/var/spool/mail/root,里面记录了更加详细的内容,如下图。

根据上图,明显可以看到是因为权限不足的原因导致的,这时候我们首先排查的就是相应目录和文件的rwx权限。

权限正常呀?那怎么还会提示权限不足的问题呢!?

这时候,我们不要忘了,Linux系统对权限的控制,还有另外一种 selinux 。

然后我们查看一下系统的审计日志内容, /var/log/audit/audit.log

果然,我们可以看到下图中对logrotate的 deny限制,说明,正是selinux导致的。 

对以上的解决方法无非两种,关闭selinux或者给文件、目录授权相应的selinux策略。

那我们再想想,为什么rpm包安装的nginx没有这样的问题呢?那肯定是因为安装的时候已经配置了。

 好,那我们下载一个rpm的安装包瞧一瞧。

解包后,我们在\opt\rh\rh-nginx120\register.d\路径下可以看到90.XXXXX.run的文件,打开里面的内容,就可以找到我们的解决方法。

 所以,接下来我们配置

semanage fcontext -a -e /var/log/nginx /var/opt/rh/rh-nginx120/log/nginx

restorecon -R /var/opt/rh/rh-nginx120/log/nginx

 OK,这下就彻底解决nginx日志轮替的问题。

关于selinux的问题延伸一下:

首先需要selinux的一些基础知识,然后我们往下看。

关于/var/log/nginx的selinux的rule我们可以看一下,其 type为 httpd_log_t ,那么我们是否必须将nginx的log的selinux的type类型设置为  httpd_log_t 呢?

并不一定,这个涉及到selinux中的原理,我们可以简单的通过工具看

sealert -a audit.log

通过这个命令可以分析相应的日志并给出对应的建议,通过以上命令我们可以看到一些结果,重点关注标红的那一部分,可以看出FILE_TYPE可以选择的类型非常多。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值