← All posts tagged Apache

что-то не могу справится. apache 2.4, mod_wsgi 3.x, mod_deflate штатный. настраиваю сжатие через AddOutputFilterByType. статика, которую apache сам отдаёт — начинает сжиматься. а вот запросы к wsgi — ну ни в какую (AddOutputFilterByType DEFLATE text/html да). нагуглить проблему не могу.

недокументированный косяк при переходе с apache 1.3 на 2.4 (по пути тоже не нашёл). директива Action в apache 1.3 НЕ проверяет фактическое наличие обрабатываемого файла, а apache видимо с 2.0 — ПРОВЕРЯЕТ. судя по комментарию в документации, в версии apache 2.1 ввели аргумент "virtual" для отключения проверки. самого факта проверки, как и факта изменения поведения в документации не нашёл.

недокументированный косяк при переходе с apache 1.3 на 2.4 (по пути тоже не нашёл). более строгая проверка директив конфигурации. очень часто можно было найти в .htaccess такое:
RedirectMatch ^(.*)$ example2.tld [R=301,L]
так вот в apache 2.4 такой номер не пройдёт, ибо [R=301,L] это фишка mod_rewrite, использованная клиентом по ошибке

чтобы кто ни гундел, а писать чего apache делает в proctitle — очень наглядно. да перфоманс конечно того-с, однако. особенно там rate, qps и особенно listen queue. оооо!!! где я был все эти 12 лет?

а apache в структуре запроса нет времени окончания обработки запроса. mod_log_config делает очень странный изгиб через одно место, чтобы не дублировать функции взятия времени для одного запроса, а все остальные особо не парясь фигачат apr_time_now(), который внутри для UNIX gettimeofday() со всеми вытекающими. nginx легче. он кидает время аж в массив (хз зачем). и сразу форматирует всякими разными способами. что выглядит громоздко. челодлание какое-то сплошное

выглядит pache mod_proctitle примерно так
# ps -ax -U root | grep httpd
78945 ?? Ss 0:00.01 httpd: [M 0|0] ruby21 user01 (httpd)
78989 ?? Ss 0:00.25 httpd: [M 0|0] php52 user02 [PLAIN] (httpd)
79041 ?? Ss 0:00.09 httpd: [M 0|0] php53 user02 [PLAIN] (httpd)
79095 ?? Ss 0:00.09 httpd: [M 0|0] php53 user01 [PLAIN] (httpd)
79132 ?? Ss 0:00.09 httpd: [M 0|0] php54 user02 [PLAIN] (httpd)
79166 ?? Ss 0:00.09 httpd: [M 0|0] php55 user03 [PLAIN] (httpd)
79201 ?? Ss 0:00.09 httpd: [M 0|0] php54 user04 [PLAIN] (httpd)
79248 ?? Ss 0:00.09 httpd: [M 0|0] php56 user05 [PLAIN] (httpd)
79297 ?? Ss 0:00.09 httpd: [M 0|0] php54 user06 [PLAIN] (httpd)
79558 ?? Ss 0:00.01 httpd: [M 0|0] wsgi27 user02 (httpd)
79635 ?? Ss 0:00.01 httpd: [M 0|0] wsgi27 user01 (httpd)
79708 ?? Ss 0:00.01 httpd: [M 0|0] wsgi34 user07 (httpd)

# ps -ax -U user02 | grep httpd
79025 ?? I 0:00.00 httpd: [I] [127.0.3.1] 127.0.3.1 GET / HTTP/1.1 (httpd)
79026 ?? I 0:00.00 httpd: [C] php52 user02 [PLAIN] (httpd)
79027 ?? I 0:00.00 httpd: [C] php52 user02 [PLAIN] (httpd)
79056 ?? I 0:00.00 httpd: [I] [127.0.3.2] 127.0.3.2 GET / HTTP/1.1 (httpd)
79057 ?? I 0:00.00 httpd: [C] php53 user02 [PLAIN] (httpd)
79058 ?? I 0:00.00 httpd: [C] php53 user02 [PLAIN] (httpd)
79147 ?? I 0:00.00 httpd: [C] php54 user02 [PLAIN] (httpd)
79148 ?? I 0:00.00 httpd: [I] [127.0.3.3] 127.0.3.3 GET / HTTP/1.1 (httpd)
79149 ?? I 0:00.00 httpd: [C] php54 user02 [PLAIN] (httpd)
79562 ?? I 0:00.04 httpd: user02/site2/2.user02.cz8.ru/norm (httpd)
79563 ?? I 0:00.04 httpd: user02/site2/2.user02.cz8.ru/norm (httpd)
79564 ?? I 0:00.04 httpd: [C] wsgi27 user02 (httpd)
79565 ?? I 0:00.03 httpd: [C] wsgi27 user02 (httpd)

(вот те GET — это наш monit моиторит состояние; [M] — основной воркер апача, он пишет заодно complete и incoplete queue; [C] — это "дочка" апача, пока не обработала ни одного запроса; [B] запрос в обработке, [I] — данные прошедшего запроса; запросы показываются только для mpm_prefork; на линукс пока не портировал)

воткнулся в слаборешаемую проблему — не могу никакими способами посредством API apache достать низкоуровневый дескриптор сокета, который слушаем. задница там из-за apr, который отдельно.

товарищи линуксоиды! скажите, а в каких дистрибутивах что есть для передачи переменных окружения apache´у? вот в Debian/Ubintu я вижу закопанный файлик envvars. а в CentOS, Gentoo, etc?

PhusionPassenger думает, что он умный и меняет proctitle основному апачу. тупо копированием в argv[0] того, что в этот argv[0] при запуске прилетело. не поверяя на длину. соответственно в proctitle полный дрен, если строка аргументов была длинная. так победим

прелесть какая. в apache можно задефайнить переменную через -D в коммандной строке, и через Define в конфигурационном файле. но задать ей значение через командную строку нельзя, а через конфиг — можно

и последний наверное вопрос дня — а есть дока по apache API? ну та что на сайте она какая-то косая... разве что на helloworld. я конечно уже начитался исходников, но таки иногда не хватает указаний....