AWS ELB +反向代理(Nginx)+ ELBs:强制SSL

我已经审查/尝试以前在网上发现的build议无济于事。

我目前在我的Nginx反向代理之前有一个ELB设置,然后将stream量传递到3个不同的ELB上,这些ELB位于3个不同的Web应用(运行在EC2上)之前。 我需要确保来到第一个ELB + Rev Proxy的stream量始终是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将停止工作。 如果我直接转到代理服务器stream量没有通过,但页面不会出错,它只是空白。

问题:1.假设我上面的rev代理设置是正确的,一旦stream量变为https并进入ELB / Rev Proxy,它是否继续通过https连接到其他ELB? 换句话说,那些ELB需要打开入站443,还是将80作为stream量,然后切换到http? 2.我是否需要更改我的位置/ app1configuration中的任何设置,尤其是代理设置?

首先,让我确保我正确理解你的devise:

 --- HTTPS --> ELB -> nginx --- HTTP ---> ELB1 --> server1 --- HTTP ---> ELB1 --> server2 --- HTTP ---> ELB1 --> server3 

那是对的吗?

假设以上正确的,那么为了确保只有HTTPS进入第一个/前端EBL,您可以在端口443上使用HTTPS侦听器来configuration前端ELB。就是这样。

至于你的第一个问题,从ELB到你的后端服务器( 前端 nginx )的请求将是HTTP。 您必须自行configurationELB以将SSL用于后端连接。

这意味着,您的后端ELB只需要端口80上的侦听器来处理HTTP请求。 (或端口8080,或任何您想要后端ELB使用的端口。)

我可能会添加的一个build议是,您创build一个单独的“前端elb”安全组,以及一个单独的“后端elb”安全组。 前端ELB(和前端nginx实例!)应该使用“frontelb-elb”安全组,而后端ELB(和后端webapp实例!)都应该使用“backend-elb”安全组。 “前端elb”安全组应允许来自任何地方的传入请求(当然,假设您希望您的服务公开可用)。 然而,“后端elb”安全组只允许来自“前端elb”安全组的传入连接 。 这将确保唯一的方式到达您的webapps是通过前端ELB,这反过来确保只有HTTPS请求将到达您的webapps。

至于你的nginx代理configuration,我认为它看起来不错。 但是,我应该指出,AWS ELB会自动设置X-Forwarded-For (和X-Forwarded-Proto )标题; 你可能不需要在你的nginxconfiguration中明确地设置。

希望这可以帮助!