Я запускаю веб-сайт, на котором размещены страницы, представляющие собой просто общие сценарии (php и т. д.) и загрузки в формате mp3 (некоторые из которых довольно большие - до 200 МБ). Я запускаю lighttpd на серверах в Linux (ubuntu 64). все в порядке, но при высокой нагрузке сервер недоступен (или очень медленный - даже загрузка занимает некоторое время), и я предполагаю, что это связано с огромным количеством скачиваний mp3 в то время. следовательно, dns видит сервер как неработающий и перенаправляет весь трафик на другие серверы, а через некоторое время он возвращается, и все снова работает.
так как лучше всего это исправить? в идеале я хочу, чтобы сервер продолжал работать (и веб-страницы - php и т. д. - всегда работали, но загрузки не всегда должны работать). Должен ли я иметь только 2 запущенных веб-сервера (один для загрузок и один для страниц 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"
}
Немногое:
Отрегулируйте максимальное время простоя записи.
Не запускайте FCGI / PHP на сервере, обслуживающем статический контент, это замедлит вас и повсюду добавит данные сеанса мусора.
Отключите любые журналы ошибок / доступа.
Добавьте записи кеширования: setenv.add-response-header = ("Cache-Control" => "public, max-age = 86400")
Используйте mod_expire: expire.url = ("/ mp3s /" => "доступ 2 года")
Не используйте connection.kbytes-per-second, это немного нестабильно. Для этого я бы использовал брандмауэр на уровне ОС / оборудования.