您是否可以依赖 Nginx 作为您唯一的 Web 服务器。我知道就性能而言它运行良好,但它在安全性方面表现如何。我知道 Apache 很稳定并且具有 ModSecurity。但 Nginx 并非如此。
我将使用 Nginx 作为唯一的 Web 服务器,并且仅用于动态内容。所有静态内容均由 CDN 提供。
答案1
nginx 通过“反向代理”到 fastcgi 服务器来运行动态内容。大多数发行版中的 php-cgi 包都包含 fast-cgi 模式,其中 php 将启动一个小型 fcgi 服务器,您也可以连接 nginx。
这种分离可以让你做一些聪明的事情:
- 大多数动态语言(php,perl,ruby,python)都有办法运行fcgi应用程序
- 您可以以不同的帐户运行动态内容。或者,甚至可以在 chrooted 路径下运行。在我为几个朋友管理的 VPS 上,每个用户都有自己的 FCGI 服务器,运行自己的帐户。如果他们的软件受到攻击,攻击者只能到达该用户帐户。
- 它鼓励大多数应用程序采用简单的扩展路径。任何给定服务器上的 nginx 可能处理的静态负载多于动态负载。您可以将多个主机添加到 nginx 上的上游部分,并根据需要继续添加后端(但是,扩展数据库 + 文件系统由您决定)
- 使用带有上游部分的多个端口和单个主机,您可以重新启动 wep 应用程序而不会导致任何停机时间:(1)在另一个端口上启动 php-fcgi(2)在原始端口上停止 php-fcgi。nginx 将自动将请求从一个端口重定向到另一个端口
- 更好的内存利用率。使用 Apache/Mod_Security/Mod_php,每个 apache 进程都会将所有这些模块加载到内存中。虽然进程之间共享一些写时复制内存,但一旦每个进程更改页面,就会复制该内存页面。通过分离这些任务,nginx 可以使用相当小的内存占用,您可以设置专用的 Web 应用程序防火墙(ips/ids 设备、专用反向代理服务器),并且可以单独管理 php 应用程序上的内存策略。
更新:根据以下评论,以下是一些链接:
fastcgi_pass 参数- 这是指示 nginx 将请求传递给 fastcgi 服务器的方式。FastCGI 通过传递变量(故意看起来像 CGI 环境变量)来工作,但允许您将任意数据从前端传递到后端。在 debian 发行版中(以及在源发行版中,如果我没记错的话),有一个 fastcgi.conf 文件,其中包含大多数工具包启动所需的所有默认参数
上游模块- Upstream 模块允许您定义多个上游服务器,这些服务器可以是其他 Web 服务器、fastcgi 服务器或其他。fastcgi_pass 模块包含一个使用上游的简短示例。请注意,在单主机系统上,您甚至可以使用 unix 域套接字,并且不会产生任何 TCP/IP 开销!
PHPFCGI 示例- 这概述了完整的示例配置。我个人是 daemontools 的粉丝(如果您不是 djb 粉丝,则是 runit),并且编写了非常简单的包装器来在进程监督下运行 php-fcgi(如果异常终止,它将重新启动),但该页面上提供的脚本是 SysV 样式的脚本,您可以将其放入 /etc/init.d/ 并在 /etc/rcX.d/ 中添加适当的链接。在该页面的脚本中,您可以调整一些变量来调整 fcgi 应用程序的运行环境。
虚拟主机通过‘服务器’部分实现:
server {
server_name www.host.com host.com other_aliases;
...
}
server {
server_name www.host2.com host2.com other_aliases;
...
}
看server_name 部分有关更多详细信息,该页面的其余部分包含大量有关如何配置 corehttp 模块的信息。
在安全方面,Igor(首席开发人员)非常重视安全,并经常参与他们非常活跃的邮件列表。以下是公认的安全问题,以下是他们的邮件列表存档
答案2
我确实在高负载的服务器上运行带有 php-fcgi 的 nginx,其效果非常棒。
安全是你自己创造的。永远如此。请不要犯错误,不要依赖某些软件,它们会在遇到真正的问题时神奇地保护你。它不会。良好的编码和管理会。
答案3
我以为 Nginx 只能提供静态内容?这使得 php 成为“不可能完成的任务”