Web 应用程序框架,例如 sinatra (ruby)、play (scala)、lift (scala) 会产生一个监听特定端口的 Web 服务器。
我知道有一些原因,例如安全性、集群以及在某些情况下的性能,这可能会导致我在我的 Web 应用程序前面使用 apache Web 服务器。
根据你的经验,你有什么理由吗?
Web 应用程序框架,例如 sinatra (ruby)、play (scala)、lift (scala) 会产生一个监听特定端口的 Web 服务器。
我知道有一些原因,例如安全性、集群以及在某些情况下的性能,这可能会导致我在我的 Web 应用程序前面使用 apache Web 服务器。
根据你的经验,你有什么理由吗?
以防万一您想在2013 年 1 月 30 日的 Airbnb 技术演讲中获得 Isaac Schluetter 的半官方回答,他在 40 分钟内解决了节点是否足够稳定和安全以直接连接到 Internet 的问题。他的回答基本上是“是的”,这很好。所以你可以这样做,从稳定性和安全性的角度来看你可能会很好(假设你正在使用集群来处理应用程序服务器进程的意外终止),但正如上面所详述的,当前操作的现实是几乎每个人都运行节点在单独的 Web 服务器或反向代理/缓存后面。
框架通常可以满足您的所有需求,但有时,在其上添加一层可以为您提供看似免费的功能,如压缩、安全、会话管理、负载平衡等。不过,添加 Web 服务器也可能会引入安全问题,例如,您的 Web 服务器安全性可能比 Lift 本身更容易受到威胁。此外,一些 Web 框架具有极强的可扩展性,甚至可能会受到选择不当的 Web 服务器的阻碍。
总之,如果您需要框架未提供的类似 Web 服务器的功能,那么 Web 服务器可能是一个非常好的选择,但请记住,正确配置并定期更新安全补丁等是另一回事。
例如,如果您只需要加密或压缩,那么您可能会发现将正确的库或插件添加到您的框架中可能会做到这一点(并且仅此而已)
我要补充:
使用代理 http 服务器,框架不需要保持打开 http 连接来提供计算内容,然后可以开始服务其他请求。它充当缓冲区。
这是一个重新发明轮子的问题。大多数框架都会为您提供一个开发环境,但对于生产来说,使用能够处理生产过程中出现的所有问题的商业/开源项目通常是一种很好的做法。
构建框架的人将专注于框架,而构建服务器的人正在做同样的事情(完美)。