如何使用 AWS/nginx/Zend 制作站点到站点的 vpn

How to make site-to-site vpn with AWS/nginx/Zend

我们有一个通过 docker 容器在 AWS 上运行的 Zend (1.12.20) php webapp。我们在此 php webapp 和其他 webapp 之间也有 nginx 路由请求。

php 网络应用程序有一个 public 前端和一个管理后端。即

http://public-url.com
http://public-url.com/administrative-backend

我们希望将对 http://public-url.com/administrative-backend 的访问限制为仅使用站点到站点 vpn 的用户,同时保持 public 前端可供所有互联网访问。

应该在栈的哪一层实现? AWS 是否能够区分对容器服务的特定 URL 的请求,并使其中一些请求需要 VPN 授权? nginx 能以某种方式处理这个问题吗?

如何限制 vpn 用户访问 php webapp 的特定部分,同时让 webapp 的其余部分public只能访问?

您可以使用 nginx 来允许访问 / 到 public,但只允许从授权的 IPs/networks 访问 /administrative 后端,如下所示:

location ~ /administrative-backend {
  allow   172.31.0.0/16;
  deny    all;
}

172.31.0.0/16 可能是您的 VPC 或 VPN 的 IP 地址。请检查 http://nginx.org/en/docs/http/ngx_http_core_module.html#location 了解更多详情。

如果您正在寻找 AWS 内置的东西,它有根据请求路径路由流量的工具(在本例中为 /* vs /administrative-backend/*)。查看应用程序负载平衡器(不是经典的 ELB)https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/

为了更安全,我会做的是将 public 和私有(管理员)放在不同的容器中。只需禁用将服务于 public.

的容器中的所有管理内容