Архив ‘Администрирование’

Настройка кеширования в Apache

Пятница, 10 апреля, 2009

По умолчанию Apache настроен так, что кеширование запрещено даже для статического контента. Это означает, что при каждом обращении к сайту заново подгружаются все файлы CSS, JavaScript и картинки, что явно не способствует быстродействию.
Чтобы этого избежать, следует настроить выдачу заголовков Expires (время устаревания контента), ETag (строка, которая изменяется в случае изменения файла) и Cache Control (управление кешированием).
В Apache 2.x это делается с помощью следующих директив:
Далее…

Проверка SMTP-сервера на open relay

Вторник, 1 июля, 2008

Автоматически проверить почтовый сервер на то, что он не является open relay (т.е. не предоставляет возможности делать несанкционированные рассылки) можно по адресу.

http://www.abuse.net/relay.html

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

(Запись обновлена 30 июня 2009 года).

Настройка квот на сервере ProFTPD с использованием MySQL

Четверг, 20 декабря, 2007

Настройка поддержки дисковых квот в ProFTP выполняется достаточно просто. Для этого необходимо установить модуль поддержки квот и модуль поддержки MySQL, создать в базе данных таблицы для хранения данных о квотах и задать в файле конфигурации данные для подключения и SQL-запросы для обращения к этим данным. Выполняется это следующим образом:

1. Установка модулей. Если установка делается из портов, то нужно выполнить

make config

и включить модули MYSQL и QUOTA.
Если установка выполняется из исходников обычным способом, то необходимо выполнить

./configure --with-modules=mod_quotatab:mod_quotatab_sql

Далее компиляция и установка выполняется обычным способом:

make && make install && make clean

2. Создание таблиц в базе данных MySQL.
ProFTPd использует две таблицы с данными о квотах. В первой (назовем ее quotalimits) хранится список ограничений для пользователей, во второй (quotatallies) — статистика по использованию дискового пространства, объему скачанных файлов и т.д.

Таблицы создаются следующими запросами:

    CREATE TABLE quotalimits (

      name VARCHAR(30),

      quota_type ENUM("user", "group", "class", "all") NOT NULL,

      per_session ENUM("false", "true") NOT NULL,

      limit_type ENUM("soft", "hard") NOT NULL,

      bytes_in_avail BIGINT NOT NULL,

      bytes_out_avail BIGINT NOT NULL,

      bytes_xfer_avail BIGINT NOT NULL,

      files_in_avail INT UNSIGNED NOT NULL,

      files_out_avail INT UNSIGNED NOT NULL,

      files_xfer_avail INT UNSIGNED NOT NULL

    );    CREATE TABLE quotatallies (

      name VARCHAR(30) NOT NULL,

      quota_type ENUM("user", "group", "class", "all") NOT NULL,

      bytes_in_used BIGINT NOT NULL,

      bytes_out_used BIGINT NOT NULL,

      bytes_xfer_used BIGINT NOT NULL,

      files_in_used INT UNSIGNED NOT NULL,

      files_out_used INT UNSIGNED NOT NULL,

      files_xfer_used INT UNSIGNED NOT NULL

    );

3. Настройка данных о подключении в файле конфигурации.

Файл конфигурации находится в /usr/local/etc/proftpd.conf.

Запросы SQL для получения данных об ограничениях пользователя, получения и обновления его статистики, а также добавления новой записи в таблицу статистики в случае ее отсутствия. Запросы задаются с помощью директивы SQLNamedQuery, после которой указывается имя запроса (в одно слово) и текст запроса.

  SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, \

    bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits \

    WHERE name = '%{0}' AND quota_type = '%{1}'"  SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, \

    bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies \

    WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, \

    bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \

    files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, \

    files_xfer_used = files_xfer_used + %{5} \

    WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies

SQLNamedQuery insert-quota-tally FREEFORM \

    "INSERT INTO quotatallies VALUES ('%{0}','%{1}','%{2}','%{3}','%{4}','%{5}','%{6}','%{7}')"

Далее указываем путь файла для блокировки и имена запросов, используемых для выполнения определенных действий (префикс sql: означает, что используется модуль mod_quotatab_sql).

  QuotaLock /var/run/ftpd/tally.lock

  QuotaLimitTable sql:/get-quota-limit

  QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

Теперь укажем строку с данными для подключения к СУБД (примечание: если она уже указана в секции Global, и для хранения квот используется та же база, то повторно ее указывать не обязательно):

  SQLConnectInfo proftpd@localhost proftpd password

Далее осталось только включить модуль квот и пересчет статистики при заходе пользователя на сервер:

  QuotaEngine on

  QuotaOptions ScanOnLogin

В итоге в файле конфигурации получается примерно следующее:

<IfModule mod_quotatab.c>

  SQLConnectInfo proftpd@localhost proftpd password

  SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, \

  bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits \

  WHERE name = '%{0}' AND quota_type = '%{1}'"  SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, \

  bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies \

  WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, \

  bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \

  files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, \

  files_xfer_used = files_xfer_used + %{5} \

  WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies

SQLNamedQuery insert-quota-tally FREEFORM \

      "INSERT INTO quotatallies VALUES ('%{0}','%{1}','%{2}','%{3}','%{4}','%{5}','%{6}','%{7}')"

QuotaLock /var/run/ftpd/tally.lock

  QuotaLimitTable sql:/get-quota-limit

  QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

QuotaOptions ScanOnLogin

  QuotaEngine on

</IfModule>

4. Заполнение таблицы ограничений
Таблица ограничений заполняется следующим образом:
name — имя пользователя или группы.
quota_type — тип квоты: “user” — для пользователя, “group” — для группы, “class” — для класса соединений (см. документацию) , “all” — для всех.
per_session — если true, то ограничения распространяются на один сеанс работы с сервером, если false — то учитывается статистика и за все предыдущие обращения пользователя к серверу.
limit_type — тип ограничения. Если выбран “soft”, то при превышении объема позволяется докачать текущий файл, но запрещается скачивать/закачивать следующие.
bytes_in_avail, bytes_out_avail — ограничения на объем закачиваемых (in), скачиваемых (out) файлов в байтах.
bytes_xfer_avail — ограничения на суммарный объем закачиваемых (in) и скачиваемых (out) файлов в байтах.
files_in_avail, files_out_avail — ограничение на количество файлов, разрешенных для закачивания/скачивания
files_xfer_avail — ограничение на суммарное количество скачанных/закачанных файлов

Квоты считываются из таблицы на момент подключения пользователя к серверу и сохраняются в памяти до его отключения.
Проверить объем квоты можно с помощью команды SITE QUOTA (в клиентах командной строки команда должна вводиться как quote SITE QUOTA).

В заключение следует заметить три момента.
1. Имена и структуры таблиц могут отличаться от приведенных в данном примере. При этом необходимо учитывать эти отличия в SQL-запросах.
2. Ограничения по размерам и количеству файлов распространяются только на файлы, загруженные по FTP. Если требуется наложить ограничение на файлы, создваемые другим споосбами (например, из скриптов), необходимо воспользоваться квотами файловой системы.
3. Наличие двух записей для одного пользователя приводят к отключению квоты вообще.


Rambler's Top100