http - 使用 nginx 重定向所有不是来 self 的 IP 的请求

标签 http redirect nginx

我希望将所有不是由我的 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不会被执行


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

  1. 好的 IP(您的):按原样提供页面
  2. 错误的 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/

相关文章:

ruby-on-rails - Rails redirect_to html 格式不起作用

apache - 是否可以重定向子域但不能重定向子域的子域?

django - 无法执行 gunicorn_start EACCES

php - Docker 中的 nginx 和 php-fpm

html - create-react-app 在服务器上部署时图标 png 文件加载失败

c# - 如何配置 C# Web 服务客户端以并行发送 HTTP 请求 header 和正文?

Apache 代理 : Proxy based on url

http - "+"在HTTP Accept header 中意味着什么?

java - 如何将 GZIP 内容编码应用于 HTTP 文件上传 multipart/form-data POST

.htaccess - htaccess重定向问题