Nginx 限制特定客户端设备访问
1. 概述
本文介绍如何通过 Nginx 配置来限制特定移动设备(如苹果系列设备)访问服务器。这种限制在某些业务场景下可能会用到,比如:
- 针对特定设备做访问控制
- 区分移动端和PC端的访问策略
- 防止某些设备的恶意爬虫
2. 配置方法
2.1 基础配置
在 Nginx 的 server 块中的 location 部分添加以下配置:
# 限制 iPhone 和 iPad 设备访问
if ($http_user_agent ~* (iPhone|iPad)) {
return 403;
}
2.2 完整示例
server {
listen 80;
server_name example.com;
location / {
# 设备限制
if ($http_user_agent ~* (iPhone|iPad)) {
return 403;
}
# 其他配置
root /usr/share/nginx/html;
index index.html;
}
}
3. 配置说明
$http_user_agent: Nginx 内置变量,用于获取客户端 User-Agent 信息~*: 不区分大小写的正则表达式匹配(iPhone|iPad): 匹配包含 iPhone 或 iPad 的 User-Agent 字符串return 403: 返回 HTTP 403 禁止访问状态码
4. 注意事项
- 存在的局限性:
- User-Agent 可被伪装,无法100%保证限制效果
- 可能会影响搜索引擎爬虫的正常抓取
- 建议改进:
- 建议配合其他验证方式(如 IP、Cookie 等)一起使用
- 可以返回自定义错误页面而不是直接返回 403
- 考虑添加白名单机制
5. 扩展配置
如需返回自定义错误页面,可以这样配置:
server {
# ... 其他配置 ...
location / {
if ($http_user_agent ~* (iPhone|iPad)) {
return 403 "Sorry, this service is not available on iOS devices.";
# 或者重定向到错误页面
# rewrite ^ /error.html break;
}
}
}
6. 测试验证
- 使用 curl 模拟 iOS 设备访问:
curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X)" http://example.com
- 查看 Nginx 访问日志:
tail -f /var/log/nginx/access.log