Nginx 限制访问时间段配置
Nginx 限制访问时间段配置指南
在本指南中,我们将介绍如何在 CentOS 7 环境下使用 Nginx 配置访问限制,以返回特定时间段内的错误页面。我们将详细说明如何实现以下功能:
- 限制特定时间段(22:00-24:00 和 00:00-08:00)的访问,返回 HTTP 403 状态码。
- 在特定时间点(如 00:00、01:00、05:00 和 14:00)返回维护页面。
1. 限制时间段返回 403
以下是 Nginx 配置示例,用于限制访问在 22:00-24:00 和 00:00-08:00 的时间段,返回 403 状态码:
server {
listen 80;
server_name localhost;
# 获取本地时间
if ($time_local ~ "^(\d+)\/(\w+)\/(\d+):(\d+):(\d+):(\d+) \+(\d+)") {
set $hour $4; # 提取小时部分
}
# 指定时间黑名单,22:00-24:00 和 00:00-08:00,返回403
if ($hour ~ ^(2[2-3]|0[0-7])$) {
return 403; # 返回403状态码
}
# 其他配置
}
配置说明
- listen 80:Nginx 监听 80 端口,处理 HTTP 请求。
- server_name localhost:指定服务器名称。
- $time_local:获取本地时间。
- set $hour $4:提取小时部分并存储在
$hour变量中。 - if ($hour ~ ^(2[2-3]|0[0-7])$):匹配 22:00-24:00 和 00:00-08:00 的小时,返回 403 状态码。
2. 限制特定时间点返回维护页面
以下是 Nginx 配置示例,用于限制在特定时间点(如 00:00、01:00、05:00 和 14:00)返回维护页面:
server {
listen 80;
server_name localhost;
# 获取本地时间
if ($time_local ~ "^(\d+)\/(\w+)\/(\d+):(\d+):(\d+):(\d+) \+(\d+)") {
set $hour $4; # 提取小时部分
}
# 指定时间点返回维护页面
if ($hour ~ 00|01|05|14) {
rewrite ^(.*)$ /maintenance.html break; # 重写请求到维护页面
}
location = /maintenance.html {
root /usr/share/nginx/html; # 自定义维护页面存放路径
internal; # 仅允许内部重定向访问
}
# 其他配置
}
配置说明
- rewrite ^(.*)$ /maintenance.html break:将匹配到的请求重写为
/maintenance.html,并停止处理后续规则。 - location = /maintenance.html:指定维护页面的配置。
- root /usr/share/nginx/html:设置维护页面的存放路径。
- internal:表示该页面只能通过内部重定向访问,外部请求无法直接访问。
3. 维护页面示例
以下是一个简单的维护页面示例 maintenance.html,您可以根据需要进行修改:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>网站维护中</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #000;
color: #fff;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.maintenance-container {
text-align: center;
}
.maintenance-message {
margin-bottom: 20px;
animation: fadeIn 1s ease;
}
.maintenance-message h1 {
font-size: 36px;
color: #fff;
margin-bottom: 10px;
}
.maintenance-message p {
font-size: 18px;
margin: 0;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
</head>
<body>
<div class="maintenance-container">
<div class="maintenance-message">
<h1>网站维护中</h1>
<p>对不起,网站正在进行维护,暂时无法访问。</p>
<p>请在 09:00 至 21:00 之间再尝试访问,谢谢您的理解与支持。</p>
</div>
</div>
</body>
</html>
4. 测试配置
完成配置后,请按照以下步骤进行测试:
-
重新加载 Nginx 配置:
sudo systemctl reload nginx -
访问网站:
在指定的时间段内访问您的网站,检查是否返回 403 状态码或维护页面。
-
查看日志:
检查 Nginx 的访问日志和错误日志,确认配置是否生效:
sudo tail -f /var/log/nginx/access.log sudo tail -f /var/log/nginx/error.log
完成
通过以上步骤,您已成功配置 Nginx 限制访问时间段和特定时间点的功能。这将帮助您在维护期间有效管理用户访问,提高网站的可用性和安全性。根据实际需求,您可以进一步调整时间段和时间点的设置。