FAQ по Web серверу Apache
Q: Где взять информацию по настройке Apache.
A: Во-первых – на сайте проекта Apache http://httpd.apache.org. Во-вторых Apache посвящено очень много печатной литературы. Я могу порекомендовать книгу издательства SAMS Publishing ”Apache. Administrator’s Handbook”, изданную на русском языке издательством Diasoft.
кроме того, мной написан HOW-TO, специально для web девелоперов, использующих ОС Windows
http://www.codenet.ru/webmast/apache/AMP/
Q: Что такое виртуальный хостинг
A: Это функция, позволяющая разместить на одном сервере Apache сразу несколько сайтов. Пользователь, запрашивая сайт и не подозревает, где физически находится нужный ресурс. Перенаправление осуществляет Web сервер прозрачно для пользователя Существует три вида виртуальных хостов: основанные на IP адресах, основанные на именах, основанные на портах.
Q: Как сделать виртуальный хостинг по IP
A: При использовании виртуального хостинга по IP каждое имя сайта, расположенного на сервере представлено своим IP адресом. Это могут быть как различные физические интерфейсы, а соответствующие им адреса,так и виртуальные интерфейсы. Напомню, что все современные операционные системы позволяют назначать одному физическому интерфейсу более одного IP адреса. Кроме установки на сервере нескольких IP адресов нужно также корректно настроить преобразование имен. Тут нужно сделать небольшое лирическое отступление.
Читая различные топики на форуме, я сделал вывод, что многие начинающие Web мастера (и не только) не различают NetBIOS и DNS имена хостов, а также не представляют механизмов разрешения этих имен в IP адреса. Подробно рассматривать этот вопрос я не буду, вкратце скажу следующее – имена с которыми работает Apache – это DNS имена. Для корректной работы сервера имена хостов, с которыми он будет работать должны быть занесены в DNS. Если вы работаете с локальной машиной – можете использовать файл hosts. В нем также прописывается соответствие IP адресов и символических имен.
Итак для настройки виртуального хостинга используются секции VirtualHost, в которых собраны директивы конфигурации для конкретного хоста. Для IP-based виртуального хостинга, при наличии двух IP адресов, секции VirtualHost могут выглядеть так:
ServerName vhost1.net.local
DocumentRoot /usr/local/apache/vhosts/vhost1
ErrorLog logs/vhost1_error.log
AccessLog logs/vhost1_access.log
</VirtualHost>
<VirtualHost 192.168.1.1>
ServerName vhost2.net.local
DocumentRoot /usr/local/apache/vhosts/vhost2
ErrorLog logs/vhost2_error.log
AccessLog logs/vhost2_access.log
</VirtualHost>
Q: Как сделать виртуальный хостинг по именам
A: Конфигурирование виртуального хостинга основанного на именах практически ничем не отличается от в/х основанного на IP адресах. Разница в том – что вам не требуется больше одного IP адреса. Файл конфигурации будет выглядеть следующим образом:
<VirtualHost 192.168.0.1>
ServerName vhost1.net.local
DocumentRoot /usr/local/apache/vhosts/vhost1
ErrorLog logs/vhost1_error.log
AccessLog logs/vhost1_access.log
</VirtualHost>
<VirtualHost 192.168.0.1>
ServerName vhost2.net.local
DocumentRoot /usr/local/apache/vhosts/vhost2
ErrorLog logs/vhost2_error.log
AccessLog logs/vhost2_access.log
</VirtualHost>
Q: Как сделать виртуальный хостинг по портам
A: Такой вид в/х используется редко. При в/х по портам нужный пользователю контент определяется по номеру порта, на который он присоединился. Директива VirtualHost будет выглядеть так:
ServerName vhost.net.local
DocumentRoot /usr/local/apache/vhosts/vhost8888
</VirtualHost>
Q: Как мне настроить выполнение CGI сценариев в Apache
A: Включение исполнения CGI сценариев в определенном каталоге осуществляется опцией +ExecCGI. Например:
Options +ExecCGI
</Directory>
Options +ExecCGI
AddHandler cgi-script .pl .cgi .exe
</Directory>
Options +ExecCGI
SetHandler cgi-script
</Directory>
И наконец последний вариант – использование директивы ScriptAlias:
Q: CGI скрипт не работает!
A: Смотрим в логи. Наиболее распространненные ошибки следующие:
1. неправильные права доступа к файлу. Напомню, что владелец сценария и пользователь, который его запускает ( в данном случае – пользователь от имени которого работает Apache) – это разные вещи. 100% способ убедится, что права правильно установлены – дать права на выполнение всем:
3. Распространеная ошибка, на которую я сам попался недавно на хостинге ho.com.ua – это загрузка на сервер, работающий под управлением ОС семейства UNIX или Linux скрипта написанного в каком либо редакторе под Windows. Windows и UNIX по разному трактуют конец строки, поэтому интерпретатор не может корректно обработать данный скрипт.
Q: А можно пример работающего CGI скрипта? Чтобы проверить мои настройки?
A: Пожалуйста.
На Perl
use strict;
use warnings;
print ("Content-type: text/html\n\n");
print ("<html><body>Hello, World!</body></html>");
int main()
{
printf("Content-type: text/html\n\n");
printf("<html><body>Hello, World!</body></html>");
return 0;
}
A: для начала нужно включить поддержку Includes:
это делается либо в httpd.conf либо в .htaccess для конкретного каталога. Эту опцию обеспечивает стандартный модулю mod_includes, который ставится по умолчанию. Однаком проверить его наличие не мешает.
далее возможно несколько способов:
- указываем серверу, что все файлы с определенным расширением должны быть проанализированы на предмет SSI, через директиву AddHandler:Код:AddType text/html .shtml
AddHandler server-parsed .shtml
в Apache 2.x нужно добавить следующую запись:Код:<FilesMatch "\.shtml(\..+)?$)">
SetOutputFilter INCLUDES
</FilesMatch>
недостаток этого способа - в том, что для каждого файла, где присутствует SSI нужно менять расширение. - Альтернативный способ - включение директивы XBitHack:Код:XBitHack on
эта директива указывает на необходимость анализа всех файлов с установленным битом исполнения на наличие SSI. Насколько мне известно эта функция не поддерживается в Windows.
A: Для начала - у вас должен быть установлен модуль suexec (ключ --enable_suexec при установке Apache).
затем настраиваем виртуальный хост:
ServerName vhost1.net.local
DocumentRoot /usr/local/apache/vhosts/vhost1
ErrorLog logs/vhost1_error.log
AccessLog logs/vhost1_access.log
ScriptAlias /cgi-bin/ /usr/local/apache/vhosts/vhost1/cgi-bim/
User vhost1_user
Group vhost1_group
</VirtualHost>
если что-то не работает, проверям:
- принадлежит ли каталог со сценарием пользователю и группе, которые заданы директивами User/Group
- принадлежит ли сам скрипт указанным пользователю и группе?
- право на запись должно стоять только для владельца!
- каталог со скриптом должен быть доступен на запись только владельцу!
Q: После установки SP2 для Windows XP перестали работать виртуальных хосты (Virtual Host).
A: Необходимо в безопасном режиме (safe mode) установить обновление KB884020.
я устанавливаю Apache 2.2, подключаю модуль PHP, все делаю как в документации. при попытке запуска Apache получаю следующую ошибку в Event Log:
Source: Apache Service
Event ID: 3299
The Apache service named reported the following error:
>>> httpd.exe: Syntax error on line 115 of D:/www/Apache/conf/httpd.conf: Cannot load D:/www/php/php5apache2.dll into server: \xcd\xe5 \xed\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc. .
A:
стандартные модули от php.net php4apache2.dll и php5apache2.dll не работают с Apache 2.2. для Apache 2.2 есть специальный модуль, который можно найти на сайте проекта "Apache 2 on Windows Support"
http://www.apachelounge.com/download/
я устанавливаю Apache 2.2, подключаю модуль PHP, все делаю как в документации. при попытке запуска Apache получаю следующую ошибку в Event Log:
Source: Apache Service
Event ID: 3299
A:
стандартные модули от php.net php4apache2.dll и php5apache2.dll не работают с Apache 2.2. для Apache 2.2 есть специальный модуль, который можно найти на сайте проекта "Apache 2 on Windows Support"
http://www.apachelounge.com/download/[/QUOTE]
или загрузить последний снапшот http://snaps.php.net/
там есть рабочий модуль php5apache2_2.dll
У меня с этим модулем все заработало
можно ли средствами Apache справится с ошибкой, которую выдает JavaScript при попытке послать запрос по URI из другого домена
XMLHttpRequest.open
A:
описанная ошибка возникает, если вы пытаетесь через XMLHttpRequest получить данные из "другого домена". т. е. - если URL в XMLHttpRequest.open у вас задается в виде http:// URL[: port]. По соображениям безопасности такие запросы блокируются. Что делать?
Первый вариант - использовать некоторую прослойку, например CGI скрипт, к которому будет выполняться обращение в пределах домена, а он, в свою очередь - будет запрашивать нужный ресурс и отдавать данные.
Однако, проблему можно решить средствами Apache. для этого нужно использовать mod_proxy.
Пример.
Ajax запросы обращаются к web сервису, который работает под управлением JBoss на порту 8080, по адресу: http://example.domain.com:8080/cat/services
XMLHttpRequest.open обрабатывать такой URI отказывается. Прописываем в конфиг Apache следующие строки:
и делаем apachectl graceful, либо рестартуем Apache.
В результате, все запросы по адресу http://example.domain.com/cat/services Apache будет перенаправлять на http://example.domain.com:8080/cat/services, что позволяет нам использовать в XMLHttpRequest.open URI из локального домена - просто /cat/services
На хостингах по умолчанию чувствительность к регистру символов включена. Дома я поставил apache+php - нет чувствительности к регистру (закачиваю рисунки на платный хостинг - не отображаются, дома все хорошо...)
При переустановки системы файлы веб-сервера остаются неизменными если конечно не форматировать диск. На новой системе откроете файлы запуска web-сервера.
не совсем понял где прописывать PATH? Tестовый скрипт phpinfo выдает
Apache установлен в D:\www\Apache2
PHP D:\www\php
MySQL в C:\mysql (пробывал тоже на диск Д ставить там какие то траблы выскакивали то с кодировкой то с путями, установил на С все нормально работает(токо закончил курс с интуита введения в mysql, вручную создавал\редактировал БД\таблицы))
не совсем понял где прописывать PATH?
я, честно говоря, думал, что это азы компьютерной грамотности, а поэтому разъяснять этот пункт не надо...
http://www.oszone.net/6157
Честно говоря до этого мне никогда и не приходилось дописывать в PATH, что либо,
так как прежде с этим не сталкивался. Привык, что в виндовс всё по дефолту в пару кликов
мыши устанавливается.
Просто php начил изучать по книге PHP5 - Дмитрий Котеров, Алексей Костарев.
Там они описывали как устанавливать отдельно апач, мускул и пхп, но как то замороченно с созданием
диска Z и пр. Попробывал установить как они писали не получилось (какие то ошибки апач выводил, хотя
все делал в точь в точь по их инструкций),тогда не стал парится и установил денвер, который они сами
же в этой книге и рекомендовали. Обходился им 3месяца, но созрела потребность научиться устанавливать
и настраивать все самому не пользуясь готовыми наборами. Из всех статеек, что в нете нарыскал - эта
показалась наиболее полной и обстоятельной. Хотя тоже возникли три проблемы по ходу исполнения:
первая была с настроикой php на работу с appache, делал все как описано в статье но тот упорно
отказывался работать двот суток корпел над статьей этой и др., перерыл половину форумов, пытал гугл и только потом
выяснил, что проблема была в несоответствие версий апач и пхп, о чем собственно указывалось в начале
статьи, но я не предал этому значения, за что и поплатился своим временем и нервами.
вторая проблема была с подключением мускул к пхп которую только, что решил.
Осталась только вот третья проблема которую хотелось бы решить с настроикой виртуальных хостов.
Я подозреваю, что проблема у меня с этим -
корректно настроить преобразование имен через DNS либо файл %SystemRoot%\system32\drivers\etc\hosts.
Попытался сначала настроить на несколько IP и прописал в C:\WINDOWS\system32\drivers\etc\hosts
новую строке для сайта с названием test вот содержимое hosts
127.0.0.2 test
после прописываю в конце файла httpd.conf
ServerName test
DocumentRoot D:/www/Apache2/vhosts/test
ErrorLog logs/test_error.log
AccessLog logs/test_access.log
</VirtualHost>
рестартую апач, тот отказывается запускаться вываливая сообщение ошибки "The rquested operation has failed!"
Когда попытался сделать в\х по именам на одном ip
то дописал в файл hosts
а в httpd.conf следующее
<VirtualHost 127.0.0.1>
ServerName site
DocumentRoot D:/www/Apache2/vhosts/site
ErrorLog logs/site_error.log
AccessLog logs/site_access.log
</VirtualHost>
то так же апач отказывается запускаться и выводит тоже сообщение ошибки.
Что я делаю не так? и что можете порекомендовать почитать по теме -
корректно настроить преобразование имен через DNS
оказывается в строчке AccessLog надо было дописать common вообщем вот так должно было выглядить
диска Z и пр. Попробывал установить как они писали не получилось (какие то ошибки апач выводил, хотя
все делал в точь в точь по их инструкций),тогда не стал парится и установил денвер, который они сами же в этой книге и рекомендовали. Обходился им 3месяца, но созрела потребность научиться устанавливать
и настраивать все самому не пользуясь готовыми наборами. Из всех статеек, что в нете нарыскал - этапоказалась наиболее полной и обстоятельной. Хотя тоже возникли три проблемы по ходу исполнения:
первая была с настроикой php на работу с appache, делал все как описано в статье но тот упорно отказывался работать двот суток корпел над статьей этой и др., перерыл половину форумов, пытал гугл и только потомвыяснил, что проблема была в несоответствие версий апач и пхп, о чем собственно указывалось в началестатьи, но я не предал этому значения, за что и поплатился своим временем и нервами.вторая проблема была с подключением мускул к пхп которую только, что решил.
а так - там желающик было выше много, потом как-то не густо стало, может это - они все стали крутыми веб-девелоперами и со смертными обсчаца не хотят?
The requested URL /_php_/php.exe/install.php was not found on this server.
В httpd присутствует:
AddType application/x-httpd-php php phtml
Action application/x-httpd-php "/_php_/php.exe"