7.2.6 日志与权限基础配置

在Nginx安装与配置基础阶段,日志与权限是最先需要规范化的运维要素。正确的日志配置能为故障定位、访问分析与安全审计提供依据,合理的权限设置则能降低被入侵后的破坏范围,保障服务长期稳定运行。

文章图片

日志类型与作用#

  • access.log:记录请求链路,支撑流量分析与性能排查。
  • error.log:记录错误与告警,定位配置与运行问题。

日志基础配置示例(含格式定义)#

配置文件:/etc/nginx/nginx.conf

user  nginx nginx;

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" '
                'rt=$request_time uct=$upstream_connect_time '
                'uht=$upstream_header_time urt=$upstream_response_time';

access_log  /var/log/nginx/access.log  main;
error_log   /var/log/nginx/error.log   warn;

验证与生效:

# 检查配置语法
nginx -t

# 平滑重载
nginx -s reload

预期效果:
- /var/log/nginx/access.log 有请求记录
- /var/log/nginx/error.log 在有错误时输出告警

按站点拆分日志示例#

站点配置:/etc/nginx/conf.d/site.conf

server {
    listen 80;
    server_name www.example.com;

    access_log /var/log/nginx/www.example.com.access.log main;
    error_log  /var/log/nginx/www.example.com.error.log  warn;

    root /data/wwwroot/example;
    index index.html;
}

权限与用户配置原则(含命令示例)#

目标:主进程root绑定低端口,工作进程低权限运行。

# 创建运行用户与组
groupadd -r nginx
useradd -r -g nginx -s /sbin/nologin -M nginx

# 站点目录与日志目录权限
mkdir -p /data/wwwroot/example /var/log/nginx
chown -R nginx:nginx /data/wwwroot/example /var/log/nginx
chmod 755 /data/wwwroot/example
chmod 750 /var/log/nginx

# 配置文件权限
chown -R root:root /etc/nginx
chmod -R 644 /etc/nginx/nginx.conf

解释:
- -s /sbin/nologin 禁止登录
- 日志目录仅服务用户可写,避免泄露与篡改
- 配置文件仅root可写,降低被篡改风险

日志轮转与容量控制(logrotate示例)#

文件:/etc/logrotate.d/nginx

/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 640 nginx nginx
    sharedscripts
    postrotate
        /usr/sbin/nginx -s reopen
    endscript
}

执行与验证:

# 手动执行轮转测试
logrotate -f /etc/logrotate.d/nginx

# 重新打开日志文件
nginx -s reopen

预期效果:产生压缩历史日志,当前日志重新创建并继续写入。

常见排错与定位命令#

  1. 日志无输出
# 确认配置生效
nginx -T | grep -E "access_log|error_log"

# 确认目录权限
namei -l /var/log/nginx/access.log
  1. Permission denied
# 查看进程用户
ps -ef | grep nginx

# 检查SELinux
getenforce
# 若为 Enforcing,临时测试
setenforce 0
  1. 日志格式缺字段
# 查看log_format定义是否一致
nginx -T | grep -n "log_format"

练习与实操任务#

  1. 为两个虚拟主机分别生成独立日志,访问后验证日志写入是否正确。
  2. 将error_log级别调整为info,制造一个404请求,确认错误日志输出。
  3. 使用logrotate手动轮转后,验证新日志继续写入且旧日志被压缩。
  4. 修改站点目录权限为700后访问站点,观察是否出现403并恢复权限。