Site Tools


apache

Перезагрузка

apache2ctl -t
apache2ctl graceful

Мультипроцессорность

Worker

Каждый запрос обрабатывается своим дочерним процессом.
Наиболее производительный.

pre-fork

Основанная на предварительном создании отдельных процессов, не использующая механизм threads.
Большая безопасность и стабильность за счёт изоляции процессов друг от друга, сохранение совместимости со старыми библиотеками, не поддерживающими threads.

ITK

Основанная на модели prefork. Позволяет запуск каждого виртуального хоста под отдельными uid и gid.

Консольное

httpd
  • -V Основная информация о сервере.
  • -d [some_dir] Назначем ServerRoot
  • -f [where_configfile] Указываем на конфигурационный файл
  • -L Вывести перечень всех деректив которые можно использовать в конфиге, к примеру это будут AddType, <Dirrectory> и куча других параметров.
  • -l Вывести список всех подключенных модулей.
  • -t Тестирование синтаксиса конфиг файлов.
  • -T -t, только без проверки DocumentRoot

http.conf

Назначаем индексный файл

DirectoryIndex [some_file]

Разграничения для .htaccess

AllowOverride [None|All|AuthConfig|FileInfo|и т.д.]

Переименовать .htaccess

AccessFileName .htaccess AccessFileName somefile

Добавляем MIME тим

AddType application/x-httpd-php .php
AddType application/x-gzip .gz .tgz
AddType text/html .shtml

MIME для неуказанных типов

DefaultType text/plain
DefaultType text/html

Включаем скомпилированный модуль

AddModule [some_module]

Указываем слушать определенный IP

BindAddress [some_ip_addr]
BindAddress 127.0.0.1 # Блокируем внешний доступ

Ограничиваем колличество подключений

Держать подключение открытым

KeepAlive [on|off] # По умолчанию on #Apache1.1⇐ параметр иной

число допустимых запросов на одно соединение

MaxKeepAliveRequests [int]
MaxKeepAliveRequests 0 → бесконечно

число допустимых дочерних процессов

MinSpareServers [int] 5 #Устанавливаем минимальное число дочерних процессов apache.
MaxSpareServers [int] 10 #Устанавливаем максимальное число дочерних процессов apache.
StartServers [int] 5 #Устанавливаем число дочерних процессов при старте.
Вопрос - Уточнить зависимость колличества дочерних процессов к количеству возможных соединений и других параметров.

число допустимых одновременных соединений

MaxClients [int] 256

Логирование

Логи ошибок

ErrorLog [some_dir|syslog]

Уровень логирования ошибок

loglevel (warn)

  • debug Регистрируется любое самое малозначительноесобытие.
  • info Информационное сообщение.
  • notice Значительные, но не серьезные события.
  • warn Предупреждение, вероятно важное.
  • error Плохо, что тонужно предпринимать.
  • crit Ужасно. Немедленно предпримите что нибудь.
  • alert Авария.
  • emerg Катастрофа.
Указываем алиас

Alias /icons/ /usr/local/etc/httpd/icons/

Указываем каталог cgi

ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgibin/

Оптмизация

  • HostnameLookups off # В логах и в .htaccess доменное имя не резолвится в IP и наоборот
MaxClients

MaxClients = количество памяти выделенное под веб-сервер / максимальный размер порожденного процесса или потока
Слишком мало = сервер не догружен
Слишком много = опасность DDoS
Посмотреть колличество используемой памяти на ps -ylC httpd –sort:rss Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.

  • MinSpareServers, MaxSpareServers, и StartServers
  • MaxRequestsPerChild 10000
  • KeepAlive и KeepAliveTimeout 10
  • Сжатие (Больше сжатие → Больше памяти → меньше процессора ; Меньше сжатие → Меньше памяти → Меньше канал → Больше процессора)
  • Кэширование → mod_expires
.htaccess

При открытии файла, смотряться все папки верхнего уровня на наличие .htaccess файлов. Если оптимизируем сервер с парой но очень загруженных сайтов, то следует прописать путь до .htaccess в ручную.

<Directory /> 
AllowOverride None
</Directory>
<Directory /var/www/html/>
AllowOverride all
</Directory>

VirtualHost

Минимальный комплект
<VirtualHost 192.168.1.1>
ServerName www.examplel.org
DocumentRoot/some/other/directory
</VirtualHost>
<VirtualHost [some_ip|some_ip:port|*:some_port|*|_default_]    _default_ позволяет указывать VH по умолчанию
Опции

