Linux查看系统负载

Linux查看系统负载

引言

服务器CPU、内存压力过大,会造成网站接口响应缓慢、502报错。运维排查服务器性能问题第一步就是查看系统负载,了解服务器当前资源压力,及时扩容或者优化程序。

负载概念

uptime输出的三个数字:1分钟、5分钟、15分钟平均负载。代表等待CPU处理的任务数量。

多核CPU参考标准:4核服务器,负载接近4说明CPU打满;超过代表任务排队,系统过载。

常用命令

# 快速查看负载
uptime

# 实时监控
top

# 更轻量化监控
htop

# 查看CPU核心数量
nproc

top命令内可以按1查看每个核心负载;P按CPU使用率排序,快速找到耗资源进程。

排查思路

  1. 负载高,CPU使用率高:程序代码循环、大量计算,定位进程优化代码;
  2. 负载高,CPU使用率低:大量IO等待(磁盘读写慢、数据库阻塞),查看磁盘io iostat。

实操示例

# 安装iostat
yum install -y sysstat

# 持续查看io状态
iostat -x 1

总结

平均负载不只代表CPU,还包含IO等待。看到高负载不能直接判定CPU瓶颈,结合top、iostat综合定位,区分是计算密集还是IO密集导致服务器卡顿。


emer 发布于  2026-10-18 07:13 

Linux磁盘满了怎么清理,大文件查找命令

前言

网站突然打不开了?SSH连不上了?一查磁盘100%满了!本文讲怎么查找大文件、清理磁盘空间。

一、查看磁盘使用情况

df命令

df -h

输出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   38G  2.0G  95% /

看什么:

  • Use%:使用率,超过90%就要注意了
  • Avail:可用空间

查看当前目录占用

du -sh

二、查找大文件

查找大于100M的文件

find / -type f -size +100M 2>/dev/null

解释:

  • /:从根目录开始找
  • -type f:只找文件
  • -size +100M:大于100M
  • 2>/dev/null:忽略错误信息

查找大于1G的文件

find / -type f -size +1G 2>/dev/null

按大小排序

find / -type f -size +100M 2>/dev/null | xargs du -h | sort -rh

三、查找大目录

查看各目录大小

