
任何將 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;
}
}