В разных дистрибутивах пакет содержащий apache может называться httpd (CentOS), apache (Arch Linux), apache2 (Debian/Ubuntu). Кроме основного пакета может потребоваться установка дополнительных модулей, например mod_ssl.
Для установки apache используется один выделенный каталог с подкаталогами (ссылками на подкаталоги) с конфигурацией, модулями и логами. В CentOS базовый каталог /etc/httpd/. Дальнейшие ссылки на файлы даются именно для CentOS.
Основной конфигурационный файл /etc/httpd/conf/httpd.conf. В каталоге /etc/httpd/conf.d/ могут храниться дополнительные конфигурационные файлы. Они имеют ту же структуру что и httpd.conf и включаются в основной файл директивой Include.
Внимание В некоторых дистрибутивах Include /etc/httpd/conf.d/
стоит в первой половине httpd.conf до объявления виртуального сервера. По этому, если вы хотите хранить в отдельных файлах конфигурацию виртуальных серверов, то создайте новый каталог, например /etc/httpd/virtual, а в конец httpd.conf вставьте Include /etc/httpd/virtual/*.conf
Структура httpd.conf проста
#Комментарий
ГлобальныйПараметр значение
<Секция значение>
ЛокальныйПараметр значение
</Секция>
Все, что не попало внутрь секций, влияет на глобальные настройки сервера, секции определяют специфические настройки каталогов, виртуальных серверов и модулей apache.
В CentOS устанавливаем rpm пакеты
yum install php-common php-cli php
Если посмотреть список установленных файлов, то видно, что php устанавливает модуль для Apache /usr/lib/httpd/modules/libphp7.so
, а php-cli — интерпретатор /usr/bin/php
Модуль для Apache требует внесения изменений в конфигурацию apache. В CentOS это делается при инсталляции пакета путем добавления файла /etc/httpd/conf.d/php.conf. Примерное содержимое файла
<FilesMatch \.(php|phar)$>
SetHandler application/x-httpd-php
</FilesMatch>
DirectoryIndex index.php
Интерпретатор php позволяет подключать дополнительные модули, которые расширяют набор доступных в языке функций. Модули могут быть статически скомпилированы в интерпретатор либо подключаться динамически. Из популярных можно упомянуть php-mysql для связи с БД My SQL, php-gd – библиотека обработки изображений, php-mbstring – работа с Unicode.
В CentOS модули можно доустанавливать в соответствии с потребностями
yum install php-mysql
В соответствии с идеологией CentOS конфигурация php для модуля сохраняется в каталоге /etc/php.d/ и содержит строку подключения модуля:
extension=mysql.so
После установки модуля, веб сервер надо перегрузить.
Общий для всех конфигурационный файл находится в /etc/php.ini
В инструкции по php перечислены параметры, которые можно (PHP_INI_ALL, PHP_INI_PERDIR) и которые нельзя (PHP_INI_SYSTEM) изменить на уровне каталога.
Начиная с версии PHP 5.3.0 в каталоге можно помещать локальный файл настроек .user.ini
Также установки «под себя» можно сделать в файле .htaccess строками подобными следующим
php_value upload_max_filesize 32M
php_value post_max_size 64M
Или в тексте самой программы
<?php
ini_set('memory_limit', '128M');
ini_set('max_input_time', '300');
ini_set('max_execution_time', '300'); // 5 minuites
?>
Простейшая, но очень полезная программа на php. Выдает всю информацию о конфигурации apache и php
<?php
print phpinfo();
?>
<?php
$host='localhost'; $user="user1"; $pass='123';
//Знак @ нужен, чтобы погасить выдачу возможных ошибок подключения на веб страницу
$connection = @mysql_connect($host, $user, $pass, TRUE, 2);
//Установка кодировки для обмена данными в mysql версии > 4.1.0
mysql_query('SET NAMES "utf8"', $connection);
$query ="SELECT * FROM table";
$result = mysql_query($query);
if( $result )
{
while( $array=mysql_fetch_array($result, MYSQL_ASSOC) );
print_r($array);
}
?>
Секции определяют права доступа к каталогам, файлам, виртуальным серверам и модулям apache Секции могут быть вложены друг в друга файл в каталог, каталог в виртуальный сервер, модуль в виртуальный сервер (это не проверено)
В списке виртуальных серверов может присутствовать <VirtualHost *:80>
который будет использоваться если к apache пришел запрос с отсутствующим (по ip) или несконфигурированным именем сервера.
<VirtualHost dummy-host.example.com:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /www/docs/dummy-host.example.com
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
Допустимые опции каталога Indexes Includes, FollowSymLinks, SymLinksifOwnerMatch, ExecCGI, MultiViews, а также All или None.
<Directory "/var/www/html">
#
#Разрешаем просмотр каталогов в которых нет файла index.html
#Разрешаем использование символических ссылок
Options Indexes FollowSymLinks
#Запрещаем задание прав на доступ в .htaccess
AllowOverride None
#Разрешаем доступ всем
Order allow,deny
Allow from all
</Directory>
#Запрещаем доступ к файлам .htaccess, .htpasswd и т.п.
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
Включаем прокси, но ограничиваем доступ к нему доменом **example.com**
<IfModule mod_proxy.c>
ProxyRequests On
<Proxy *>
Order deny,allow
Deny from all
Allow from .example.com
</Proxy>
</IfModule>
В файлах .htaccess можно переопределить права доступа к каталогу (и его подкаталогам), если в httpd.conf для него указано AllowOverride All
(All это по максимуму, возможно, что разрешено будет переопределять только часть настроек). По сути дела .htaccess это секция <Directory ...>...</Directory>
вынесенная в отдельный файл и лишенная обрамляющих конструкций. Если права меняются в httpd.conf, то серверу надо послать сигнал обновления конфигурации. Изменения в .htaccess вступают в действие мгновенно.
Если вы используете Apache совместно с PHP, то в .htaccess можно вынести некоторые параметры PHP необходимые для работы скриптов в данном конкретном каталоге. Например:
php_value include_path '.:/var/www/phplib:'
php_value default_charset 'windows-1251'
В директивах определяющих доступ к каталогу правила Deny и Allow можно писать в любом порядке. Реальный порядок их применения определяется директивой Order. При запоминании порядка важно уяснить, что эти правила не описывают группы адресов как в некоторых других программах (например в Squid), а последовательно применяются к каждому конкретному адресу
**Order Deny,Allow** - по умолчанию всем разрешено, т.е. если нет запрещающего правила **Deny**, то клиент допускается.
Если какое то правило Deny запрещает доступ, то дополнительно проводится проверка в правилах Allow, и при наличии подходящего правила клиенту все таки разрешается доступ. Т.е. мы пишем глобальное правило Deny, а потом формулируем для него исключения в Allow
**Order Allow,Deny** - по умолчанию всем запрещено.
Если какое то правило Allow разрешает доступ, то дополнительно проводится проверка в правилах Deny и при наличии соответствующего запрета клиента отфутболивают. Т.е. мы пишем глобальное правило Allow, а потом формулируем для него исключения в Deny
Примеры
#Никому нельзя (например в каталоге с библиотеками PHP)
Order Deny,Allow
Deny from all
#Только с apache.org
Order Deny,Allow
Deny from all
Allow from apache.org
#Только с apache.org кроме foo.apache.org
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
<RequireAny>
Require all denied
Require ip 192.168.1.14
Require ip 10.0.12.4
<RequireAny>
<RequireAll>
Require all granted
Require no ip 192.168.1.14
Require no ip 10.0.12.4
<RequireAll>
Показ списка файлов в каталоге
DirectoryIndex disabled
Options Indexes
IndexOptions NameWidth=*