我希望将所有不是由我的 IP 地址发出的 nginx 请求重定向到 /some-page
。我目前正在使用这个 nginx 配置:
if ($remote_addr != 127.0.0.1) {
rewrite ^ http://www.example.com/some-page;
}
这对我有用,因为我没有被重定向,但其他人都陷入了重定向循环,因为该 block 不检查请求是否针对 /some-page
。
我该如何解决这个问题?我不确定如何检查请求路径。
最佳答案
例如,如果此 if
是在 location/
中创建的,则以这种方式创建一个单独的 location/some-page
当URI为
不会被执行
/some-page
时,if
编辑:好的,让我解释一下我的理解,你告诉我我是对还是错,
- 好的 IP(您的):按原样提供页面
- 错误的 IP(不是你的):重定向到
/some-page
问题是,当 Bad IP 被重定向到 /some-page
时,它仍然会再次重定向到 /some-page
因为它仍然是 Bad IP,所以它通过了if
测试
我的解决方案:从 /
block 中删除 /some-page
位置:
location / {
# bla bla
if ($remote_addr != 127.0.0.1) {
rewrite ^ http://www.example.com/some-page;
}
# rest of bla bla
}
location /some-page {
try_files index.html index.php; # or whatever
}
当 Bad IP 被转发到 /some-page
时,它不再执行 if
条件,从而结束无限重定向循环。
第二次编辑:您可以在 nginx 中自行设置权限,让我演示一下:
location / {
error_page 403 = @badip
allow 127.0.0.1;
deny all;
#rest of bla bla
}
location @badip {
return 301 $scheme://example.com/some-page;
}
关于http - 使用 nginx 重定向所有不是来 self 的 IP 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17993011/