在日常的网站运维中,确保你的网站始终在线是非常重要的。如果你使用的是 Nginx 作为 Web 服务器,那么你可以利用它内置的功能来实现简单的域名监控。本文将从零开始,教小白用户如何配置 Nginx 来监控你的网站是否正常运行。
什么是 Nginx 域名监控?
Nginx 域名监控并不是指 Nginx 自带完整的监控系统,而是通过配置 Nginx 的健康检查、日志分析或结合外部脚本,来判断某个域名或服务是否可访问。这种做法常用于负载均衡、高可用架构中,也可以用于简单的站点可用性检测。
准备工作
在开始之前,请确保你已经:
- 安装了 Nginx(推荐版本 1.18 或以上)
- 拥有服务器 root 或 sudo 权限
- 知道你要监控的域名(例如:example.com)
方法一:使用 Nginx 内置的 stub_status 模块
虽然 stub_status 模块不能直接监控外部域名,但它可以让你了解 Nginx 自身的状态,是监控体系的第一步。
编辑 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default),添加以下内容:
server { listen 80; server_name localhost; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; # 只允许本地访问 deny all; # 拒绝其他所有 IP }} 保存后,重载 Nginx 配置:
sudo nginx -t && sudo nginx -s reload 然后在服务器上执行:
curl http://localhost/nginx_status 如果看到类似以下输出,说明配置成功:
Active connections: 2 server accepts handled requests 10 10 20 Reading: 0 Writing: 1 Waiting: 1 方法二:使用 upstream + health_check(需 Nginx Plus 或第三方模块)
开源版 Nginx 不支持主动健康检查,但你可以通过 被动健康检查 实现基本监控。例如,当后端服务返回错误时,Nginx 会自动将其标记为不可用。
upstream backend { server 192.168.1.10:80 max_fails=3 fail_timeout=30s; server 192.168.1.11:80 max_fails=3 fail_timeout=30s;}server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; }} 这里 max_fails=3 表示连续 3 次请求失败后,该服务器将在 30 秒内被标记为不可用(由 fail_timeout 控制)。这是一种简单的网站状态监控机制。
方法三:结合 Shell 脚本 + 定时任务(推荐给小白)
对于普通用户,最实用的方法是写一个简单的 Shell 脚本,定期检查你的域名是否能返回 200 状态码。
创建脚本 /home/monitor/check_domain.sh:
#!/bin/bashDOMAIN="https://example.com"STATUS=$(curl -o /dev/null -s -w "%{http_code}" "$DOMAIN")if [ "$STATUS" -eq 200 ]; then echo "[$(date)] $DOMAIN is UP" >> /var/log/domain_monitor.logelse echo "[$(date)] $DOMAIN is DOWN! HTTP Status: $STATUS" >> /var/log/domain_monitor.log # 这里可以加入邮件告警、微信通知等fi 赋予执行权限并设置定时任务:
chmod +x /home/monitor/check_domain.sh# 编辑 crontabcrontab -e# 添加一行(每5分钟检查一次)*/5 * * * * /home/monitor/check_domain.sh 这样你就实现了基于 Nginx 服务的服务器运维自动化监控!
总结
虽然 Nginx 本身不是专业的监控工具,但通过合理配置和脚本辅助,完全可以构建一个轻量级的Nginx域名监控系统。无论是使用内置模块、负载均衡策略,还是外部脚本,都能有效提升你的网站可靠性。
希望这篇Nginx配置教程能帮助你迈出网站监控的第一步!
