![当前端有 nginx 反向代理时如何阻止对后端的直接访问](https://linux22.com/image/752054/%E5%BD%93%E5%89%8D%E7%AB%AF%E6%9C%89%20nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E6%97%B6%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E5%AF%B9%E5%90%8E%E7%AB%AF%E7%9A%84%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AE.png)
我有一个带有 nginx 反向代理的前端。任何以前缀“api”开头的 get 请求都会被路由到后端。但是我注意到这也会导致允许直接调用后端。
例如,如果我单击前端(位于“frotend-url”)中的一个按钮,向后端 URI“/api/hello”发出获取请求,代理会将其转换为“backend-url/api/hello”。但是,如果我直接从 Chrome、curl 等向“frontend-url/api/hello”发出获取请求,这也可以正常工作。有什么方法可以不允许这种情况发生吗?
答案1
我能给出的解决方案是直接使用iptables来限制后端服务器的访问,下面是一个例子:
# Allow port to spessific IP
iptables -A INPUT -p tcp -s your-Frontend-IP_Address --dport 80 -j ACCEPT #if your API run on port 80
# Then Block access from all
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 80 -j DROP
它使端口 80 仅可供前端 IP 访问。