如何使用 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 的访问?的主要内容,如果未能解决你的问题,请参考以下文章
Nginx# 上传图片大小限制反向代理MySQL反向代理Redis