使用 nginx 重定向所有不是来自我的 IP 的请求

use*_*016 5 redirect http nginx

我希望所有不是由我的 IP 地址发出的 nginx 请求都重定向到/some-page. 我目前正在使用这个 nginx 配置:

    if ($remote_addr != 127.0.0.1) {
        rewrite ^ http://www.example.com/some-page;
    }
Run Code Online (Sandbox Code Playgroud)

这对我有用,因为我没有被重定向,但其他任何人都被困在重定向循环中,因为该块不检查请求是否为/some-page.

我怎样才能解决这个问题?我不确定如何检查请求路径。

Moh*_*ady 8

如果这if是在location /例如内部创建的,则以location /some-page这种方式创建一个单独的,if当 URI 为/some-page


编辑:好的,让我解释一下我的理解,你告诉我我是对还是错,

  1. 良好的 IP(您的):按原样提供页面
  2. 坏 IP(不是你的):重定向到 /some-page

问题是,当 Bad IP 被重定向到/some-page它时,它仍然会/some-page再次重定向,因为它仍然是一个 Bad IP,所以它通过了if测试

我的解决方案/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
}
Run Code Online (Sandbox Code Playgroud)

当坏 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;
}
Run Code Online (Sandbox Code Playgroud)