для этого нужно установить специальный модуль для apache
mod_limitipconn.c
1. качаем его с официального сайта разработчика:
[url="http://dominia.org/djao/limitipconn.html"]http://dominia.org/djao/limitipconn.html
2. далее по порядку делаем:
HTML Code:
tar xzvf mod_limitipconn-0.04.tar.gz
cd mod_limitipconn-0.04
make
make install
это короткий путь_
если вы хотите чтобы данный модуль стал внутренней функцией вашего вебсервера, перекомпилируйте ваш apache с этм модулем:
HTML Code:
tar xzvf apache_1.3.27.tar.gz
tar xzvf mod_limitipconn-0.04.tar.gz
cd apache_1.3.27
patch -p1 < ../mod_limitipconn-0.04/apachesrc.diff
cp ../mod_limitipconn-0.04/mod_limitipconn.c src/modules/extra/
./configure --activate-module=src/modules/extra/mod_limitipconn.c --with-forward
make
make install
3. откройте файл конфигурации вашего apache и убедитесь, что новый модуль подключен и вебсервер готов к перезагрузке. Ищите вот эти строки, они
НЕ должны быть закомментированны:
HTML Code:
LoadModule limitipconn_module libexec/mod_limitipconn.so
and
AddModule mod_limitipconn.c
4. Добавляем в конфигурацию вашего виртуального сервера следующий блок:
HTML Code:
<VirtualHost IP HERE>
ServerAlias [url]www.domain.com domain.com
<IfModule mod_limitipconn.c> <Location />
MaxConnPerIP 1
# In this case, all MIME types other than audio/mpeg and video*
# are exempt from the limit check
OnlyIPLimit audio/mpeg video/x-msvideo
</Location> </IfModule>
в случае, если вы закомментируете строку
HTML Code:
OnlyIPLimit audio/mpeg video/x-msvideo
ограничение будет распространяться не только на mp3 и видеофайлы, но и на все прочие типы, включая http, txt и т.д. Если вы собираетесь вводить ограничения для одного IP адреса, то такая конфигурация вообще не даст ничего скачать, потому как будет учитываться КАЖДОЕ
соединение с сервером. А простое отображение html страницы в браузере будет тем самым соединением.
Потому всегда точно указывайте типы файлов, загрузка которых должна быть ограничена одим IP адресом за сессию.
В результате работы этого модуля сервер каждый раз будет выдавать 503 ошибку, так что если вы хотите "настроить" и сделать более информативным работу вашего вебсервена, добавьте в ваш .htaccess файл следующую строку:
HTML Code:
ErrorDocument 503 http://www.yourdomain.com/limit.html
Это именно то файл, о котором вы спрашивали с самого начала.
На сайте разработчика вы можете скачать дополнительный patch который добавит в синтаксис еще одну весьма полезную директиву
LocalIP
с ее помощью вы сможете исключать "дружественные" вам IP адреса из установленного запрета.
Для того, чтобы включть эту дополнительную директиву, вам нужно немного откорректировать исходный код модуля и скомпилировать его снова. Вот сам patch:
HTML Code:
--- mod_limitipconn.c.org Wed Apr 30 14:57:33 2003
+++ mod_limitipconn.c Wed Apr 30 15:10:31 2003
@@ -44,6 +44,8 @@
checking */
array_header *excl_limit; /* array of MIME types to limit check; all
other types are exempt */
+ array_header *local_ip; /* array of local ip exempt from limit
+ checking */
} limitipconn_dir_config;
static void *limitipconn_create_dir_config(pool *p, char *path)
@@ -55,6 +57,7 @@
cfg->limit = 0;
cfg->no_limit = ap_make_array(p, 0, sizeof(char *));
cfg->excl_limit = ap_make_array(p, 0, sizeof(char *));
+ cfg->local_ip = ap_make_array(p, 0, sizeof(char *));
return (void *) cfg;
}
@@ -68,6 +71,7 @@
/* convert Apache arrays to normal C arrays */
char **nolim = (char **) cfg->no_limit->elts;
char **exlim = (char **) cfg->excl_limit->elts;
+ char **localip = (char **) cfg->local_ip->elts;
const char *address;
@@ -109,6 +113,15 @@
return OK;
}
+ /* Cycle through the local ip list; if the ip is local,
+ * return OK */
+ for (i = 0; i < cfg->local_ip->nelts; i++) {
+ if ((ap_strcasecmp_match(address, localip[i]) == 0)
+ || (strncmp(localip[i], address, strlen(localip[i])) == 0)) {
+ return OK;
+ }
+ }
+
/* Cycle through the exempt list; if our content_type is exempt,
* return OK */
for (i = 0; i < cfg->no_limit->nelts; i++) {
@@ -219,6 +232,16 @@
return NULL;
}
+/* Parse the LocalIP directive */
+static const char *local_ip_config_cmd(cmd_parms *parms, void *mconfig,
+ const char *arg)
+{
+ limitipconn_dir_config *cfg = (limitipconn_dir_config *) mconfig;
+
+ *(char **) ap_push_array(cfg->local_ip) = ap_pstrdup(parms->pool, arg);
+ return NULL;
+}
+
/* Array describing structure of configuration directives */
static command_rec limitipconn_cmds[] = {
{"MaxConnPerIP", limit_config_cmd, NULL, OR_LIMIT, TAKE1,
@@ -227,6 +250,8 @@
"MIME types for which limit checking is disabled"},
{"OnlyIPLimit", excl_limit_config_cmd, NULL, OR_LIMIT, ITERATE,
"restrict limit checking to these MIME types only"},
+ {"LocalIP", local_ip_config_cmd, NULL, OR_LIMIT, ITERATE,
+ "no checking on local IP"},
{NULL},
};
p.s. вообще же, все что я вам написал тут, вы можете найти в оригинальном файле README, и руководствоваться именно им я бы вам и рекомендовал. Одно скажу, что именно это, описанное решение и работает сейчас в аудио и видео архивах нашего сайта.
[url="http://dominia.org/djao/limitipconn-README"]http://dominia.org/djao/limitipconn-README