我正在设置一个NGINX服务器,需要将其配置为只允许某些I访问react应用程序的根目录,但允许所有I访问某个子文件夹(react路由)。基本上,我需要允许到/sub/的所有流量,但只允许到主目录/的一小部分I。我试过了
location /sub/* { allow all;}
location / {
allow x.x.x.x;
deny all;}但在使用除‘x.x’之外的任何其他IP地址时,收到403错误。实现这一目标的正确方法是什么?
谢谢。
发布于 2020-11-04 00:54:45
以下是您可以尝试执行的操作:
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的值:
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,则此解决方案将不起作用。
https://stackoverflow.com/questions/64653603
复制相似问题