Показаны сообщения с ярлыком apache. Показать все сообщения
Показаны сообщения с ярлыком apache. Показать все сообщения

четверг, 25 октября 2018 г.

debian: php5 + apache2-mpm-worker

Суть в том, что это не работает.
https://serverfault.com/questions/772298/configuring-apache2-mpm-worker-with-php5

Ubuntu's PHP5 module will only work with the single-threaded mpm_prefork. In order to use the Apache module with the threaded mpm_worker, you will need to compile a threadsafe version of PHP yourself (which requires disabling all of the features and modules of PHP that are not threadsafe, which are a lot of them).

Instead of using libapache2-mod-php5 you should consider using FastCGI/php-fpm. There is a guide to the steps needed to install and configure libapache2-mod-fastcgi and php5-fpm here: https://askubuntu.com/a/527227 Part of configuring FPM is to create "pools" of php processes, each of which have their own limits and INI files, so you will need to be sure that the limits in FPM are reasonable for your site's expected load.

This arrangement will allow you to use the multi-threaded worker MPM in Apache while handing off the PHP requests to individual PHP processes handling a single request each.

четверг, 3 мая 2018 г.

apache 2.4, nginx и 127.0.0.1 в логах

В старых версиях apache при проксировании запросов через nginx в логах апача светился 127.0.0.1, помогала установка mod_rpaf(2) или mod_realip. Но в 2.4 эти модули уже не нужны: в сам пакет входит mod_remoteip, и штатно активируется в /etc/httpd/conf.modules.d/00-base.conf
Но.. в логах всё-равно 127.0.0.1. Для полной настройки нужно создать файл /etc/httpd/conf.d/mod_remoteip.conf с содержимым
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8

после этого в /etc/httpd/conf/httpd.conf ищем LogFormat и заменяем %h на %a (подробности в документации)

И не забыть выставить X-Forwarded-For со стороны nginx, разумеется.

Проверяем что нет ошибок
apachectl -S
и перечитываем
service httpd graceful

И чуть линков

четверг, 14 июля 2016 г.

debian 8, apache, php: почта ходит только от рута

Довелось настраивать debian 8 + apache 2.4 (ITK) + php, штатный почтовик exim (и сразу - не забываем сказать dpkg-reconfigure exim4-config и выставить режим internet site), а дальше - есть скрипт-мейлер, от рута из консоли mail() возвращает true, а ровно оно же но через сайт отдаёт false. При этом в paniclog появляется строка
 unable to set gid=1000 or uid=0 (euid=0): forcing real = effective
По данной строке уже гуглится проблема и решение:
<IfModule mpm_itk_module>
LimitUIDRange 0 6000
LimitGIDRange 0 6000
</IfModule>

ну или так
echo "LimitGIDRange 0 2000" >> /etc/apache2/mods-available/mpm_prefork.conf
echo "LimitUIDRange 0 2000" >> /etc/apache2/mods-available/mpm_prefork.conf
service apache2 restart
(только с гидом не работает, надо uid+gid)

Кто-то набыдлокодил и выпустил это в мир, только непонятно кто именно.

Плюс кому-то также в exim надо вписать 
disable_ipv6 = true

И опционально в /etc/php5/apache/php.ini найти sendmail_path и выставить
sendmail_path = "/usr/sbin/exim4 -ti"

И немного доков

среда, 1 июля 2015 г.

nginx+pootle

Pootle - это система на базе django, помогающая с переводом .po файлов на разные языки, в том числе отслеживание изменений.
Поскольку это питон, желательно использовать uWSGI и nginx.

вторник, 9 сентября 2014 г.

CentOS 6: переход на httpd-itk

Тема конечно старая, но может быть кому-то актуальной. Переключаем apache на ITK
1) подключаем epel (интересный был найден метод: yum install epel-release из extras), при ругани
2) в /etc/sysconfig/httpd добавляем
HTTPD=/usr/sbin/httpd.itk
3) заменяем обработчик
sed -i ‘s/SuexecUserGroup/AssignUserID/’ /etc/httpd/conf/httpd.conf
4) в php.conf
<IfModule itk.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
5) если есть ispmanager:
"необходимо отредактировать конфиг файл - /usr/local/ispmgr/etc/ispmgr.conf — добавить строчку Option ApacheMPM и изменить строчку ApacheProcName httpd на ApacheProcName httpd.itk"

