我正在构build基于回合的游戏的后端。 我的经验主要是一盏灯; 我在一个节点端项目上涉足nginx。
我刚刚阅读了Twit Pic的Stephen Corona Scaling PHP应用程序。 他build议在Apache上使用nginx服务器。 他说他的ubuntu机器已经打开了32768-61000个端口。
在AWS上,我是否需要修改我的安全性进行分组以允许访问这些端口? 我如何确保nginx充分利用这个configuration?
更新:
我预计我的大部分要求是在443港口,这就是为什么我对他build议开放更多港口的build议感到困惑。
这是他所做的build议
net.ipv4.ip_local_port_range
ip_local_port_range定义系统上可用端口的范围。 在我的股票Ubuntu安装,它被设置为32768-61000。 增加范围以允许更多的连接。 可用端口的数量限制了同时开放连接的数量。 请记住,即使在连接closures之后,它仍然在TIME_WAIT状态下吃一个端口(虽然我们用下面的一些设置来减轻这个影响)。
sysctl-wnet.ipv4.ip_local_port_range="10000 65535" vi /etc/sysctl.d/haproxy-tuning.conf net.ipv4.ip_local_port_range=10000 65535
在AWS上,我是否需要修改我的安全性进行分组以允许访问这些端口?
对于传入的连接,是的。 对于由您的服务器启动的连接,
默认情况下,所有输出端口都打开,所有input端口(SSH除外)都closures。
传入连接是由位于盒子外部的软件启动的连接。 传出连接是由软件驻留在您的盒子中,例如您的实例上的Linux内核或NGINX。
我如何确保nginx充分利用这个configuration?
当您定义ip_local_port_range时,此设置将定义服务器的传出连接的端口。 您不希望打开AWS安全组中的传入连接的这些端口(或者您不需要的任何其他端口)。 但是,您需要打开NGINX应该侦听传入请求的所有端口(通常是标准的HTTP / HTTPS端口,这是专门select的,但绝对不是端口范围)。
除此之外,您应该在VPC(“EC2 VPC”,而不是“EC2 classic”)中运行您的服务器。 如果在“EC2 classic”中运行服务器,则可以想象,内部AWSnetworking上的其他用户可能成功地在端口扫描您的盒子,如果它们碰巧在同一个子网中。 这在AWS上是非法的,并会closures用户帐户。 基于同样的原因,如果您需要在自己的AWS基础架构上运行端口扫描,任何渗透testing或任何远程类似漏洞扫描的任何testing,则必须要求Amazon获得许可,否则您将让自己陷入一些麻烦。 您可以在这里获得漏洞扫描的授权: https : //aws.amazon.com/security/penetration-testing/
如果您需要为应用程序打开端口,则可以在AWS安全组中指定端口(或端口范围)。
创build一个新的规则与所需的范围,即按照您的示例32768-61000。
至于是否需要打开所有这些端口的问题,可以归结为如何构build您的应用程序。 我怀疑如果你在Load Balancer(一个可扩展的解决scheme的常见设置)背后的许多小型EC2的路线,那么许多开放端口的build议可能不适用于此。
AWS负载平衡器可以处理大量stream量,并且不需要打开大量端口。