我运行一个网站,该网站托管的页面只是一般的脚本(php 等)和 mp3 下载(其中一些相当大 - 高达 200mb)。我在 Linux(ubuntu 64)上的服务器上运行 lighttpd。一切都很好,但是在高负载下,服务器无法访问(或者非常慢 - 即使 ssh 也要花一段时间),我猜这是由于当时大量的 mp3 下载造成的。因此,dns 认为服务器已关闭并将所有流量重定向到其他服务器,一段时间后,它又恢复正常。
那么解决这个问题的最佳方法是什么?理想情况下,我希望服务器继续运行(并且网页 - php 等 - 始终工作,但下载不一定总是工作)。我应该只运行 2 个 Web 服务器吗(一个用于下载,一个用于 php 页面),或者我是否可以在 lighttpd 配置中修复它?
以下是我的配置片段:
server.max-worker = 4
server.max-fds = 2048
server.max-keep-alive-requests = 4
server.max-keep-alive-idle = 4
server.stat-cache-engine = "fam"
fastcgi.server = ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 1,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "64",
"PHP_FCGI_MAX_REQUESTS" => "1000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
# normal php site
$HTTP["host"] =~ "bar.com" {
server.document-root = "/usr/local/www/sites/bar.com/"
accesslog.filename = "|/usr/sbin/cronolog /var/log/lighttpd/%m/%d/%H/bar.log"
}
# download site
$HTTP["host"] =~ "(download|stream).foo.com" {
server.document-root = "/home/audio/"
dir-listing.activate = "enable"
dir-listing.hide-dotfiles = "enable"
evasive.max-conns-per-ip = 1
evasive.silent = "enable"
# connection.kbytes-per-second = 256
accesslog.filename = "|/usr/sbin/cronolog /var/log/lighttpd/%m/%d/%H/download.log"
}
答案1
一些事情:
调整最大写入空闲时间。
不要在提供静态内容的服务器上运行 FCGI/PHP,它会减慢您的速度并在各处附加垃圾会话数据。
禁用任何类型的错误/访问日志。
添加缓存条目:setenv.add-response-header = ( "Cache-Control" => "public, max-age=86400" )
使用 mod_expire:expire.url = ("/mp3s/" => "访问 2 年")
不要使用 connection.kbytes-per-second,它有点不稳定。我会为此使用操作系统/硬件级防火墙。