Вы здесь

Сервер Apache

Установка и настройка веб сервера Apache в CentOS 5

В разных дистрибутивах пакет содержащий apache может называться httpd (CentOS), apache (Arch Linux), apache2 (Debian/Ubuntu). Кроме основного пакета может потребоваться установка дополнительных модулей, например mod_ssl.

http.conf

Для установки 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.

Некоторые глобальные настройки

На странице !/ГлобальныеНастройки даны комментарии к некоторым параметрам, в порядке их появления в стандартном httpd.conf

Секции

Секции определяют права доступа к каталогам, файлам, виртуальным серверам и модулям 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

В файлах .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'

Правильный порядок Allow, Deny

В директивах определяющих доступ к каталогу правила 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

Apache PHP MySQL

Очень примитивный скрипт. Выставлять на реальный сайт нельзя

init.php

<?php
 mysql_connect('localhost', 'user', 'pass');
 mysql_select_db('mydb');
?>

select.php

<?php
   require_once("init.php");
   $user=$_POST['user'];
?>

<HTML>
<BODY>
<FORM method="post">
<INPUT type="text" maxlength="128" name="user" id="user"  size="25" value="<?php echo $user; ?>" title="User:"  />
</FORM>
<?php

   $result = mysql_query("SELECT * FROM mytable WHERE user='".$user."'");
   if (! $result){
      print "Nothing found";
   }
   else
   {
       while( $record = mysql_fetch_array($result) )
        {
             print_r($record);
         }
         mysql_free_result($result);
    }
?>
Яндекс.Метрика