du -sh /*

一级一级往下找

du -sh /var/*
du -sh /var/log/*
du -sh /var/lib/*

查看前10大目录

du -sh /* | sort -rh | head -10

四、常见大文件位置

1. 日志文件

/var/log/
/var/log/messages
/var/log/nginx/
/var/log/mysql/

2. 临时文件

/tmp/
/var/tmp/

3. 邮件

/var/spool/mail/

4. 数据库文件

/var/lib/mysql/

5. Docker镜像

/var/lib/docker/

6. 上传文件

/www/wwwroot/
/var/www/html/

五、清理方法

清理日志文件

方法1:清空文件

> /var/log/messages

方法2:删除旧日志

find /var/log -name "*.log" -mtime +30 -delete

删除30天前的日志。

清理yum缓存

yum clean all

清理Docker

docker system prune -a

清理临时文件

rm -rf /tmp/*

注意: 正在用的文件别删。

清理旧内核

package-cleanup --oldkernels --count=1

六、查看文件被谁占用

问题: 删了文件但磁盘没释放?

原因: 有进程还在写这个文件。

查看被删除但还被占用的文件

lsof | grep deleted

重启相关进程

systemctl restart nginx

七、常见坑

坑1:删了文件但空间没释放

原因: 进程还在写这个文件。

解决: 重启进程,或者用> 文件名清空。

坑2:日志一直涨

解决: 配置logrotate日志切割。

坑3:Docker占了很多空间

docker system df

清理:

docker system prune -a

八、自动清理脚本

写个脚本定期清理:

#!/bin/bash
# 清理30天前的日志
find /var/log -name "*.log" -mtime +30 -delete
# 清理yum缓存
yum clean all
# 清理Docker
docker system prune -f

加到crontab:

0 3 * * * /bin/bash /root/clean.sh

总结

记住:

  1. 用df -h看磁盘使用率
  2. 用du -sh /*看哪个目录大
  3. 用find / -size +100M找大文件
  4. 先看日志,再看Docker,再看临时文件
  5. 删文件前确认不用了
  6. 删了没释放就重启进程

最常用:

df -h
du -sh /*
find / -type f -size +100M 2>/dev/null

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:52 

Nginx 反向代理配置

Nginx 反向代理配置

反向代理是 Nginx 最常用的功能之一,配置很简单。

1. 什么是反向代理

反向代理就是:用户访问 Nginx,Nginx 把请求转发给后端服务器,再把结果返回给用户。

作用:

  • 隐藏后端服务器
  • 负载均衡
  • 统一入口
  • 缓存静态内容

2. 基本配置

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_pass:后端地址
  • proxy_set_header:传递请求头

3. 常用请求头

location / {
    proxy_pass http://127.0.0.1:8080;

    # 传递域名
    proxy_set_header Host $host;

    # 传递真实IP
    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;
}

4. 超时配置

location / {
    proxy_pass http://127.0.0.1:8080;

    # 连接超时
    proxy_connect_timeout 60s;

    # 发送超时
    proxy_send_timeout 60s;

    # 读取超时
    proxy_read_timeout 60s;
}

5. WebSocket 代理

location /ws {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;

    # WebSocket 升级
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

6. 负载均衡

# 定义后端服务器组
upstream backend {
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=2;
    server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

7. 静态文件直接返回

server {
    listen 80;
    server_name example.com;

    # 静态文件直接处理
    location ~* \.(js|css|png|jpg|gif)$ {
        root /var/www/static;
        expires 30d;
    }

    # 其他请求转发后端
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
    }
}

8. 配置生效

# 检查配置
nginx -t

# 重载配置
nginx -s reload

9. 常见问题

1)502 Bad Gateway

  • 后端服务没启动
  • 后端端口不对
  • 后端超时

2)504 Gateway Timeout

  • 后端处理太慢
  • 调整超时时间

3)获取不到真实IP

  • 没配置 X-Real-IP
  • 后端没读取请求头

4)WebSocket 连不上

  • 没配置 Upgrade 和 Connection 头

10. 生产建议

1)一定要传请求头

  • Host
  • X-Real-IP
  • X-Forwarded-For

2)合理设置超时

  • 根据业务调整
  • 不要太长也不要太短

3)静态文件 Nginx 直接处理

  • 减轻后端压力
  • 提高性能

4)开启 gzip 压缩

gzip on;
gzip_types text/css application/javascript;

总结

Nginx 反向代理配置要点:

  • proxy_pass 指定后端地址
  • 一定要传请求头
  • 常用超时配置
  • WebSocket 要升级头
  • upstream 做负载均衡
  • 静态文件直接返回
  • 配置完 nginx -t 检查
  • 502 检查后端是否启动
  • 生产环境传全请求头

反向代理是 Nginx 基本功,一定要熟练掌握。


emer 发布于  2026-10-9 07:30 

Linux 查看内存使用

Linux 查看内存使用

服务器内存不够用的时候,得知道谁在吃内存。

1. free 命令

最常用的查看内存命令:

free -h

输出说明:

  • total: 总内存
  • used: 已用内存
  • free: 空闲内存
  • shared: 共享内存
  • buff/cache: 缓存
  • available: 可用内存

注意: 不要只看 free,要看 available。Linux 会用空闲内存做缓存,这是好事。

2. top 命令

实时查看内存占用:

top

常用操作:

  • 按 M 按内存排序
  • 按 P 按CPU排序
  • 按 q 退出

重点看:

  • %MEM:进程内存占用百分比
  • RES:进程实际占用物理内存

3. ps 命令

查看进程内存占用:

# 按内存占用排序,前10
ps aux --sort=-%mem | head -10

输出说明:

  • USER:进程用户
  • %MEM:内存占用
  • RSS:实际物理内存(KB)
  • COMMAND:进程命令

4. vmstat 命令

查看整体内存和CPU:

# 每秒刷新一次
vmstat 1

重点列:

  • swpd:交换分区使用
  • free:空闲内存
  • buff:缓冲区
  • cache:缓存
  • si:换入内存
  • so:换出内存

注意: si 和 so 大于0说明内存不够,在用swap。

5. /proc/meminfo

查看详细内存信息:

cat /proc/meminfo

重点看:

  • MemTotal:总内存
  • MemFree:空闲内存
  • MemAvailable:可用内存
  • Buffers:缓冲区
  • Cached:缓存
  • SwapTotal:交换分区总量
  • SwapFree:交换分区空闲

6. 缓存说明

Linux 内存缓存机制:

  • 空闲内存用来做文件缓存
  • 程序需要时会自动释放
  • cached 高不是坏事
  • available 才是真正可用的

7. 内存不够怎么办

1)找出吃内存的进程

ps aux --sort=-%mem | head

2)重启大内存进程

  • 确认是哪个进程
  • 重启释放内存

3)清理缓存

# 清理页面缓存
echo 1 > /proc/sys/vm/drop_caches

# 清理目录项和inode
echo 2 > /proc/sys/vm/drop_caches

# 全部清理
echo 3 > /proc/sys/vm/drop_caches

4)加交换分区

  • 临时方案,治标不治本
  • 最好加物理内存

8. 常用组合命令

# 查看内存占用前5的进程
ps aux --sort=-%mem | head -6

# 查看swap使用最多的进程
for i in $(ls /proc | grep -E '^[0-9]+'); do
    awk '/VmSwap/{print $2/1024 " MB", $0}' /proc/$i/status 2>/dev/null
done | sort -nr | head

9. 监控建议

1)设置内存告警

  • 超过80%告警
  • 及时处理

2)定期检查

  • 每天看一次内存
  • 发现异常及时处理

3)不要盲目清缓存

  • 缓存是好事
  • 清缓存会降低性能

总结

Linux 查看内存使用要点:

  • free -h 看整体内存
  • top 按M看内存占用
  • ps aux 排序找大进程
  • vmstat 看swap使用
  • /proc/meminfo 看详细信息
  • 不要只看 free,要看 available
  • cached 高是好事
  • 内存不够先找大进程
  • 清缓存要谨慎
  • 最好加物理内存

学会看内存,服务器问题就好排查了。


emer 发布于  2026-10-9 07:29 

Nginx 反向代理原理

Nginx 反向代理原理

反向代理是 Nginx 最常用的功能,搞懂原理很有必要。

1. 什么是反向代理

正向代理:代理客户端,比如翻墙工具。
反向代理:代理服务器,客户端不知道真实服务器。

用户请求 Nginx,Nginx 再转发给后端服务器,用户以为自己直接访问的就是 Nginx。

2. 为什么用反向代理

1)隐藏真实服务器

  • 后端服务器 IP 不暴露
  • 更安全

2)负载均衡

  • 多个后端服务器分摊请求
  • 提高并发能力

3)统一入口

  • 多个服务用一个域名
  • 不同路径转发到不同服务

4)SSL 卸载

  • HTTPS 证书在 Nginx 配置
  • 后端用 HTTP 就行

5)缓存静态内容

  • Nginx 直接返回静态资源
  • 减轻后端压力

3. 基本配置

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;
    }
}

4. 常用代理头

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;

后端通过这些头获取真实客户端信息。

5. 路径转发示例

# 根路径转发到PHP服务
location / {
    proxy_pass http://127.0.0.1:8080;
}

# /api 转发到后端接口
location /api/ {
    proxy_pass http://127.0.0.1:3000/;
}

# /static 直接读本地文件
location /static/ {
    root /var/www;
}

6. 超时设置

# 连接超时
proxy_connect_timeout 60s;

# 读取超时
proxy_read_timeout 60s;

# 发送超时
proxy_send_timeout 60s;

7. 常见问题

1)后端获取不到真实IP

  • 检查 X-Real-IP 头是否设置
  • 后端代码是否读取这个头

2)WebSocket 连接失败

  • 需要添加 Upgrade 头
  • 配置 HTTP/1.1
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;

3)大文件上传失败

  • 修改 client_max_body_size
  • 增加 proxy_read_timeout

总结

Nginx 反向代理要点:

  • 代理服务器,隐藏真实后端
  • 实现负载均衡、统一入口
  • 配置 proxy_pass 转发
  • 记得设置常用代理头
  • 后端通过请求头获取真实客户端信息
  • 注意超时和上传大小限制
  • WebSocket 需要特殊配置

做 Web 开发,反向代理是必备技能。


emer 发布于  2026-10-9 07:12 

Nginx 负载均衡配置

Nginx 负载均衡配置

多台服务器分流,提高网站并发能力,Nginx 负载均衡很常用。

1. 什么是负载均衡

  • 多台服务器做同样的服务
  • Nginx 把请求分发给不同服务器
  • 提高并发能力,一台挂了其他还能用

2. 基础配置

upstream myserver {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

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

    location / {
        proxy_pass http://myserver;
    }
}

3. 常用分发策略

1)轮询(默认)

  • 一个接一个轮流分
    upstream myserver {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    }

2)加权轮询

  • 性能好的服务器多分点
    upstream myserver {
    server 127.0.0.1:8080 weight=3;
    server 127.0.0.1:8081 weight=1;
    }

3)ip_hash

  • 同一个IP固定访问同一台
    upstream myserver {
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    }

4. 健康检查

upstream myserver {
    server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
}
  • max_fails:失败几次标记为挂掉
  • fail_timeout:多久后重试

5. 常用参数

upstream myserver {
    # 备用服务器,其他都挂了才用
    server 127.0.0.1:8080 backup;

    # 不参与负载均衡
    server 127.0.0.1:8081 down;
}

6. 注意事项

  • 多台服务器数据要同步(Session、数据库)
  • Session 共享用 Redis
  • 文件上传用共享存储

总结

Nginx 负载均衡要点:

  • upstream 定义服务器组
  • proxy_pass 转发到组
  • 轮询、加权、ip_hash 策略
  • 健康检查自动剔除挂掉的服务
  • 注意 Session 共享

做大并发网站,负载均衡是必备的。


emer 发布于  2026-10-8 07:25 

Nginx 反向代理配置

Nginx 反向代理配置

反向代理是 Nginx 最常用的功能,前端请求 Nginx,Nginx 再转发给后端服务。

1. 什么是反向代理

  • 正向代理: 代理客户端,比如翻墙
  • 反向代理: 代理服务器,客户端不知道真正的后端

2. 基础配置

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

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

意思是:访问 80 端口的请求,转发到 8080 端口的服务。

3. 常用配置说明

location / {
    # 转发地址
    proxy_pass http://127.0.0.1:8080;

    # 传递真实IP
    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_connect_timeout 5s;
    proxy_read_timeout 60s;
    proxy_send_timeout 60s;
}

4. 按路径转发不同服务

# 访问 /api/ 转发到后端API服务
location /api/ {
    proxy_pass http://127.0.0.1:8080;
}

# 访问 /admin/ 转发到后台管理服务
location /admin/ {
    proxy_pass http://127.0.0.1:8081;
}

# 其他访问静态文件
location / {
    root /www/wwwroot/html;
}

5. 常见应用场景

1)前后端分离:

  • 前端静态文件 Nginx 直接处理
  • API 请求转发到后端服务

2)Node.js/Python 后端:

  • Nginx 处理 80/443 端口
  • 转发到 Node.js 的 3000 端口

3)负载均衡:

  • 配合 upstream 转发到多台服务器

6. 常见问题

1)后端获取不到真实 IP:

  • 要配置 X-Real-IP 和 X-Forwarded-For
  • 后端从请求头里取

2)WebSocket 不支持:

  • 需要加特殊头
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

3)上传文件大小限制:

client_max_body_size 100m;

总结

Nginx 反向代理核心:

  • proxy_pass 转发地址
  • proxy_set_header 传递真实信息
  • 按 location 转发不同服务
  • 注意超时和文件大小限制

做 Web 开发,Nginx 反向代理一定要会配置。


emer 发布于  2026-10-8 07:10 

Nginx日志切割,按天切割nginx日志

前言

Nginx 的访问日志一直写在一个文件里,越写越大,几百GB都有可能。磁盘满了网站就挂了。本文讲一下怎么用 logrotate 自动按天切割 Nginx 日志。

为什么要切割日志

  • 日志太大占磁盘
  • 分析大文件慢
  • 出问题查日志不方便

方法一:用系统自带的 logrotate

CentOS 自带 logrotate,直接配就行。

第一步:写配置文件

vi /etc/logrotate.d/nginx

内容:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
    create 0644 www www
    postrotate
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

参数说明:

参数 说明
daily 按天切割
rotate 30 保留30天的日志
compress 压缩旧日志
notifempty 空文件不切割
missingok 日志文件不存在不报错

第二步:测试一下

logrotate -d /etc/logrotate.d/nginx

-d 是调试模式,不会真执行,看一下有没有报错。

第三步:立即执行一次

logrotate -f /etc/logrotate.d/nginx

方法二:自己写脚本

不想用 logrotate,自己写个 shell 脚本:

vi /root/nginx_log.sh

内容:

#!/bin/bash

LOG_PATH=/var/log/nginx
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

cd $LOG_PATH

mv access.log access_$YESTERDAY.log
mv error.log error_$YESTERDAY.log

nginx -s reopen

加执行权限:

chmod +x /root/nginx_log.sh

加到 crontab,每天凌晨执行:

crontab -e

加一行:

0 0 * * * /root/nginx_log.sh

常见坑

坑1:切割后日志不写了

把日志文件改名了,Nginx 还往旧文件写。

原因: Nginx 打开的是文件句柄,改名后它不知道。

解决: 切割后要通知 Nginx 重新打开日志文件:

nginx -s reopen

坑2:旧日志没删,磁盘还是满的

配了切割,但旧日志还留着。

原因: 没配 rotate 参数。

解决: 加上 rotate 30,自动只保留30天。

坑3:压缩太占CPU

所有日志都压缩,CPU 飙高。

解决: 错峰压缩,比如凌晨3点再压缩,或者用 delaycompress 延迟一天再压缩。

坑4:日志权限不对

切割后新日志文件属主不对,Nginx 写不了。

解决: logrotate 配置里加 create 0644 www www。

总结

推荐用 logrotate,系统自带,不用自己维护脚本。

核心配置就这些:

/var/log/nginx/*.log {
    daily
    rotate 30
    compress
    postrotate
        /bin/kill -USR1 `cat /run/nginx.pid`
    endscript
}

记住: 切割完一定要通知 Nginx 重新打开日志文件,不然新日志不写。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:49 

Nginx防盗链配置,防止图片被别人盗用

前言

网站的图片被别人盗链了,他的网站直接用你的图片地址,流量全从你服务器走,白白消耗带宽。Nginx 可以配置防盗链,防止这种情况。

什么是盗链

就是别人在自己网站里直接引用你服务器上的图片。用户看他的网站,实际图片是从你服务器加载的。

防盗链原理

Nginx 检查请求头里的 Referer 字段,看是从哪个页面过来的。如果不是自己网站的 Referer,就拒绝或者返回一张提示图。

基础配置

location ~* \.(jpg|png|gif|jpeg)$ {
    valid_referers none blocked www.example.com example.com;
    if ($invalid_referer) {
        return 403;
    }
}

解释:

  • valid_referers:允许哪些来源访问
  • none:允许直接输入地址访问
  • blocked:允许伪装的 Referer
  • www.example.com:自己的域名

配置示例

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

    root  /var/www/html;
    index index.html;

    # 防盗链
    location ~* \.(jpg|png|gif|jpeg|webp)$ {
        valid_referers none blocked www.example.com example.com *.example.com;
        if ($invalid_referer) {
            return 403;
        }
    }
}

替换成提示图

不想直接 403,可以返回一张"禁止盗链"的提示图:

location ~* \.(jpg|png|gif|jpeg)$ {
    valid_referers none blocked www.example.com example.com;
    if ($invalid_referer) {
        rewrite ^/.*\.(jpg|png|gif)$ /no-hotlink.png last;
    }
}

这样别人盗链就显示一张提示图。

常见坑

坑1:自己网站图片也加载不出来

配了防盗链,自己网站的图片也打不开了。

原因: valid_referers 里没写全自己的域名。

解决: 把 http 和 https 的域名都写上:

valid_referers none blocked www.example.com example.com;

坑2:搜索引擎图片也被挡了

百度图片搜不到你的图片了。

原因: 防盗链把搜索引擎也挡了。

解决: 加上搜索引擎的 Referer:

valid_referers none blocked www.example.com example.com *.baidu.com *.google.com;

坑3:CDN 后面防盗链不生效

用了 CDN,防盗链配置不生效。

原因: 请求经过 CDN,Referer 是 CDN 的。

解决: CDN 那边配置防盗链,或者把 CDN 的 Referer 加到白名单。

坑4:微信里打开图片不显示

在微信里打开自己的文章,图片显示不出来。

原因: 微信的 Referer 被挡了。

解决: 加上微信的 Referer:

valid_referers none blocked www.example.com example.com *.weixin.qq.com;

总结

防盗链就三行配置:

valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
    return 403;
}

记住: 配完防盗链,先测试一下自己网站图片能不能正常打开。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:47 

Nginx安装后找不到配置文件,编译安装路径

前言

编译安装 Nginx 后,想用 nginx 命令提示 command not found,找配置文件也找不到。这是因为编译安装的 Nginx 不在系统默认 PATH 里,路径和包管理器安装的不一样。

编译安装的默认路径

一般编译安装 Nginx,默认装在:

/usr/local/nginx/

目录结构:

/usr/local/nginx/
├── sbin/
│   └── nginx          # 主程序
├── conf/
│   ├── nginx.conf     # 主配置文件
│   ├── mime.types
│   └── fastcgi_params
├── html/              # 默认网站目录
└── logs/
    ├── access.log
    └── error.log

怎么确认安装路径

方法一:nginx -V

/usr/local/nginx/sbin/nginx -V

输出里 --prefix= 后面就是安装路径。

方法二:ps 命令看进程

ps aux | grep nginx

进程路径就是 Nginx 在哪。

把 nginx 加到 PATH

不想每次都输完整路径,加个软链接:

ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

之后直接用 nginx 命令就行。

配置文件在哪

编译安装的配置文件在:

/usr/local/nginx/conf/nginx.conf

编辑:

vi /usr/local/nginx/conf/nginx.conf

常用命令

# 启动
/usr/local/nginx/sbin/nginx

# 重载
/usr/local/nginx/sbin/nginx -s reload

# 停止
/usr/local/nginx/sbin/nginx -s stop

# 检查配置
/usr/local/nginx/sbin/nginx -t

开机自启

编译安装的 Nginx 没有 systemd 服务,需要自己写:

vi /etc/systemd/system/nginx.service

内容:

[Unit]
Description=Nginx Web Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

然后:

systemctl daemon-reload
systemctl enable nginx
systemctl start nginx

常见坑

坑1:nginx: command not found

执行 nginx 提示找不到命令。

原因: 编译安装的不在 PATH 里。

解决: 加软链接,或者用完整路径。

坑2:改了配置不生效

改了 /etc/nginx/nginx.conf,但重载后还是老配置。

原因: 你改的是包管理器安装的配置文件,实际跑的是编译安装的。

解决: 用 nginx -t 确认一下实际加载的是哪个配置文件。

坑3:多个 nginx 共存

系统里同时有 yum 安装的和编译安装的 Nginx,不知道哪个在跑。

解决: 先停掉一个,再看进程。

坑4:日志找不到

日志不在 /var/log/nginx/。

原因: 编译安装的日志在自己的目录里。

解决: 看 nginx.conf 里的 error_log 和 access_log 配置。

总结

编译安装 Nginx 记住三个路径:

内容 路径
主程序 /usr/local/nginx/sbin/nginx
配置文件 /usr/local/nginx/conf/nginx.conf
日志 /usr/local/nginx/logs/

记住: 编译安装的和 yum 安装的路径不一样,别搞混了。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:46 

Nginx负载均衡配置,upstream多台服务器

前言

网站访问量上来了,一台服务器扛不住,想用多台服务器一起跑。Nginx 的负载均衡功能就是干这个的:前面一台 Nginx 当入口,后面多台服务器一起干活。

什么是负载均衡

用户请求 → Nginx(负载均衡)→ 服务器A
                          → 服务器B
                          → 服务器C

Nginx 把请求按规则分发到不同的后端服务器,分担压力。

基础配置

第一步:定义 upstream

在 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;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

负载均衡策略

轮询(默认)

默认就是轮询,一个一个轮流来。

upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
}

加权轮询

服务器性能不一样,性能好的多分点请求:

upstream backend {
    server 192.168.1.101 weight=3;
    server 192.168.1.102 weight=1;
}

意思是:每4个请求,3个给101,1个给102。

ip_hash

同一个用户的请求永远打到同一台服务器(解决 session 问题):

upstream backend {
    ip_hash;
    server 192.168.1.101;
    server 192.168.1.102;
}

健康检查

某台服务器挂了,Nginx 自动把它踢出去:

upstream backend {
    server 192.168.1.101 max_fails=3 fail_timeout=30s;
    server 192.168.1.102 max_fails=3 fail_timeout=30s;
}

意思是:3次失败就暂停30秒不发请求给它。

完整配置示例

http {
    upstream backend {
        server 192.168.1.101 weight=3 max_fails=3 fail_timeout=30s;
        server 192.168.1.102 weight=1 max_fails=3 fail_timeout=30s;
    }

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

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

常见坑

坑1:session 不一致

用户登录了,刷新一下又掉登录。

原因: 轮询把请求分到不同服务器,session 没共享。

解决: 用 ip_hash,或者用 Redis 统一存 session。

坑2:后端服务器改了但 Nginx 没生效

加了一台新服务器,配置也写了,但没重载。

解决: nginx -s reload。

坑3:后端服务端口不对

后端跑在 8080 端口,upstream 里写的 80。

解决: upstream 里写对端口。

坑4:后端获取不到真实 IP

后端日志里记的都是 Nginx 的 IP。

解决: 加 X-Forwarded-For 头:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

总结

负载均衡就两步:

  1. upstream 定义后端服务器列表
  2. proxy_pass 转发到 upstream

记住: 多台服务器用负载均衡,记得处理 session 共享问题。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:43 

Nginx查看配置文件位置,nginx.conf在哪

前言

刚装完 Nginx,想改个配置,发现不知道 nginx.conf 在哪。不同安装方式,配置文件位置不一样。本文讲一下怎么找 Nginx 配置文件。

方法一:nginx -t 命令

最直接的方法:

nginx -t

输出会显示配置文件路径:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

第一行就是配置文件位置。

方法二:ps 命令看进程

看 Nginx 进程启动时用的哪个配置:

ps aux | grep nginx

或者:

ps -ef | grep nginx

输出里 master 进程后面的 -c 参数就是配置文件路径。

方法三:nginx -V 看编译参数

nginx -V

输出里 --conf-path= 后面就是默认配置文件路径。

常见安装方式的默认路径

yum/apt 安装(包管理器)

/etc/nginx/nginx.conf

子配置一般在:

/etc/nginx/conf.d/
/etc/nginx/sites-available/

编译安装

默认在:

/usr/local/nginx/conf/nginx.conf

或者:

/usr/local/nginx/conf/

Docker 安装

容器里的路径是:

/etc/nginx/nginx.conf

如果挂载了宿主机目录,就在宿主机对应目录里。

常用配置文件结构

/etc/nginx/
├── nginx.conf          # 主配置文件
├── conf.d/             # 子配置目录
│   ├── aaa.conf
│   └── bbb.conf
├── fastcgi_params      # FastCGI 参数
├── mime.types          # MIME 类型
└── nginx.conf.default  # 默认配置模板

怎么查看完整配置

看主配置

vi /etc/nginx/nginx.conf

看所有加载的配置

nginx -T

-T 会打印所有配置文件的内容,包括 include 进来的子配置。

常见坑

坑1:改了配置不生效

改了 nginx.conf,但重载后还是老配置。

原因: 你改的不是 Nginx 实际加载的配置文件。

解决: 用 nginx -t 确认一下到底加载的是哪个配置文件。

坑2:找不到 nginx.conf

执行 find / -name nginx.conf 找不到。

原因: 可能是编译安装的,不在标准路径。

解决: 用 nginx -V 看 --conf-path= 参数。

坑3:conf.d 里的配置没生效

在 conf.d 里加了 .conf 文件,但没生效。

原因1: 后缀不是 .conf

原因2: 主配置里没 include conf.d/*.conf

解决: 确认 nginx.conf 里有这一行:

include /etc/nginx/conf.d/*.conf;

总结

方法 命令
最推荐 nginx -t
看进程参数 ps aux \| grep nginx
看编译参数 nginx -V
看全部配置 nginx -T

记住: 找不到配置文件先跑 nginx -t,一目了然。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:34 

Nginx配置多站点,一个服务器跑多个网站

前言

买了一台服务器,想跑好几个网站,不用买好几台服务器。Nginx 的虚拟主机(vhost)功能就是干这个的。本文讲一下怎么用 Nginx 配置多站点。

原理

Nginx 通过 server_name 来区分不同的网站。同一个 IP 同一个端口,根据访问的域名不同,返回不同的网站内容。

用户访问 www.aaa.com  →  网站A的目录
用户访问 www.bbb.com  →  网站B的目录

基础配置方法

第一步:准备网站目录

mkdir -p /var/www/aaa
mkdir -p /var/www/bbb

放两个测试首页:

echo "网站A" > /var/www/aaa/index.html
echo "网站B" > /var/www/bbb/index.html

第二步:创建 Nginx 配置

在 /etc/nginx/conf.d/ 目录下,每个网站一个配置文件。

网站A配置:

vi /etc/nginx/conf.d/aaa.conf

内容:

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

    root  /var/www/aaa;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

网站B配置:

vi /etc/nginx/conf.d/bbb.conf

内容:

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

    root  /var/www/bbb;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

第三步:检查配置并重载

nginx -t
nginx -s reload

第四步:解析域名

把 www.aaa.com 和 www.bbb.com 都解析到这台服务器的 IP 上。

这样两个网站就都能访问了。

带 PHP 的多站点

如果每个网站都要跑 PHP,每个站点的配置里加上 PHP 转发:

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

    root  /var/www/aaa;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

带 HTTPS 的多站点

每个站点单独配证书:

server {
    listen       443 ssl http2;
    server_name  www.aaa.com;

    ssl_certificate      /etc/nginx/ssl/aaa.crt;
    ssl_certificate_key  /etc/nginx/ssl/aaa.key;

    root  /var/www/aaa;
    index index.php index.html;
}

每个网站用自己的证书,互不影响。

目录结构建议

/etc/nginx/
├── nginx.conf
├── conf.d/
│   ├── aaa.conf      # 网站A配置
│   ├── bbb.conf      # 网站B配置
│   └── ccc.conf      # 网站C配置

每个网站一个配置文件,方便管理。

常见坑

坑1:所有网站都显示同一个内容

访问不同域名,显示的都是同一个网站的内容。

原因: Nginx 默认 server 的问题。

解决: 把第一个 server 块设为默认:

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

其他网站用各自的 server_name。

坑2:新加的站点不生效

加了新的配置文件,但网站还是访问不了。

原因1: 配置文件后缀不对。Nginx 默认只加载 .conf 后缀的文件。

原因2: 没重载 Nginx。

解决:

nginx -t
nginx -s reload

坑3:PHP 解析不对

网站A的 PHP 请求跑到网站B去了。

原因: root 路径不对,或者 PHP 配置里的 root 写死了。

解决: 每个站点的 PHP location 里都写清楚自己的 root:

location ~ \.php$ {
    root  /var/www/aaa;
    ...
}

坑4:文件权限不对

网站B的文件 Nginx 读不了。

解决: 确保所有网站文件的属主都是 www:

chown -R www:www /var/www/

总结

步骤 操作
建目录 mkdir /var/www/网站名
写配置 每个网站一个 .conf 文件
server_name 写域名
root 写网站目录
重载 nginx -s reload
解析域名 域名解析到服务器IP

记住: 一个网站一个配置文件,别全写在 nginx.conf 里,不好管理。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:31 

Nginx 负载均衡配置

Nginx 负载均衡配置

网站流量大了,单台服务器扛不住,就需要负载均衡。这篇讲 Nginx 怎么配负载均衡。

1. 什么是负载均衡

简单说就是把请求分发到多台服务器上,分担压力,提高网站可用性。

2. 基础配置

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;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

3. 负载均衡策略

轮询(默认):
按顺序逐个分发,每台服务器轮流来。

加权轮询:
服务器性能不一样,给好的服务器多分点流量。

upstream backend {
    server 192.168.1.101 weight=3;
    server 192.168.1.102 weight=2;
    server 192.168.1.103 weight=1;
}

ip_hash(会话保持):
同一个 IP 的请求永远分发到同一台服务器,保持登录状态。

upstream backend {
    ip_hash;
    server 192.168.1.101;
    server 192.168.1.102;
}

4. 健康检查

服务器挂了自动跳过,不把请求发过去。

upstream backend {
    server 192.168.1.101 max_fails=3 fail_timeout=30s;
    server 192.168.1.102 max_fails=3 fail_timeout=30s;
}
  • max_fails:失败几次标记为下线
  • fail_timeout:多久后重新检查

5. 常用配置说明

location / {
    proxy_pass http://backend;

    # 传递真实IP
    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_connect_timeout 5s;
    proxy_read_timeout 60s;
}

6. 常见问题

1)Session 丢失:

  • 多台服务器 Session 不共享
  • 解决方案:Session 存 Redis,或者用 ip_hash

2)静态文件 404:

  • 每台服务器都要有静态文件
  • 或者用共享存储

3)服务器性能不均:

  • 用 weighted 加权轮询

总结

Nginx 负载均衡要点:

  • upstream 定义后端服务器组
  • 轮询、加权、ip_hash 三种策略
  • 配置健康检查自动下线故障服务器
  • Session 要共享或用 ip_hash

做网站架构,负载均衡是必备技能。


emer 发布于  2026-10-7 07:20 

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、最少连接
  • 健康检查自动摘除故障节点
  • 生产环境用权重 + 健康检查就够了

搞懂这些,多台服务器集群就跑起来了。


emer 发布于  2026-10-4 10:51 

Nginx 反向代理配置

Nginx 反向代理配置详解

Nginx 反向代理是最常用的服务器配置之一,把请求转发给后端服务。本文讲清楚核心配置。

1. 基本配置

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;
    }
}

2. 传递真实IP

后端服务要拿到用户真实IP,需要配置:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

3. 负载均衡

多台后端服务器,用 upstream 做负载均衡:

upstream backend {
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=2;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

4. 超时设置

proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;

5. 静态文件处理

静态文件直接由 Nginx 处理,不用转发给后端:

location ~* \.(js|css|png|jpg|gif)$ {
    root /data/www;
    expires 30d;
}

6. HTTPS 反向代理

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

总结

Nginx 反向代理的核心就是 proxy_pass,配上 proxy_set_header 传递必要信息,再加上超时和静态文件处理,基本够用了。


emer 发布于  2026-10-4 10:42 
'); })();