Nginx 日志分析技巧
Nginx 日志分析技巧
Nginx 日志是排查问题、分析流量的重要工具。学会看日志,网站问题排查效率翻倍。
1. 日志位置
# 默认访问日志
/var/log/nginx/access.log
# 默认错误日志
/var/log/nginx/error.log
可以在 nginx.conf 里自定义:
access_log /var/log/nginx/www.access.log;
error_log /var/log/nginx/www.error.log;
2. 日志格式
默认日志格式:
127.0.0.1 - - [04/Oct/2026:10:00:00 +0800] "GET / HTTP/1.1" 200 612 "https://www.baidu.com/" "Mozilla/5.0..."
各字段含义:
- IP 地址
- 请求时间
- 请求方法和路径
- 状态码
- 响应大小
- 来源页面
- User-Agent
3. 常用分析命令
# 查看访问量前10的IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head 10
# 查看访问量前10的页面
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head 10
# 查看状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -nr
# 查看 404 请求
grep ' 404 ' access.log
# 查看 502 错误
grep ' 502 ' access.log
4. 排查问题
排查 502 错误:
grep ' 502 ' access.log | tail 20
排查慢请求:
开启慢日志:
slow_request_log /var/log/nginx/slow.log;
slow_request_time 5s;
排查爬虫:
grep 'Baiduspider' access.log
grep 'Googlebot' access.log
5. 流量统计
# 今天总访问量
grep '04/Oct/2026' access.log | wc -l
# 今天总流量
grep '04/Oct/2026' access.log | awk '{sum+=$10} END {print sum/1024/1024 " MB"}'
# 每小时访问量
awk '{print $4}' access.log | cut -d: -f2 | uniq -c
6. 日志切割
日志太大要切割,用 logrotate:
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
notifempty
create 0640 nginx adm
postrotate
systemctl reload nginx
endscript
}
7. 常用工具
- GoAccess:实时日志分析工具
- ELK:Elasticsearch + Logstash + Kibana
- Zabbix:监控告警
总结
Nginx 日志分析核心:
- 位置:/var/log/nginx/
- 命令:awk + sort + uniq
- 排查:看状态码、看慢请求
- 切割:用 logrotate
学会这些,日常日志分析基本够用了。
Docker 常用命令大全
Docker 常用命令大全
Docker 命令不多,但记不住还是很麻烦。整理一份常用命令清单,收藏备用。
1. 镜像命令
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
# 搜索镜像
docker search nginx
# 导出镜像
docker save -o nginx.tar nginx:latest
# 导入镜像
docker load -i nginx.tar
2. 容器命令
# 启动容器(后台运行)
docker run -d --name mynginx -p 80:80 nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop mynginx
# 启动已停止的容器
docker start mynginx
# 重启容器
docker restart mynginx
# 删除容器
docker rm mynginx
# 强制删除运行中的容器
docker rm -f mynginx
3. 进入容器
# 进入容器(bash)
docker exec -it mynginx bash
# 进入容器(sh)
docker exec -it mynginx sh
# 查看容器日志
docker logs mynginx
# 实时查看日志
docker logs -f mynginx
# 查看容器详情
docker inspect mynginx
4. 文件操作
# 从容器复制文件到宿主机
docker cp mynginx:/etc/nginx/nginx.conf ./
# 从宿主机复制文件到容器
docker cp ./index.html mynginx:/usr/share/nginx/html/
5. 端口和网络
# 查看容器端口映射
docker port mynginx
# 查看容器 IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx
6. 清理命令
# 停止所有容器
docker stop $(docker ps -q)
# 删除所有停止的容器
docker container prune
# 删除所有未使用的镜像
docker image prune
# 删除所有未使用的资源(危险操作)
docker system prune -a
7. Docker Compose 常用命令
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重启某个服务
docker-compose restart nginx
总结
Docker 常用命令核心:
- 镜像:pull / images / rmi
- 容器:run / ps / stop / start / rm
- 进入:exec -it
- 日志:logs -f
- 清理:prune
记住这些,日常 Docker 操作基本够用了。
Nginx 负载均衡配置
Nginx 负载均衡配置实战
网站流量大了,单台服务器扛不住,就得用负载均衡。Nginx 做负载均衡很简单,几行配置就行。
1. 基本配置
http {
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
}
}
}
默认是轮询(round robin),请求轮流分到三台服务器。
2. 四种分配策略
轮询(默认):一个一个来。
权重(weight):按比例分配,性能好的服务器多分担。
upstream backend {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=1;
}
3:2:1 的比例,第一台分一半请求。
ip_hash:同一个 IP 固定分到同一台服务器,解决 session 问题。
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
least_conn:最少连接数优先,分给当前最闲的服务器。
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}
3. 健康检查
upstream backend {
server 192.168.1.101 max_fails=3 fail_timeout=30s;
server 192.168.1.102 max_fails=3 fail_timeout=30s;
}
一台服务器挂了,自动从列表里摘掉,恢复了再加回来。
4. 常用参数
- max_fails:失败几次算挂了,默认1次
- fail_timeout:挂了多久再重试,默认10秒
- down:标记服务器下线,不分配请求
- backup:备用服务器,其他都挂了才用
5. 完整示例
upstream backend {
server 192.168.1.101 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.102 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.103 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
总结
Nginx 负载均衡核心:
- upstream 定义服务器组
- 四种策略:轮询、权重、ip_hash、最少连接
- 健康检查自动摘除故障节点
- 生产环境用权重 + 健康检查就够了
搞懂这些,多台服务器集群就跑起来了。
Linux 文件权限详解
Linux 文件权限详解
Linux 权限是服务器安全的基础,搞懂权限,服务器才不会乱。
1. 查看权限
用 ls -l 查看文件权限:
ls -l file.txt
-rw-r--r-- 1 user group 1024 Oct 4 10:00 file.txt
开头10个字符就是权限:
- 第1个:文件类型(- 普通文件,d 目录)
- 第2-4个:所有者权限
- 第5-7个:所属组权限
- 第8-10个:其他人权限
2. 三种权限
- r(读)= 4
- w(写)= 2
- x(执行)= 1
数字加起来就是权限值:
- 7 = 4+2+1 = rwx
- 6 = 4+2 = rw-
- 5 = 4+1 = r-x
- 4 = 4 = r--
3. 修改权限 chmod
# 给所有者加执行权限
chmod u+x file.txt
# 给所有人只读权限
chmod 444 file.txt
# 所有者读写执行,组和其他人只读
chmod 744 file.txt
4. 修改所有者 chown
# 修改文件所有者
chown user:group file.txt
# 递归修改目录
chown -R user:group /data/www
5. 常用权限
- 普通文件:644(所有者读写,其他人只读)
- 目录:755(所有者读写执行,其他人读执行)
- 脚本文件:755(所有者能执行)
6. 安全建议
- 网站目录不要用 root 所有者
- 上传目录禁止执行权限
- 配置文件权限设为 600,只有所有者能读
总结
Linux 权限核心就是三组(所有者、组、其他人)× 三种(读、写、执行),用数字表示就是 r=4、w=2、x=1。搞懂这个,日常权限管理基本够用了。
Linux 进程管理命令
Linux 进程管理常用命令
服务器上跑了多少进程?哪个进程占内存多?怎么杀进程?这些命令必须会。
1. 查看进程
# 查看所有进程
ps aux
# 查找指定进程
ps aux | grep nginx
# 实时查看
top
2. top 命令详解
top 是最常用的进程查看工具:
- 第一行:系统负载
- 第二行:任务数
- 第三行:CPU 使用率
- 第四行:内存使用
- 第五行:Swap 使用
按 q 退出,按 k 杀进程。
3. 杀进程
# 按 PID 杀
kill 1234
# 强制杀
kill -9 1234
# 按名字杀
pkill nginx
# 杀掉所有同名进程
killall nginx
4. 查看端口占用
# 查看端口被谁占了
netstat -tlnp | grep 80
# 或者用 ss
ss -tlnp | grep 80
5. 查看进程树
# 查看进程父子关系
pstree
# 查看某个进程的子进程
pstree -p 1234
6. 后台运行
# 后台运行
nohup ./script.sh &
# 查看后台任务
jobs
# 把任务调到前台
fg %1
7. 查看资源占用
# 内存占用排行
ps aux --sort=-%mem | head
# CPU 占用排行
ps aux --sort=-%cpu | head
总结
日常运维就这几个命令:ps、top、kill、netstat、nohup。学会这些,服务器进程管理基本够用了。
Nginx 日志分析技巧
Nginx 日志分析常用命令
Nginx 日志是排查问题、分析流量的重要工具。掌握几个常用命令,线上排查效率翻倍。
1. 查看访问量
# 总请求数
wc -l access.log
# 今天的请求数
grep "04/Oct/2026" access.log | wc -l
2. 分析 IP 访问量
# 访问最多的前10个IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
3. 分析 URL 访问量
# 访问最多的前10个URL
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -10
4. 分析状态码
# 统计各状态码数量
awk '{print $9}' access.log | sort | uniq -c | sort -nr
# 404错误数量
grep " 404 " access.log | wc -l
5. 分析流量
# 总流量
awk '{sum += $10} END {print sum/1024/1024 " MB"}' access.log
6. 实时监控
# 实时查看最新日志
tail -f access.log
# 实时查看502错误
tail -f access.log | grep " 502 "
7. 查找慢请求
# 响应时间超过1秒的请求
awk '$NF > 1' access.log | head -10
8. 排查爬虫
# 百度爬虫访问量
grep "Baiduspider" access.log | wc -l
总结
Nginx 日志分析主要靠 awk + sort + uniq 组合,掌握这几个命令,日常排查基本够用。复杂分析可以用 GoAccess 等可视化工具。
Linux 常用命令:从文件操作到进程管理的完整指南
前言
Linux 是后端开发的必修课。很多新手面对黑窗口就发怵,其实只要掌握常用命令,日常开发就够用了。本文整理最常用的 Linux 命令。
一、文件操作
1. 查看目录
# 列出当前目录文件
ls
# 详细信息
ls -l
# 包括隐藏文件
ls -la
# 按时间排序
ls -lt
2. 切换目录
# 进入目录
cd /home/user
# 回到上一级
cd ..
# 回到用户主目录
cd ~
# 回到上次目录
cd -
3. 创建目录
# 创建目录
mkdir test
# 递归创建多级目录
mkdir -p a/b/c
4. 创建文件
# 创建空文件
touch test.txt
# 写入内容
echo "hello" > test.txt
# 追加内容
echo "world" >> test.txt
5. 复制文件
# 复制文件
cp test.txt test2.txt
# 复制目录
cp -r dir1 dir2
6. 移动/重命名
# 移动文件
mv test.txt /tmp/
# 重命名
mv old.txt new.txt
7. 删除文件
# 删除文件
rm test.txt
# 删除目录
rm -rf dir1
警告:rm -rf 很危险,一定要确认路径!
二、查看文件内容
1. cat
# 查看整个文件
cat test.txt
2. less
# 分页查看
less test.log
# 快捷键:
# 空格:下一页
# b:上一页
# /关键字:搜索
# q:退出
3. head / tail
# 看前 10 行
head -10 test.txt
# 看后 10 行
tail -10 test.txt
# 实时看日志(最常用)
tail -f /var/log/nginx/access.log
三、查找文件
1. find
# 按文件名查找
find / -name "nginx.conf"
# 按大小查找(大于 100M)
find / -size +100M
# 按修改时间查找(7 天内修改的)
find / -mtime -7
2. grep
# 在文件里搜索
grep "error" test.log
# 不区分大小写
grep -i "error" test.log
# 显示行号
grep -n "error" test.log
# 递归搜索目录
grep -r "function" /var/www/
# 配合管道使用
ps aux | grep nginx
四、系统状态
1. 查看进程
# 所有进程
ps aux
# 查找进程
ps aux | grep nginx
2. 杀死进程
# 按 PID 杀
kill 1234
# 强制杀
kill -9 1234
# 按名字杀
pkill nginx
3. 查看端口
# 查看所有监听端口
netstat -tlnp
# 查看某个端口
netstat -tlnp | grep 80
4. 查看磁盘
# 磁盘使用情况
df -h
# 当前目录大小
du -sh .
# 每个子目录大小
du -sh *
5. 查看内存
free -h
五、权限管理
1. chmod
# 给文件加执行权限
chmod +x test.sh
# 755:所有者可读写执行,其他人可读执行
chmod 755 test.sh
# 644:所有者可读写,其他人只读
chmod 644 test.txt
2. chown
# 修改文件所有者
chown www:www test.txt
六、压缩解压
1. tar
# 压缩
tar -zcvf website.tar.gz /var/www/html
# 解压
tar -zxvf website.tar.gz
2. zip
# 压缩
zip -r website.zip /var/www/html
# 解压
unzip website.zip
七、网络相关
1. curl
# 访问网页
curl https://www.baidu.com
# 查看响应头
curl -I https://www.baidu.com
# 发 POST 请求
curl -X POST -d "name=张三" https://api.example.com
2. wget
# 下载文件
wget https://example.com/file.zip
八、常用快捷键
| 快捷键 | 作用 |
|---|---|
| Ctrl + C | 终止当前命令 |
| Ctrl + Z | 暂停当前命令 |
| Ctrl + D | 退出终端 |
| Tab | 自动补全 |
| Ctrl + R | 搜索历史命令 |
| !命令 | 执行最近一次的某命令 |
九、常用操作速查
| 操作 | 命令 |
|---|---|
| 看文件 | cat / less / tail -f |
| 找文件 | find / grep |
| 看进程 | ps aux / top |
| 看端口 | netstat -tlnp |
| 看磁盘 | df -h / du -sh |
| 改权限 | chmod / chown |
总结
Linux 常用命令的核心要点:
- 文件操作:ls / cd / mkdir / cp / mv / rm
- 查看内容:cat / less / tail -f
- 查找搜索:find / grep
- 进程管理:ps / kill / netstat
- 系统状态:df / du / free
不用背,用多了自然就记住了。先把这几个常用的练熟,日常开发基本够用。
Nginx 配置实战:反向代理、负载均衡与缓存
前言
Nginx 是目前最流行的 Web 服务器和反向代理软件。很多人会写简单的配置,但对反向代理、负载均衡、缓存这些高级用法并不熟悉。本文带你从零开始,掌握 Nginx 的核心配置技巧。
一、反向代理基础
反向代理是 Nginx 最常用的功能之一。用户请求 Nginx,Nginx 再把请求转发给后端应用服务器。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
关键说明:
proxy_pass:后端服务地址proxy_set_header:传递真实的客户端信息给后端,否则后端拿到的都是 Nginx 的信息
二、负载均衡
当后端有多台服务器时,可以用 Nginx 做负载均衡。
1. 轮询(默认)
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
2. 加权轮询
upstream backend {
server 127.0.0.1:8080 weight=3;
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=1;
}
weight 值越大,分配的请求越多。适合配置不同的服务器。
3. ip_hash 会话保持
upstream backend {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
同一个 IP 的请求总是分配到同一台后端服务器,适合有 session 的场景。
三、缓存配置
Nginx 缓存可以大幅减轻后端压力,提升响应速度。
1. 配置缓存路径
http {
# 定义缓存路径和参数
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
}
}
}
关键参数说明:
keys_zone:缓存共享内存区大小max_size:缓存最大占用空间inactive:多久没访问就自动清理proxy_cache_valid:不同状态码的缓存时间X-Cache-Status:查看是否命中缓存(HIT/MISS/BYPASS)
2. 不缓存特定请求
location /admin/ {
proxy_pass http://backend;
proxy_cache off; # 后台页面不缓存
}
四、HTTPS 配置
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
# HTTP 跳转 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
五、常见问题排查
1. 502 Bad Gateway
通常是后端服务挂了或者端口不对:
# 检查后端服务是否在运行
netstat -tlnp | grep 8080
# 查看 Nginx 错误日志
tail -f /var/log/nginx/error.log
2. 上传文件大小限制
http {
client_max_body_size 50M;
}
3. 超时设置
location / {
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
总结
Nginx 配置的核心思路:
- 反向代理:把请求转发给后端应用
- 负载均衡:多台后端服务器分担流量
- 缓存:静态内容缓存,减少后端压力
- HTTPS:加密传输,安全第一
掌握这些配置,你就能应对大部分 Web 服务器场景了。Nginx 配置文件改完记得执行 nginx -t 检查语法,然后 nginx -s reload 重载生效。