首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx有条件地允许所有基于IP的反应子路由

问Nginx有条件地允许所有基于IP的反应子路由
EN

Stack Overflow用户
提问于 2020-11-03 05:29:08
回答 1查看 271关注 0票数 0

我正在设置一个NGINX服务器,需要将其配置为只允许某些I访问react应用程序的根目录,但允许所有I访问某个子文件夹(react路由)。基本上,我需要允许到/sub/的所有流量,但只允许到主目录/的一小部分I。我试过了

代码语言:javascript
复制
    location /sub/* { allow all;}
        
location / {
    allow x.x.x.x;
    deny all;}

但在使用除‘x.x’之外的任何其他IP地址时,收到403错误。实现这一目标的正确方法是什么?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 00:54:45

以下是您可以尝试执行的操作:

代码语言:javascript
复制
map $uri $disallow_by_route {
    ~^/subroute/    ""; # allow /subroute/... for all
    default         1;
}

map $remote_addr $disallow {
    x.x.x.x         ""; # some allowed IP
    y.y.y.y         ""; # another allowed IP
    default         $disallow_by_route;
}

server {
    ...
    location / {
        if ($disallow) { return 403; }
        ...
    }
}

但是,如果您允许的页面使用了一些资源(js、css、图像等)。从/subroute/...以外的其他路径,此配置不允许它们加载到受限制的IP上。您可以尝试允许他们使用更复杂的Referer区块链检查header的值:

代码语言:javascript
复制
map $http_referer $disallow_by_referer {
    # use a regex for your actual domain here
    ~^https?://example\.com/subroute/   "";
    default                             1;
}

map $uri $disallow_by_route {
    ~^/subroute/    "";
    # list all the other possible assets extensions (png, gif, svg, webp etc.) here
    ~\.(?:js|css)$  $disallow_by_referer;
    default         1;
}

map $remote_addr $disallow {
    x.x.x.x         ""; # some allowed IP
    y.y.y.y         ""; # another allowed IP
    default         $disallow_by_route;
}

server {
    ...
    location / {
        if ($disallow) { return 403; }
        ...
    }
}

请注意,如果您的服务器配置(或react应用程序本身)将referer策略设置为no-referer,则此解决方案将不起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64653603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档