任何人只要将 NGINX 服务器放在线上,并在access.log
一周后查看它,就会发现有大量的 URL 漏洞被尝试利用。每天,任何时候。
那么如果我要拒绝所有 URL 参数会怎么样呢?如果每个查询字符串都用 NGINX 屏蔽,rewrite
而 NGINX 无法匹配任何未定义为rewrite
自然返回 404 Not Found 的内容会怎么样?
或者按顺序将一系列重写放置在这个始终存在的位置块内?
location / {
rewrite "^/api/v1/users/?$" /api/v1/Users.php last;
rewrite "^/api/v1/users/(all|active|inactive)?$" /api/v1/Users.php?status=$1 last;
rewrite "^/api/v1/users/(\d+)/?$" /api/v1/Users.php?userId=$1 last;
}
# URL Match examples...
http://localhost/api/v1/users
http://localhost/api/v1/users/
http://localhost/api/v1/users/all
http://localhost/api/v1/users/active
http://localhost/api/v1/users/inactive
http://localhost/api/v1/users/2001
http://localhost/api/v1/users/2002
http://localhost/api/v1/users/2003
有没有办法让 NGINX 忽略 URL 参数?如果这个问题很幼稚,请随时告诉我。也许我问错了问题。
答案1
而是使用return
而不是rewrite
因为“重写指令只能返回代码 301 或 302”为此,创建一个location
带有正则表达式的来捕获特定的请求 uri。
如果你只是想放弃所有这些请求,请返回http 状态 444。
例子:
server {
# ...
location ~* ^/api/v1/users/.*$ {
return 444;
}
}