| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Администрирование Web серверов и Web служб > Периодически возникает проблема с Apache |
| Автор: iAnthony 8.3.2009, 21:13 |
| Добрый вечер! В последнее время стала возникать проблема с сервером. Стоит на виртуальной машине Windows Server 2003, на сервере установлен Apache + PHP + Zend Optimizer и MySQL, плюс сервер играет роль DNS. Все работало прекрасно до добавления очередного виртуального хоста на Apache. При входе на этот сайт у клиентов периодически возникает проблема и страница не открывается: Firefox пишет "Соединение было сброшено. Во время загрузки страницы соединение с сервером было сброшено.", остальные браузеры просто сообщают, что страница временно не доступна. Спустя некоторое время заметил, что аналогичная проблема возникла и на другом виртуальном хосте, который ранее функционировал без каких-либо нареканий. Не уверен, но как мне кажется, что проблема возникает при загрузке динамических PHP страниц, потому что после того как возникла данная проблема я попробовал открыть главную страницу сайта, которая написана на HTML - ни каких ошибок не произошло, потом снова попытался открыть PHP страницу и соединение вновь сбросилось. Я предположил, что не хватает оперативки, но, расширив ее еще на 1 Гб, ситуация не изменилась. Больше пока идей никаких нет на счет этой проблемы, единственное, после установки Windows Server 2003 VMWare мне предложил что-то сделать для производительности, после чего я где-то ткнул галку, и первое что заметил курсор стал быстрее перемещаться и без мерцаний, но спустя какое-то время настройки эти сбились, окна стали медленно прорисовываться, курсор снова медленнее стал перемещаться, но вроде все функционировало и я не стал заморачиваться с этим. Теперь думаю, хотя и маловероятно, но не могло ли это сказаться на работоспособности сервера? Или в чем же причина сбросов соединений? Я постарался детально описать проблему, но если будут вопросы - задавайте. Буду премного благодарен за помощь! Добавлено через 12 минут и 29 секунд Еще маленькое дополнение. Apache у меня работает на две стороны: на локальную и на природу. Последний хост, который был добавлен, в DNS прописан только для интернета, а для локальной сети нет. И заметил что в одно и то же время с локального компьютера, который так же имеет доступ в мир, не открывается PHP страница - выдает сброс соединения, но HTML открывает, а с компьютера, который к локальной сети никакого отношения не имеет страница открывается без проблем и PHP и HTML. Для локального компьютера задан DNS сервера, для другого компьютера заданы DNS провайдера. Но думаю проблема не в DNS кроется. |
| Автор: iAnthony 8.3.2009, 21:33 |
| И еще добавление, Сафари говорит "The error was: “unknown error” (kCFErrorDomainWinSock:10054)" |
| Автор: DSsupport 10.3.2009, 22:42 | ||
| nslookup обоих виртуальных хостов на сервере проходит без ошибок? С машин локальной сети и внешки DNS корректно резолвит домен в IP? пример:
Интересно было бы посмотреть на error лог апача и часть конфига с описанием виртуальных хостов. |
| Автор: iAnthony 12.3.2009, 21:28 |
| nslookup проходит без ошибок. Что-то не так было с настройками, в итоге я удалил NameVirtualHost для локальной сети, удалил из DNS все записи для локальной сети и оставил только для интернета, после перезапуска Apache все ошибки исчезли и все заработало как ни в чем не бывало. Хотя это конечно не решение проблемы. |
| Автор: iAnthony 12.3.2009, 22:41 |
| В логах нашел такие вот ошибки для всех виртуальных хостов: VirtualHost <такой-то>:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results |
| Автор: DSsupport 12.3.2009, 22:41 |
| То, что проблема в настройках - это понятно. К сожалению, помочь Вам невидя конфигурационных файлов. Могли бы Вы выложить конфиг Апача, в часности настройки обоих виртуальных хостов? В ошибке сказано что проблема с указанием портов для виртуальных хостов. |
| Автор: iAnthony 13.3.2009, 00:51 |
| Могу выложить конфиг, только немного видоизменю названия. Конфиг виртуальных хостов у меня в отдельном файле: NameVirtualHost xxx.xxx.xxx.xxx # IP для мира NameVirtualHost 192.168.1.1 # IP для локальной сети <VirtualHost _default_:80> # это сделал на случай если зона делегирована, а хоста нет соответствующего. Но почему-то не работает такая фишка, и в случае если нет хоста, открывается первый из объявленных ранее. DocumentRoot "S:/default/Web" <Directory "S:/default/Web"> AllowOverride All </Directory> ErrorLog "S:/default/Logs/Errors & Warnings.log" #CustomLog S:/default/Logs/Access.log combined </VirtualHost> Include "S:/Configuration/VirtualHosts/example.ru/main.conf" # это файлики, содержащие описание конкретных хостов Include "S:/Configuration/VirtualHosts/example2.ru/main.conf" ... и т.д. для каждого свой Файл с описанием хоста: <VirtualHost "example.ru:80"> ServerAdmin "administrator@example.ru" ServerName "example.ru" ServerAlias "www.example.ru" DocumentRoot "S:/example.ru/Web" <Directory "S:/example.ru/Web"> AllowOverride All </Directory> ErrorLog "S:/example.ru/Logs/Errors & Warnings.log" CustomLog "S:/example.ru/Logs/Access.log" common php_admin_value open_basedir "S:/example.ru/Web" </VirtualHost> Сейчас еще в логах нашел PHP Fatal error: Maximum execution time of 60 seconds exceeded in "..........". Думаю, что это и есть причина того что определенный хост падает временами, но странно что с другого компьютера он остается доступен и работает без каких либо проблем. Раз уж про конфиги заговорили, вопросик есть. А возможно ли хранить виртуальные хосты в MySQL? Но главное чтобы для каждого виртуального хоста была возможно задать данные по каким-либо параметрам, просто в сети встречал модуль для MySQL, но в нем можно задать только ServerAlias, ServerName и DocumentRoot - этого не достаточно. Добавлено через 4 минуты и 30 секунд ...В ошибке сказано что проблема с указанием портов для виртуальных хостов. Вроде эта проблема разрешилась после того как прописал порт в NameVirtualHost, т.е. стало так NameVirtualHost xxx.xxx.xxx.xxx:80, и для локального адреса соответственно так же. |
| Автор: DSsupport 13.3.2009, 11:42 |
| NameVirtualHost должен быть один, иначе apachectl -t будет выдавать ошибку(которая, так же, должна быть и в логе.), что указано 2-е и более директив NameVirtualHost. Значение для NameVirtualHost берут из названия уже имеющихся виртуальных хостов. В Вашем случае целесообразно выбрать из _default_:80 или example.ru:80. Дефолтный виртуальных хост должен стоять выше всех виртуальных хостов в конфиге, тогда он будет открыватся в случае отсутсвия виртуального хоста. После настройки виртуальных хостов, Вам необходимо обратить внимание на ограничения в использовании PHP, в часности на работу директивы php_admin_value open_basedir, скорей всего это именно она портит Вам жизнь.(http://www.php.ru/manual/features.safe-mode.html) Пример подключения модулья для хранения виртуальных хостов в mysql довольно хорошо описан здесь: http://www.lissyara.su/?id=1140 В примере указаны только основные директивы. При необходимости, Вы можете хранить в базе все что Вам необходимо. Из использования apache_vhosts+mysql: Плюсы: - не надо перегружать апач, после внесения изменений в виртуальные хосты или добавлении нового. Минусы: - Прожорливый модуль, на 6000 хостов примерно 250 мег оперативной памяти, при этом если то же кол-во хостов загружать через файл http.conf то составит около 4-х мегов. (http://forums.serverbeach.com/showthread.php?t=4752) |
| Автор: iAnthony 13.3.2009, 11:43 |
| Поэксперементировал и вот что узнал: Эти таймауты происходят почему-то только для одного компьютера. С других все работает и никаких ошибок. Так до сих пор и не понял причины такой реакции Apache. Добавлено через 7 минут и 9 секунд Так, второй NameVirtualHost убрал из конфига. > Значение для NameVirtualHost берут из названия уже имеющихся виртуальных хостов. В Вашем случае целесообразно выбрать из _default_:80 или example.ru:80. А если задан главный хост (в смысле не виртуальный, а основной), то он будет выбираться как дефолтный? |
| Автор: DSsupport 13.3.2009, 11:51 |
| Компьютер имеет стабильное соединение с сетью, большие пакеты передаются без проблем(ping -s 1500 example.ru)? Что в лог файлах апача в момент таймаута? |
| Автор: iAnthony 13.3.2009, 12:11 |
| Заметил странную вещь: Fri Mar 13 11:11:03 2009] [error] [client 192.168.0.2] PHP Fatal error: Maximum execution time of 60 seconds exceeded in "...." Т.е. говорит, что ошибка в PHP файле, которой на деле нет, и при загрузки этой страницы с других компьютеров все открывается правильно. Но вот что еще более странно! Я убрал из DNS все что связано с локальным адресом, и соответственно из Apache. Т.е. по хорошему должно все работать через интернет, а не через локальную сеть, но вот почему в логе тогда адрес локальный? Откуда его взял браузер? nslookup выдает только адрес интернет. Т.е. и взять-то этот адрес локальный не откуда. А теперь еще поподробнее о том как все устроено, может я что упустил: У меня есть один компьютер - сервер, и несколько локальных. Сервер подключен к двум сетям, к локальной и к интернету через выделенную сеть. Остальные подключены к wi-fi access point, которая в свою очередь подключена к другому интернету по ADSL. И так. На серверном компьютере установлена виртуальная машина с Windows Server 2003, которую я пускаю по выделенному каналу и другой второй адаптер настроен на локалку. Хостовая система выделенный канал не использует и подключается как все по wi-fi. При таком подключении я могу открывать страницы сервера как по локальному адресу, так и через интернет. Так во всяком случае я планировал, чтобы трафик лишний не гонять. Но потом прописав в DNS локальный адрес, который потом пошел по остальным DNS вне локалки, понял, что затея не очень хорошая и надо для этого отдельный DNS для локальной сети, поэтому вернул все на место, но вот серверный компьютер так до сих пор как я понимаю по локальной сети и подключается к серверу, а не через интернет. Ух наверное лучше по этой организации сети картинку нарисовать, чтобы представлять ее нагляднее. Добавлено через 2 минуты и 28 секунд Забыл сказать, пинг проходит нормально с большими пакетами, ping example.ru -l 1500. |