Архив метки: apache

Как добавить https на сайт с сервером apache

В данной статье расскажу как пошагово установить ssl сертификат на apache (вариант easy, без заморочек)

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

openssl req -new -x509 -days 30 -keyout server.key -out server.pem

однако в данном варианте у ваших посетителей в браузере появится отпугивающее предупреждение о недоверии к сайту. Чтобы этого не было, надо обратиться к компании, в которой выдают проверенные сертификаты. К счастью сейчас есть варианты, когда можно бесплатно получить сертификат. Но обычно (особенно для коммерческого использования и для юридических лиц) за сертификат придется выложить денежку, причем цена сильно варьируется в зависимости от типа сертификата, количество доменов итд итп. Я воспользовался сервисом wosign и получил халявный сертификат на 3 года :) Таким образом после первого шага у нас есть 2 ключа: открытый *.crt (расширение может быть другое, например pem) и закрытый *.key.

2. Открытый ключ кладем в папку /etc/ssl/certs/ , закрытый в папку /etc/ssl/private/

3. Настраиваем виртуальный хост для нашего сайта. Для этого идем в /etc/apache2/sites-available/ и открываем на редактирование mysyte.ru.conf

4. В открытом конфигурационном файле есть тег <VirtualHost *:80>. Копируем все содержимое этого тега и создаем точно такой же, но вместо *:80 пишем <VirtualHost *:443> . После этого осталось добавить 3 важные строчки:

SSLEngine on
# Публичный сертификат
SSLCertificateFile    /etc/ssl/certs/*.pem
# Приватный ключ
SSLCertificateKeyFile /etc/ssl/private/*.key

5. На последнем шаге делаем стандартную операцию «[sudo] service apache2 restart» и любуемся на сайт в https .

Простой анализ лог файла access.log apache на php

Пусть есть лог файл апача, надо из него выбрать

  1. десять IP адресов, с которых идет больше всего запросов
  2. десять самых популярных страниц

Данную задачу я даю студентам для ознакомления с регулярными выражениями. Одно регулярное выражение должно выбирать айпи адрес с начала строки, а над вторым надо немного пофантазировать. Для написания программы прежде всего следует ознакомиться со структурой access.log.  Приведем типичную строку из файла логов apache, который имеет следующую структуру (Combined Log Format).

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

Как видим логируется айпишник с которого идет запрос (127.0.0.1), время запроса, метод (GET), URL запроса, статус ответа (200), количество байт (2326), referrer, информация о браузере и операционной системе.

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

<?php
//считываем файл
$text=file_get_contents('access.log');
//задаем шаблон регулярного выражения
$pattern='#(([0-9]{1,3}\.){3}[0-9]{1,3}).{1,}GET ([0-9a-z/\_\.\-]{1,})#i';
//вытаскиваем данные в массив matches
preg_match_all($pattern,$text,$matches);
$ip=array_count_values($matches[1]);
$adr=array_count_values($matches[3]);
//сортируем по убыванию
arsort($ip);
arsort($adr);
//выделяем десятку
$ip_10=array_slice($ip,0,10);
$adr_10=array_slice($adr,0,10);

echo "10 самых активных пользователей по ip адресу";
echo "IP Количество\n";
foreach($ip_10 as $key=>$value)
{
	echo $key.' '.$value;
}

echo "10 самых посещаемых страниц\n";
echo "Страница Количество\n";
foreach($adr_10 as $key=>$value)
{
	echo $key.' '.$value;
}