如何配置Nginx根据用户页面访问次数返回不同页面内容
Nginx按用户访问次数返回差异化页面配置方案
核心实现逻辑无需依赖额外后端服务,基于Nginx原生的Cookie读取、重写规则即可完成,针对site.com/page路径的访问规则为:首次访问返回page1.html,第二次及后续访问返回page2.html。
完整配置示例
调整对应站点的server块配置,注意替换静态文件路径为你实际的部署路径:
server { listen 80; server_name site.com; # 替换为你本地存放page1.html、page2.html的实际根目录 root /your/static/file/path; # 读取客户端存储的访问次数Cookie,非法值/不存在时默认计数为0 map $cookie_page_visit_cnt $page_visit_count { default 0; ~^\d+$ $cookie_page_visit_cnt; } # 精准匹配/page路径 location = /page { # 首次访问分支:计数为0,返回page1,同时更新Cookie计数为1 if ($page_visit_count = 0) { # Cookie有效期默认设为1天,可按需调整Max-Age值(单位秒) add_header Set-Cookie "page_visit_cnt=1;Path=/page;Max-Age=86400;SameSite=Lax"; rewrite ^ /page1.html break; } # 第二次及后续访问分支:计数大于等于1,返回page2 if ($page_visit_count >= 1) { rewrite ^ /page2.html break; } } # 静态html文件访问规则 location ~ \.html$ { try_files $uri =404; } }
配置说明&注意事项
- 该方案为轻量实现,基于客户端Cookie做访问计数,若用户清空浏览器Cookie、使用隐身模式/更换设备访问,会被重新识别为首次访问,适合对计数精度要求不高的展示场景
- 若需要更高精度的计数(比如跨设备识别、防用户清Cookie作弊),需要搭配后端存储用户访问日志,通过Nginx的
auth_request模块对接后端接口获取用户真实访问次数后再做页面跳转,部署复杂度会明显提升 - 若重载配置时提示
map directive is not allowed here错误,把map $cookie_page_visit_cnt $page_visit_count{...}这段配置移动到对应server块外层的http块中即可 - 配置修改完成后,先执行
nginx -t校验配置语法是否正确,确认无报错后执行nginx -s reload重载配置即可生效 - 如果需要扩展更多访问次数对应的展示页面,直接在location块里新增
$page_visit_count的判断分支即可,比如第三次访问展示page3.html,新增对应if判断规则即可
内容的提问来源于stack exchange,提问作者Nme
相关产品推荐
相关产品推荐

