![AWS ELB+反向代理(Nginx)+ELB:强制 SSL](https://linux22.com/image/670220/AWS%20ELB%2B%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%EF%BC%88Nginx%EF%BC%89%2BELB%EF%BC%9A%E5%BC%BA%E5%88%B6%20SSL.png)
我已查看/尝试过之前在网上找到的建议,但无济于事。
我目前在 Nginx 反向代理前面设置了一个 ELB,然后将流量传递到 3 个不同的 ELB,这些 ELB 位于 3 个不同的 Web 应用程序(在 EC2 上运行)的前面。我需要确保进入第一个 ELB+Rev 代理的流量始终是 SSL。然后,rev 代理根据路由路由到各个应用程序。
这是我的 nginx/sites-available/example.conf 文件的片段:
server {
listen 80;
server_name staging.example.com;
return 301 https://staging.example.com$request_uri;
}
server {
listen 443 ssl;
server_name staging.example.com;
ssl_certificate /location
ssl_certificate_key /location
location /app1 {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://ELB
}
}
使用上述方法并尝试在网络上找到的先前信息时,一旦实施,第一个 ELB 将停止工作。如果我直接转到 rev 代理,流量不会通过,但页面不会出错,只会是空白。
问题:1. 假设我上面的 rev 代理设置正确,一旦流量变为 https 并进入 ELB/Rev 代理,它是否会继续通过 https 到达其他 ELB?换句话说,这些 ELB 是否需要打开入站 443,或者 80 是否会作为流量工作然后切换到 http?2. 我是否需要更改位置 /app1 配置中的任何设置,尤其是代理设置?
答案1
首先,让我确保我正确理解了您的设计:
--- HTTPS --> ELB -> nginx --- HTTP ---> ELB1 --> server1
--- HTTP ---> ELB1 --> server2
--- HTTP ---> ELB1 --> server3
那是对的吗?
假设以上是正确,那么为了确保只有 HTTPS 进入第一个/前端 EBL,您可以在端口 443 上使用 HTTPS 侦听器配置该前端 ELB。就是这样。
至于你的第一个问题,从 ELB 发出到后端服务器的请求(前端 nginx
) 将为 HTTP。您必须特意配置 ELB 以使用 SSL 进行后端连接。
这意味着,您的后端 ELB 只需要在端口 80 上监听 HTTP 请求。(或者端口 8080,或者您希望这些后端 ELB 使用的任何端口。)
我可能要补充的一个建议是,您创建一个单独的“frontend-elb”安全组和一个单独的“backend-elb”安全组。前端 ELB(和前端nginx
实例!)应使用“frontelb-elb”安全组,后端 ELB(和后端 Web 应用实例!)应全部使用“backend-elb”安全组。“frontend-elb”安全组应允许来自任何地方的传入请求(当然,假设您希望您的服务公开可用)。但是,“backend-elb”安全组应该仅允许传入连接来自“frontend-elb”安全组。这将确保唯一办法到达您的 web 应用程序是通过前端 ELB,这反过来确保只有 HTTPS 请求才能到达您的 web 应用程序。
至于你的nginx
代理配置,我思考看起来还不错。不过,我应该指出的是,AWS ELB 将自动地设置X-Forwarded-For
(和X-Forwarded-Proto
)标题;您可能不需要在配置中明确设置它nginx
。
希望这可以帮助!