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
预期效果:产生压缩历史日志,当前日志重新创建并继续写入。
常见排错与定位命令#
- 日志无输出
# 确认配置生效
nginx -T | grep -E "access_log|error_log"
# 确认目录权限
namei -l /var/log/nginx/access.log
- Permission denied
# 查看进程用户
ps -ef | grep nginx
# 检查SELinux
getenforce
# 若为 Enforcing,临时测试
setenforce 0
- 日志格式缺字段
# 查看log_format定义是否一致
nginx -T | grep -n "log_format"
练习与实操任务#
- 为两个虚拟主机分别生成独立日志,访问后验证日志写入是否正确。
- 将error_log级别调整为
info,制造一个404请求,确认错误日志输出。 - 使用logrotate手动轮转后,验证新日志继续写入且旧日志被压缩。
- 修改站点目录权限为
700后访问站点,观察是否出现403并恢复权限。