如何使用 nginx 反向代理服务器限制对 RESTful API 的访问?

Posted

技术标签:

【中文标题】如何使用 nginx 反向代理服务器限制对 RESTful API 的访问?【英文标题】:How can I restrict access to an RESTful API with a nginx reverse proxy server? 【发布时间】:2019-08-19 23:01:08 【问题描述】:

我有一个将提供给客户端的网页,之后当他们按下该页面时,它会将请求发送到 nginx 反向代理,该代理会将其发送到正确的 RESTful API。 nginx 和 RESTful API 位于另一台服务器上。

如何使用ngnix限制到网页,让用户无法直接访问API。

我已经设置了 CORS,但有人告诉我可以绕过 CORS(例如 Postman)。

我尝试过使用(全部在 nginx 配置上):

if ($host != domain.of.webpage) 
    return 444;

另一种方法:

server 
    listen 443 default_server;
    listen [::]:443 default_server;
    server_name _;
    return 444;

还有一个:

satisfy any;

allow xx.xx.xx.xx/xx;
allow xxxx:xxxx:xxxx:xxxx:xxxx/xx;
deny all;

所有受限访问,但也包括对网页本身的访问。我知道最后一种方法不起作用,因为访问它的客户端不在主机上,所以 IP 地址没有实际意义。

还有什么我可以尝试的吗?

【问题讨论】:

听起来你在说你有一个暴露在公共互联网上的 API,被公共互联网上的一个网页使用,你想限制访问,使得 API 只能被脚本使用在那个网页上。那准确吗?如果是这样,那么您实际上无法以这种方式限制访问。最多,您可以依靠混淆技术使其变得更加困难。 @parzival 由于网页必须公开,因此无法将 API 设为私有。谢谢。 【参考方案1】:

parzival 在问题的 cmets 中给出了答案。我在下面转载了它。

听起来您是在说您在公共 Internet 上公开了一个 API,供公共 Internet 上的网页使用,并且您希望限制访问,以便该 API 只能由该网页上的脚本使用。那准确吗?如果是这样,那么您实际上无法以这种方式限制访问。最多,您可以依靠混淆技术使其变得更加困难。

——parzival 2019 年 3 月 29 日 22:17

【讨论】:

以上是关于如何使用 nginx 反向代理服务器限制对 RESTful API 的访问?的主要内容,如果未能解决你的问题,请参考以下文章

使用http-proxy替代nginx实现反向代理

经过反向代理Server如何优雅的获取用户IP

Nginx# 上传图片大小限制反向代理MySQL反向代理Redis

Nginx# 上传图片大小限制反向代理MySQL反向代理Redis

前端通过Nginx反向代理解决跨域问题

nginx服务器有啥作用以及啥是反向代理