首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx如何只允许访问/api/ endpoints?

Nginx如何只允许访问/api/ endpoints?
EN

Stack Overflow用户
提问于 2019-10-17 14:46:37
回答 1查看 377关注 0票数 1

我的应用编程接口位于api.example.com/api --我怎么能否认其他一切呢?因此用户不能访问,例如,api.example.com/api.example.com/login

不幸的是,这也拒绝了所有的API流量

代码语言:javascript
复制
location ~ /(?!api).* {
    deny all;
}

我目前在nginx config file中的所有位置设置

代码语言:javascript
复制
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /(?!api).* {
        deny all;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-17 19:03:00

正则表达式不起作用的原因是它匹配URI中不跟api的任何/。所以/api/api/api不会被拒绝,但/foo/api/foo会被拒绝。

通过在正则表达式的开头添加一个锚点(^)可以很容易地解决这个问题:

代码语言:javascript
复制
location ~ ^/(?!api).* { ... }

另一种方法是使用前缀位置:

代码语言:javascript
复制
location / {
    deny all;
}

location /api {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
    internal;

    ...
}

internal指令阻止直接访问以.php结尾的URI。详情请参见this document

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

https://stackoverflow.com/questions/58426445

复制
相关文章

相似问题

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