Nginx对我来说表现得出乎意料。以下是两个简化的位置块。
这按预期工作。返回 403 错误:
location / {
deny all;
root /var/www/test;
}
我预计会出现 403 错误。但是,这将返回 301 并重定向:
location / {
deny all;
return 301 https://$server_name$request_uri;
}
如何使用return
指令拒绝和阻止任何 url 重定向?
在nginx中,return
指令来自重写模块,deny
指令来自访问模块。根据nginx文档和源代码,重写模块在NGX_HTTP_REWRITE_PHASE
阶段处理(用于位置上下文中的return
(,访问模块在NGX_HTTP_ACCESS_PHASE
阶段处理,重写阶段发生在访问阶段之前,因此return
停止请求处理并在重写阶段返回301。
根据Nginx文档,
ngx_http_access_module模块允许限制对某些客户端地址的访问。
您不能限制对另一个模块的访问 [此处为重定向模块]。
要拒绝/阻止重定向,只需通过附加#
来注释它
location / {
deny all;
# return 301 https://$server_name$request_uri;
}