当我将 a 放入上下文deny
中时http
,server -> location
上下文仍在执行其重定向。
给出这个非常基本的 nginx.conf:
events {
worker_connections 1024;
}
http {
deny 127.0.0.1;
server {
listen 80;
server_name _;
root /home/johndoe/html;
index index.html index.htm;
location /redirect {
return 301 /;
}
}
}
我的预期是来自 127.0.0.1 的所有连接都会被拒绝;当请求资源时,情况确实如此:
$ curl -I 127.0.0.1
HTTP/1.1 403 Forbidden
但如果调用重定向则不成立:
$ curl -I 127.0.0.1/redirect
HTTP/1.1 301 Moved Permanently
有人能解释一下为什么会发生这种情况吗?如何拒绝访问location
此示例中的上下文?
答案1
在这种情况下,会发生重定向,因为它正在将标头重写为 301。重写先于 nginx 流中的所有内容,因为它是要执行的第一个阶段。
在您的示例中,重定向仍会发生,但之后下一个连接将被拒绝。