Каков наилучший способ оптимизации моего сервера Apache2 / PHP5 / MySQL для обмена файлами по протоколу HTTP? - PullRequest
0 голосов
/ 20 августа 2011

Мне было интересно, какую оптимизацию я мог бы сделать для своего сервера, чтобы улучшить его производительность при обработке загрузки / выгрузки файлов.

В настоящий момент я думаю, что Apache2 может быть не лучшим HTTP-сервером для этого?

Какие-либо предложения или оптимизации, которые я мог бы сделать на своем сервере?

Моя текущая установка - HTTP-сервер Apache2 с PHP, который выполняет загрузку файлов, которые в настоящее время хранятся в папке вне корневого веб-каталога ислучайным образом присваивается имя, которое хранится в базе данных MySQL (вместе с дополнительной информацией о файле / пользователе).

Когда пользователь хочет загрузить файл, я использую функцию header () для принудительной загрузки и чтения файла () для вывода содержимого файла.

1 Ответ

1 голос
/ 20 августа 2011

Вы правы, что это неэффективно, но это не вина Apache.Обслуживание файлов с помощью PHP будет вашим узким местом.Вы должны изучить X-Sendfile, который позволяет вам сообщать Apache (через заголовок, вставленный PHP), какой файл отправлять (даже если он находится за пределами DocRoot).

Увеличение скорости будет более выраженным прибольшие файлы и большие нагрузки.Конечно, еще лучший способ увеличить скорость - использовать CDN, но для большинства из нас это излишне.

Использование X-Sendfile с Apache / PHP

http://www.jasny.net/articles/how-i-php-x-sendfile/

Что касается увеличения производительности при загрузке, у меня нет особых знаний.В целом, однако, я полагаю, что каждая загрузка файла «блокировала» одного из ваших работников Apache на долгое время, то есть Apache должен вызывать больше рабочих процессов для других запросов.При достаточном количестве рабочих сервер может заметно замедлиться.Вы можете взглянуть на Nginx, который является сервером, основанным на событиях, а не на процессах.Это может увеличить вашу пропускную способность, но я признаю, что никогда не экспериментировал с загрузками в Nginx.

Примечание: Nginx использует X-Accel-Redirect вместо X-Sendfile.

http://wiki.nginx.org/XSendfile

...