Options [All|None|Indexes|FollowSymLinks| and_other_options]

  • [+|-]All - все опции кроме MultiViews.
  • [+|-]ExecCGI - разрешается выполнение сценариев CGI.
  • [+|-]FollowSymLinks - Позволяет работать с симлинками
  • [+|-]Includes - SSI on
  • [+|-]IncludesNOEXEC - SSI on без exec и include в CGI
  • [+|-]Indexes - без index отображаем файлы
  • [+|-]MultiViews -
  • [+|-]SymLinksIfOwnerMatch - Просматривать символические связи только в случае, когда владелец файла или каталога совпадает с владельцем ссылки.

Other

Дескрипторы

Каждый модуль имеет свое “другое” название, тоесть “дескриптор”. С помощью этого дескриптора происходит обращение к этому модулю.
К примеру:
send-as-is дескриптор модуля mod_asis Обслуживать файлы и заголовки в их текущем состоянии
cgi-script дескриптор модуля mod cgi Выполнение CGI сценариев
imap-file дескриптор модуля mod imap Файл правил обработки изображений
server-info дескриптор модуля mod info Отображение конфигурационной информации сервера, а также включенные модули
server-parsed дескриптор модуля mod include Найти и заместить все вставленные на стороне сервера модули
server-status дескриптор модуля mod status Отображение информации о статусе сервера
type-map дескриптор модуля mod negotiation Анализировать как файл карты типа
Пример обращения:

AddHandler cgi-script   .pl  - все файлы с расширением .рl на обработку дескриптору cgi script.
<Location /images>
SetHandler imap file     -все файлы, содержащиеся в каталоге /images обрабатываютися модулем mod imap
</Location>

Список стандартных модулей

Безопасность

Опасность от include inject

Файлы куда можно прописать php код для инклуда:

  • Логи доступа и ошибок
  • Почтовые сообщения (Для root к примеру)
Разрешено только для IP
order deny,allow
deny from all
allow from 127.0.0.1 2.2.2.2
Запрещено только для IP
order deny,allow
deny from 1.1.1.1 2.2.2.0/24
allow from all
Блокируем доступ по паролю
<Directory /home/site2>
AuthName "Example of Access Control"
AuthType Basic
AuthUserFile /etc/security/.htpasswd
Require valid-user 
</Directory>

.htpasswd generator

Кодировка

Можно заменить в .htaceess или в настройках apache.

CharsetDisable On
CharsetSourceEnc UTF-8
AddDefaultCharset UTF-8

Apache как прокси

Apache должен конфигурироваться с модом, который по умолчанию туда не входит а именно mod_proxy

Proxy Requests On
Запрет на просирование
ProxyBlock site.com site.org
Обрабатывать самому, не проксируя
NoProxy .example.com
Проксировать определенные запросы
ProxyPass /distant/mirror http://www.tuchman.edu

Маршрутизирует все локальные запросы к узлу http://www.example.edu/distant/mirror через proxy на узел http://www.tuchman.edu.

Кэширование

Кореть кэша
CacheRoot /cache
Размер кэша
CacheSize 10240
Глубина кэширования
CacheDirLevels [int]
Ограничение каширования по колличеству символов в адресе
CacheDirLength [int]
Максимальное время хранение кэша
CacheMaxExpire 
Стандартное время хранение кэша
CacheDefaultExpire

Если файл поступает без срока хранения, используется величина, заданная этой директивой.

Стандартное время хранение кэша 2
CacheLastModifiedFactor 

Если файл поступает без срока хранения, вычисляется период времени от текущего времени до времени послед ней модификации файла, результат умножается на коэффициент CacheLastModifiedFactor для определения того, сколько будет ждать сервермомента,до истечения срока хранения файла.

Период очистки кэша
CacheGdlnterval [int]
Отключить кэширование для сайта
NoCache [some_url|*]

Динамика

SSI

AddType text/html .shtml
AddHandler server-parsed .shtml
Options +Includes
Примеры SSI
<!--#element attribute=value attribute=value ... -->
<!--#include virtual="/cgi-bin/counter.pl" -->
<!--#echo var="DATE_LOCAL" -->

CGI

Способы

1. Выполнение в отдельной папки
ScriptAlias /cgi-bin "/home/home_dir/cgi-bin" #chmod 755 на файлы
2. Выполнение в отдельной папки
Alias /mydir/ /var/www/mydir/

