Эта тема на forum.dklab.ru


Aragorn: Проблема открытия страниц при загрузке файлов
Добрый день!
Обнаружил проблему в работе моего сервера (Apache2+PHP5 под виндой):
когда пользователь начинает скачивать какой-либо довольно большой файл, то он не может
открыть ни одной страницы сайта (даже если открывает новое окно explorer-а) до
тех пор, пока данный файл не скачается.
Я подозреваю, что дело тут в настройказ httpd.conf, хотя на мой взгляд, все верно.

Подскажите, пожалуйста, что я не так прописал.
Заранее спасибо!



# Timeout: Время ожидания в секундах, прежде чем сервер примет или
# отправит сообщение о тайм-ауте.
#
Timeout 300

#
# KeepAlive: Признак, позволено или нет устанавливать долговременные
# соединения (persistent connections) (т.е. когда обрабатывается более
# одного запроса на соединение). Для запрета укажите значение Off.
#
KeepAlive On

#
# MaxKeepAliveRequests: Максимальное число запросов, допустимое в одном
# долговременном соединении. Для снятия ограничений обнулите параметр,
# но для максимального быстродействия мы рекомендуем указать заведомо
# большое конкретное значение.
#
MaxKeepAliveRequests 0

#
# KeepAliveTimeout: Время ожидания в секундах следующего запроса от
# одного и того же клиента в одном подключении.
#
KeepAliveTimeout 15

#
# Для обработки запросов Apache для Win32 всегда порождает один дочерний
# процесс. Если он по каким-либо причинам будет преждевременно завершен,
# другой дочерний процесс создается автоматически. Поступающие запросы
# внутри такого дочернего процесса обрабатываются отдельными потоками.
# Следующие две директивы управляют поведением таких потоков и процессов.

#
# MaxRequestsPerChild: Число запросов, которое позволено обрабатывать
# дочернему процессу до переполнения. При переполнении дочерний процесс
# будет принудительно завершен, чтобы избежать проблем при длительной
# непрерывной работе, если Apache (или используемые им библиотеки),
# допускают утечку памяти или других ресурсов. На большинстве систем
# это не требуется, но некоторые (например, Solaris) имеют заметные
# утечки в библиотеках. Если нет других рекомендаций, для Win32
# установите значение 0 (без ограничений).
#
MaxRequestsPerChild 0

#
# ВНИМАНИЕ: значение MaxRequestsPerChild, отличное от 1,
# иногда приводит к аварийному завершению mod_php, начиная с версии
# PHP 4.3.0-pre2 (можно протестировать по адресу
# http://localhost/phpmyadmin/, нажимая несколько раз Reload).
#

#
# ThreadsPerChild: Число одновременно выполняющихся потоков (т.е.
# запросов), которое допускает сервер. Установите это значение в
# соответствии с требуемой загрузкой сервера (больше активных запросов
# одновременно означает, что они обслуживаются медленнее) и объемом
# системных ресурсов, который вы можете предоставить серверу.
#
ThreadsPerChild 300



Aragorn:
Неужели никто не сталкивался с такой проблемой?
NetTeh:
MaxKeepAliveRequests поставь 100 к примеру...
По идее должно помочь...
Aragorn:
MaxKeepAliveRequests поставь 100 к примеру...
По идее должно помочь...

Не помогло, к тому же MaxKeepAliveRequests=0 снимает ограничения. Оно у меня уже стояло.
Может быть проблема не в настройках, а в самом апаче? У меня, кстати, к нему еще OpenSSL прикручен.
Aragorn:
Заметил такую вещь:
если просто указать ссылку на файл, к примеру <a href="somefile.rar">скачать</a>, то во время скачивания
пользователь без проблем открывает страницы.

Я же использую предварительно скрипт, который проверяет права доступа на скачивание файла и увеличивает счетчик (общее число загрузок).
Вот фрагмент формирования meta-данных:



if (preg_match("/MSIE/i",$_SERVER['HTTP_USER_AGENT']) && !preg_match("/Opera/i",$_SERVER['HTTP_USER_AGENT'])) {
header('Content-Disposition: inline; filename="'.$file_name.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
} else {
header('Content-Disposition: attachment; filename="'.$file_name.'"');
header('Expires: 0');
header('Pragma: no-cache');
}
header("Content-Length: ".filesize($full_path));
header("Content-Type: ".$content_type);
readfile($full_path);
exit;


Может здесь что-то не так.
Вообще, кто какие скрипты использует для скачки? Поделитесь опытом плиз.
WingedFox:
Я предполагаю, что дело может быть связан с ограничением в 2 одновременных соединения к серверу.

Проблема только в IE+Apache/Win или FF+Apache/nix тоже?
Aragorn:
В FF+Apache/Win та же проблема,
под nix не проверял, т.к. сервак под Виндой.

А это ограничение на 2 одновременных соединения к серверу можно как-то настроить?
WingedFox:
http://www.google.ru/search?q=msdn+tcp+connections+limit
Aragorn:
У меня ось - Win Server 2003 (SP3)
Как заверяет меня админ нашей сетки - никаких ограничений типа "tcp connections limit" там нет.

Да и сам я по материалам мана с msdn в regedit-е полазил и ничего подобного там не нашел.
WingedFox:
Aragorn
Вы изучали ссылки из гугля и, в том числе, соответствующий им RFC?
Aragorn:
WingedFox
извините, я почему-то пропустил первую ссылку.

Вообщем как я понял надо в папке www моего хоста airmoldova.int создать файл web.config со следующим содержимым:


<configuration>
<system.net>
<connectionManagement>
<add address="www.airmoldova.int" maxconnection="40" />
</connectionManagement>
</system.net>

<system.web>
<connectionManagement>
<add address="www.airmoldova.int" maxconnection="40" />
</connectionManagement>
</system.web>

</configuration>


А далее перезапустить апач.

А сам сервер перегружать надо или нет? В статие об этом вроде как ни слова.

Я честно говоря кучу файлов типа web.config на сервере нашел.
Может это прописать надо в одном из них, а не создавать свой?
WingedFox:
Учитывая, что этот конфиг относится к IIS, я сомневаюсь, что он поможет.
Хотя, попробовать никто не мешает 8*)
Aragorn:
Прикол в том что на моем сервере IIS тоже поднят. На нем WSUS висит. Так что может и поможет.
Вообщем сегодня попробую.

Эта тема на forum.dklab.ru