Также могут сломаться сессии, для этого надо сказать в конфиге сайта что-то типа
    php_admin_value upload_tmp_dir "/home/site/data/mod-tmp"
    php_admin_value session.save_path "/home/site/data/mod-tmp"


http://wiki.owlhost.net/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_mpm-itk_%D0%BD%D0%B0_CentOS/ISPmanager
http://svirchoff.ru/linux/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-apache-mpm-itk-%D0%BD%D0%B0-%D1%81entos-6-c-ispmanager/

понедельник, 14 апреля 2014 г.

apache, nginx: ограничение видов запросов

В apache через .htaccess, Limit и LimitExcept
Например
http://www.webmasterworld.com/apache/3537686.htm
http://board.phpbuilder.com/showthread.php?10367096-.htaccess-configuration-(limit-get-allow-deny)-and-lt-Limit-GET-HEAD-POST-gt

nginx
синтаксис: limit_except метод ... { ... }
контекст: location
Ограничивает HTTP-методы, доступные внутри location. Параметр метод может быть одним из GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK или PATCH. Если разрешён метод GET, то метод HEAD также будет разрешён. Доступ к остальным методам может быть ограничен при помощи директив модулей ngx_http_access_module и ngx_http_auth_basic_module:

limit_except GET {
    allow 192.168.1.0/32;
    deny  all;
}
Обратите внимание, что данное ограничение действует для всех методов, кроме GET и HEAD.
http://nginx.org/ru/docs/http/ngx_http_core_module.html

среда, 15 мая 2013 г.

воскресенье, 3 марта 2013 г.

apache+nginx, появление внутреннего порта в адресе