SetHandler cgi-script
Options +ExecCGI
Order allow,deny
Allow from all
3. Выполнение только .pl как CGI
Alias /slayer/ /var/www/slayer/
AddHandler cgi-script .pl
Options +ExecCGI
Order allow,deny
Allow from all
Небольшой проверочный perl файл
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";

CGI опции

Ограничение по времяни выполнения CGI процесса
RLimitCPU [int_sec]
Ограничение по колличеству памяти для CGI процесса
RLimitMEM [int]
Ограничение по колличеству порождаемых процессов от CGI процесса
RLimitNPROC [int]

Логи в CGI

ScriptLog [some_dir]
Размер лога
ScriptLogLength. [some_int] # В байтах

FastCGI

Одно из отличий от CGI, в FastCGI скрипты кэшируются.

Иснталируем

Вкомпилировать в Apache
  • Скачиваем с fastcgi.com
  • разархивируем
  • mv полученный_архив /opt/apache/src/modules/fastcgi
  • В каталоге /opt/apache запускаем ./configure –activate-module=/src/modules/fastcgi/libfastcgi.a
  • make
  • make install
Подключить как модуль
  • Скачать, распаковать, перейти в распак. каталог
  • apxs -о mod_fastcgi.so с *.с
  • apxs -i -a -n fastcgi mod_fastcgi.so
подключаем в httpd.conf
LoadModule libexec/mod_fastcgi.so
<IfModule mod_fastcgi.с>
AddHandler fastcgi script .fcgi
</IfModule>

Опции

FastCgiServer [/some_dir/to_script.fcgi]

Говорит нашему Апачу, чтоыб FCGI закэшировал этот скрипт у себя при старте и не отпускал.

FastCgiSuexec on

Дает FCGI права root

FastCgilpcDir [some_dir]

Работает FCGI через сокеты, а сокеты храняться в /tmp/fcgi ,а если вы желаете другое расположение… пожалуйста.

PHP

Компиляция

  • Скачиваем с php.com
  • ./configure –with-apache=/where_dir/to_apache
  • –with-apxs=/where/apache/bin/apxs или как разделяемый объект.файл
  • –with-mysql=/path/to/mysql
  • make
  • make install
Addtype application/x_httpd_php .php
Addtype application/x_httpd_php .phps

Проверяем в httpd.conf эти строки

Ссылки

Не сортировано

Разница AddType и AddHandler

Директива AddType предназначена для связывания расширения файла с MIME-типом. Делается это для того, чтобы сервер смог корректно установить значение заголовка Content-Type для клиента, обрабатывающего контент.

  • AddType - установка MIME типа (Обработка на стороне клиента)
  • AddHendler - установка типа для самого сервера (серверная обработка)

1

Сообщаем о установленном ПО в headers
ServerTokens
(13) Permission Denied

namei покажет права на все папки до директории, к прмеру:

f: /var/www/u12345/data/www/testim.ru
 drwxr-xr-x /
 d--------- var    #Плохо
 drwxr-x--x www
 dr-x-----x u12345
 drwxr-x--x data
 drwxr-x--x www
 drwxrwxrwx testim.ru
Не авторизуемся

Дано: На странице административной панели или логина вводим свои данные но перекидывает или редиректит на эту же страницу авторизации
Так же признаком является ввод корректных данныз и редирект без сообщения об ошибки, но при вводе не корректных данных, страница Вам явно указывает что данные введены не верно. Решение: Происходит это, так как сайт не может сохранить файл с Вашей сессией. Смотрим session.cookie_path и права на нее.

Скрипт проверки записи в session.path

<?php
session_start();
if(isset($_SESSION['views']))
{
$_SESSION['views']=$_SESSION['views']+1;
echo $_SESSION['views'];
}
else
{
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
}
?>
Нахождение, наиболее используемого процессора

Дано:

Вэб сервер с кучей сайтов. В одном скрипте, одного из сайтов стоит выпол
Мониторинг

Если подключен LoadModule status_module modules/mod_status.so

  ExtendedStatus On
  <Location /server-status>
      SetHandler server-status
  </Location>

Мониторинг + perl скрипт

Discussion

Constantin Conovaloff, 2016/03/22 21:43

security

  • itk
  • selinux and apparmor
  • o-rwx all rights on /home/*
  • open_basedir
  • mod_chroot
  • off all exec functions
  • php security
  • allow_url_fopen=Off
  • allow_url_include=Off
  • Suhosin and Mod_security
  • disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
You could leave a comment if you were logged in.
apache.txt · Last modified: 2013/10/26 17:12 by conovaloff

Page Tools