我读过很多关于 Apache 优化的文章。在阅读过程中,有两个名字反复出现,nginx和php-apc。
我试图了解其中哪些可能对我有帮助,但我找不到明确的答案。我需要我的服务器支持大约 10k 个连接。该服务器有 5GB 的 RAM 和 4 个 CPU。
- 我的问题是,如果有的话,我应该使用哪一种?
- 我是否需要更改我的代码以更好地使用
APC
和nginx
? - 使用是否
nginx
会从 Web 服务器中删除任何功能? - 我遗漏了什么吗?我是否遗漏了某些基本的东西?
Apache 信息:
[root@web conf]# httpd -V
Server version: Apache/2.2.3
Server built: Sep 3 2009 17:38:51
Server's Module Magic Number: 20051115:3
Server loaded: APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
谢谢!
编辑
该网站将用于流式传输视频,使用 flash-rtmp 来流式传输视频,并使用 php(cake)和 js 来处理其他一切。
答案1
apc 充当 PHP 模块,而 nginx 是 web 服务器,通过 cgi 接口与 php 一起工作。简而言之,web 服务器配置不是一件容易的事,选择平台取决于很多因素。10k 个连接 - 这是什么意思,10k 个并行下载?如果视频以文件形式传送到同一台服务器 - apache 应该没有问题。最好考虑磁盘 IO 和网络,如果您正在处理视频 - 我确信 CPU 无法处理。如果您正在运行这个 php 网站来支持由其他服务器处理的视频流 - 可能不会有大量与 php 相关的请求,因此您可以使用任何东西来做到这一点,甚至不需要硬优化。
我的问题是,如果有的话,我应该使用哪一种?
- 在任何情况下你都可以使用 APC,但对于 nginx 则视情况而定。Nginx 默认配置比 apache httpd 更高效,但经过适当配置后,你可能会得到与 httpd 几乎相同的结果。
我是否需要更改我的代码以更好地使用 APC 和 nginx?
- 对于 APC - 没关系,使用 nginx 时,您将失去更常见的 Apache httpd Web 服务器中的一些附加功能。也许您需要修复某些问题
使用 nginx 是否会从 Web 服务器中删除任何功能?
- 是的,很多,另一个问题是你是否使用它
我遗漏了什么吗?我是否遗漏了某些基本的东西?
- 当前工作负载,瓶颈在哪里 - CPU 使用率、网络、连接等。APC 将降低 CPU 使用率,增加 RAM 使用率。http 可以与不同的模型一起使用。据我所知,您使用的是 RHEL5/Centos5 apache,32 位。至少,使用相关内核 (kernel-PAE) 来使用所有 5GB RAM。我不建议你使用当前的 apache 模型(在 /etc/sysconfig/httpd 中更改模型)。你可以将 php 用作模块或通过 cgi (mod_fcgid) 使用。
这远非配置细节——有很多东西需要配置,包括进程重生等
答案2
APC 是 PHP 的字节码缓存类型事务,而 nginx 是完全独立的网络服务器。可能有助于明确您计划运行哪种类型的网站。