Связка apache+nginx, появление внутреннего порта в адресе.
Проблема была замечена исключительно с debian: при обращении к странице вида site.ru/about и внутренним редиректом на site.ru/about/ (добавление слэша в конец) вдруг появляется внутренный порт, и адрес становится например site.ru:8080/about/
Есть предположения о причинах, но если проблема не в основных настройках системы (уже было описано тут: http://dragonflybsd.blogspot.ru/2011/08/apachenginx.html), то наиболее простой фикс: в nginx правим переменную $host
proxy_set_header Host $host:80;
при этом должен стоять mod_rpaf (без выставленного X-Forvarded-for), с правильным RPAFproxy_ips.

Также был замечен вариант с
proxy_set_header X-Server-Address $server_addr;
но мной не проверялось.

помним про proxy_redirect

воскресенье, 3 февраля 2013 г.

FreeBSD: Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86.

После обновления перла при сборке разных пакетов может показывать ошибку
Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86.
У меня наблюдалось при переходе с перл 5.8 на 5.14

Как можно догадаться из текста, надо обновить (переустановить) apr и за компанию apache.

пятница, 25 января 2013 г.

Логгирование POST в apache

Можно это делать через mod_security, можно через mod_log_post

CentOS: mod_log_post есть в репе epel, ставится элементарно
yum install mod_log_post.`uname -i`
после этого
# /etc/init.d/httpd graceful
Теперь пост-запросы будут в
/var/log/httpd/post_log

В дебиляне надо качать сорцы и собирать самому, подробнее тут:
Модуль для логгирования POST запросов в Apache

воскресенье, 9 декабря 2012 г.

awstats в CentOS

В версии 6 пути были
/usr/share/awstats/wwwroot

Тогда как в 7 уже
/var/www/awstats/

Поэтому и настройки отличаются.
У меня selinuх отключается за ненадобностью, поэтому если нужна его настройка - искать отдельно правила.

Итак, сначала подключаем rpmforge. Потом
yum install awstats

Теперь надо проверить конфиг /etc/httpd/conf.d/awstats.conf, путь должен быть /var/www/awstats. Если не так - посмотреть в /etc/httpd/conf.d/awstats.conf.rpmnew

Часть 2:
настройка.
Настройки для парсинга сайтов лежат в /etc/awstats/ в формате awstats._site_.conf
Настроек в файле много, подробнее есть в доках. За основу можно взять конфиг awstats.model.conf

Для генерации статистики автоматом ставится скрипт на запуск раз в час, в
/etc/cron.hourly/00awstats
вписывается
/usr/bin/awstats_updateall.pl now -confdir="/etc" -awstatsprog="/var/www/awstats/awstats.pl"

Ручное обновление

awstats_buildstaticpages.pl -config=_site_ -update
(для 6 версии было perl /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=_site_ -update)


Теперь обращаемся за данными
site.com/awstats/awstats.pl?config=_site_
где вместо _site_ вписываем сайт так, как он указан в имени конфига.

Сами данные лежат в
/var/lib/awstats/

Нюансы
Лучше сразу настроить access_log как combined и указать это в настройках awstats для сайта, там информации будет побольше.

4 - Apache or Squid native common log format (NCSA common/CLF log format)
With LogFormat=4, some features (browsers, os, keywords...) can't work.

это про тип common.

Возможные ошибки

503 Forbidden

You don't have permission to access /awstats/awstats.pl on this server.

Причина: в /etc/httpd/conf.d/awstats.conf прописано
order deny,allow
deny from all
allow from 127.0.0.1
решение - вписать свои айпи или просто сделать order allow,deny

четверг, 29 ноября 2012 г.

bitrix + debian

Битрикс хочет несколько моментов для работы (то, что вызывает больше всего вопросов):
  1. mbstring + 2 строчки в настройках
  2. права на запись
  3. обработчик .htaccess

apache: Особенности работы сайтов от заданных пользователей

Штатно все сайты работают от пользователя апача (www, www-data, apache).

Как изменить это поведение на работу от заданного пользователя:
suphp
suexec
cgi/fastcgi
apache-mpm-itk

Особенности:
для mpm-itk выставляем пользователя через
AssignUserID

Для isp также надо вписать в ispmgr.conf:
Option ApacheMPM

Режим работы апача небезопасен: если найдут дыру в апаче, когда он работает от рута - вся система сразу будет под властью взломщика с неограниченными правами.

Для suexec опция
SuexecUserGroup

но!!! работает suexec только в режиме cgi/fastcgi! Через mod_php пользователь будет апача. Связано с тем, что apache через suexec запускает php от заданного пользователя и передаёт ему коннект через mod_proxy.

Также в режиме fastcgi будет особенность обработки конфигурационных файлов, в частности в debian будет читаться только содержимое каталога
/etc/php5/apache2/conf.d/
но при этом полностью игнорируется содержимое
/etc/php5/apache2/php.ini

Таким образом, для каждого пользователя надо вносить изменения в
/var/www/_user_/data/php-bin/php.ini
а глобально - создавать файлы в

/etc/php5/apache2/conf.d/

Например для fastcgi и битрикса можно создать глобальный файл 
/etc/php5/apache2/conf.d/mbstring.ini
с содержимым

[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2

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




Линки
куда делся режим "PHP как FastCGI"

вторник, 21 августа 2012 г.

400 Bad Request Request Header Or Cookie Too Large

Самое просто решение - почистить куки. Если же сервер наш, можно подкрутить настройки серверов:

для nginx это
large_client_header_buffers 4 8k;

Можно выставить например 16к, но дальше будет ошибка
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.

Потому что надо увеличить эти же значения и для apache
LimitRequestFieldSize 8190

Можно выставить
LimitRequestFieldSize 16380

Но проблема может быть и по другой причине.
Включаем в nginx.conf строку

error_log  /var/log/nginx/error.log info;


И видим в логе

2012/11/28 13:15:42 [info] 77783#0: *1146484 client sent too long header line: "X-Forwarded-For: 1.2.123.24, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, 127.0.0.1, ..." while reading client request headers, client: 127.0.0.1, server: _, request: "GET / HTTP/1.0", host: "site.ru"

Это признаки циклического редиректа, например в proxy_pass указан тот же порт, на котором сидит сам nginx (и так бывает иногда, да)

четверг, 21 июня 2012 г.

apache и nginx: сайт по умолчанию

nginx:
server {
    listen       80 default_server;
    server_name  _;
}


Если у директивы есть параметр default_server, то сервер, в котором описана эта директива, будет сервером по умолчанию для указанной пары адрес:порт. Если же директив с параметром default_server нет, то сервером по умолчанию будет первый сервер, в котором описана пара адрес:порт.

До версии 0.8.21 этот параметр назывался просто default.

дока

apache:
<VirtualHost _default_:*>
    DocumentRoot /var/www/default
    ErrorLog /var/www/default/error_log
</VirtualHost>

среда, 20 июня 2012 г.

apache: client denied by server configuration

В лине можно словить эту ошибку.
Причины: в конфиге прописано
<Directory "/">
    ...

    AllowOverride none
    Options none
</Directory>

Фикс: написать в конфиг

<Directory "/var/www/site">
    ...
    Allow from all
    AllowOverride All
    Options +FollowSymLinks
</Directory>

Для битрикса по сути нужно только AllowOverride FileInfo

Можно просто убрать "лишние" строки из главного конфига, но по ряду причин лучше попытаться переопределить нужные. Это и безопаснее, и автообновление конфига не отвалится.

среда, 30 мая 2012 г.

apache: LogLevel warn

По умолчанию апач обычно пишет в логи только уровень error и выше. Меняем на warn и выше: после ErrorLog пишем
LogLevel warn

и перезапускаем апач.

четверг, 10 мая 2012 г.

SuexecUserGroup и AssignUserID

Часто бывает нужно, чтобы скрипты на сайте исполнялись не от системного юзера (www/www-data/apache), а от пользователя, которому принадлежит сайт. В зависимости от режима работы apache разные методы для указания пользователя.
Основные методы это SuexecUserGroup и AssignUserID, и в своих конфигах можно указывать оба атрибута, плюс вариант под peruser:
<IfModule peruser.c>
ServerEnvironment user user
Processor user user
</IfModule>
<IfModule mod_suexec.c>
SuexecUserGroup user user
</IfModule>
<IfModule mod_suexec>
SuexecUserGroup user user
</IfModule>
<IfModule itk.c>
AssignUserID user user
</IfModule>
Также надо проверить, что есть сам блок про itk. Если нету -- надо вписать
<IfModule itk.c>
StartServers       1
MinSpareServers    1
MaxSpareServers   5
ServerLimit      110
MaxClients       100
MaxRequestsPerChild  4000
</IfModule>
Ну и подогнать под свои нужды.
Существенные отличия тут в том, что только itk обеспечивает полную работу от указанного юзера, тогда как тот же SuexecUserGroup обеспечивает смену пользователя только для динамики. Статика отдаётся при этом от системного юзера.

Если при смене типа воркера используется ispmanager, надо сделать еще ряд манипуляций.
# perl -p -i -e 's/SuexecUserGroup/AssignUserID/g' /etc/httpd/conf/httpd.conf

В ispmgr.conf надо добавить
Option ApacheMPM

и возможно
ApacheProcName httpd.itk


Линки
http://forum.ispsystem.com/ru/showthread.php?t=17740
http://wiki.firstvds.ru/index.php/Apache_MPM-ITK_на_CentOS_с_ISPmanager
http://ru.ispdoc.com/index.php/Файл_конфигурации_ISPmanager_(ISPmanager)

суббота, 28 апреля 2012 г.

suhosin и логи

Избавляемся от suhosin спама в логи (писалось под фрю, на линях пока не отлаживалось, может потом дополню)

понедельник, 19 марта 2012 г.

FastCGI: socket file descriptor (1103) is larger than FD_SETSIZE (1024)

Была год назад проблема с
(20)Not a directory: FastCGI: failed to connect to server "/home/abc/data/php-bin/php.sh": socket file descriptor (1103) is larger than FD_SETSIZE (1024), you probably need to rebuild Apache with a larger FD_SETSIZE
Сейчас снова всплыла после очередного обновления апача.

Фиксы:
make.conf:
.if ${.CURDIR} == ${PORTSDIR}/www/apache22
WITH_SSL=YES
WITH_SUEXEC=YES
PERF_TUNING=YES
WITH_MODACCEL=YES
HARD_SERVER_LIMIT=4096
#SUEXEC_DOCROOT=/home
SUEXEC_DOCROOT=/
SUEXEC_USERDIR=www
SUEXEC_LOGFILE=/var/log/httpd-suexec.log
SUEXEC_CALLER=www
CFLAGS+=" -DFD_SETSIZE=8192"
CONF_CFLAGS=" -DFD_SETSIZE=8192U"
.endif

В /usr/src/sys/sys/select.h:
...
#define FD_SETSIZE 8192U
...


После этого пересобираем апач и ap22-mod_fastcgi. Поведение с fcgid не проверялось.