Lighttpd + spawn-fcgi | Lighttpd
Попробовал Lighttpd без spawn-fcgi на достаточно нагруженном сервере получил тормоза. :) Апач работал быстрее хотя и памяти потреблял больше.
Пробуем решить проблему динамического управления процессами php-cgi.
Попробовал Lighttpd без spawn-fcgi на достаточно нагруженном сервере получил тормоза. :) Апач работал быстрее хотя и памяти потреблял больше.
Пробуем решить проблему динамического управления процессами php-cgi.
Поскольку апач на одном из моих серверов начал потихоньку сдавать – начинаем искать ему альтернативы.
Начнём с lighttpd – быстрый фронтенд для fcgid который мы настроили ранее. Посмотрим.
Задача следующая – нужно настроить приветствие OGM и DISA на городской многоканальный номер для того чтобы пользователь мог дозвониться по городскому номеру, услышать приветствие (OGM) и набрать внутренний номер абонента в тоновом режиме. То есть получаем не просто многоканальный номер а возможность дозвониться до любого внутреннего абонента, обслуживаемого УАТС.
Задача описана в предыдущем посте: получить доступ к машине под виндой с VNC (или любой другой программой удаленного управления) за шлюзом.
Можно сделать простой проброс портов при помощи kernel NAT/natd на шлюзе (см. предыдущую статью). Но метод не совсем секьюрный поскольку мы просто пробрасываем порт который торчит наружу и доступен любому сканеру.
Гораздо проще получить доступ к серверу VNC через туннель ssh при помощи putty под Windows.
Итак задача тривиальная – надо получить доступ к машине под Windows за натом.
Имеем:
- машину к которой нужно получить доступ под Windows с realVNC (к примеру)
- шлюз на FreeBSD с kernel NAT (ipfw)
- машину с Windows (с маршрутизируемым IP) c realVNC клиентом.
1. Ставим на машину с айпи, скажем, 172.16.5.233, к которой хотим коннектиться, сервер VNC.
2. На шлюзе в правилах фаерволла правим правило NAT:
${fwcmd} nat 1 config if ${LanOut} log redirect_port tcp 172.16.5.233:5900 5900
3. Перезапускаем сеть:
#/etc/netstart
4. Коннектимся к внешнему айпи шлюза на порт 5900 клиентом VNC.
Получаем доступ к виндовой машине за натом.
PS: Конечно порт нужно менять, ограничивать доступ и т.д. и т.п.
Элементарная вещь но поскольку приходится пользоваться нечасто запишу.
Итак как убрать alias с интерфейса не перегружая машину. Суть проблемы в следующем.
Добавляем alias к примеру прописав строчку в rc.conf:
ifconfig_bge1_alias0="inet 10.12.13.154 netmask 255.255.255.255"
И перегружаем интерфейсы:
#/etc/netstart
Делаем ifconfig – видим наш дополнительный айпишник на интерфейсе. Всё ок.
Теперь alias нужно убрать. Правим rc.conf – убираем строку отвечающую за псевдоним на интерфесе, делаем /etc/netstart и видим, что alias на интерфейсе в выводе ifconfig остался, что в принципе, совершенно естественно – в rc.conf у нас строка добавляющая алиас. Никаких инструкций по удалению псевдонима мы не давали.
Убрать alias можно командой:
#ifconfig em0 -alias 10.12.13.154
В продолжение темы про IPB 1.3 – на одном из серверов импортировал правильный дамп в честном cp1251 и получил знаки вопросов вместо кириллицы. Как решить писал ранее – http://adminlog.ru/?p=391
Но часть таблиц (например статусы пользователей) всё равно отображались неверно несмотря на то что всё остальное было в порядке.
Исправил только поставив phpmyadmin и просмотрев данные и структуру таблицы. Кодировка оказалась неверная – дефолтная, как для для всего сервера latin1. При этом в дампе данные в cp1251, чарсет – latin1, и импорт происходит корректно для одних таблиц и некорректно для других.
В общем лечится просто указанием правильной кодировки через phpmyadmin.
Смотрим вывод top
обращаем внимание на размер процессов httpd.
У меня почти с дефолтным набором модулей размер SIZE (это показатель того сколько памяти резервирует под себя процесс) одного процесса httpd равен 82148k.
Задача – сделать процесс апача как можно легче минимальными усилиями. Будем отключать загрузку модулей в конфиге(httpd.conf). Наверное правильнее перекомпилировать апач, но такой вариант позволяет более оперативно управлять конфигурацией сервера, что-то оперативно включать, что-то удалять.
Если у вас на сервере дефолтная кодировка mysql – latin1, а в секции [mysqldump] в файле my.cnf указана кодировка дампа – cp1251 и дамп IPB у вас в правильном cp1251, то после того как мы залили дамп в базу (скажем во время восстановления из дампа) – можем получить знаки вопросов вместо кириллицы. И промучиться с кодировками можно довольно долго…
Лечится правкой файла IPB 1.3 – mySQL.php (лежит в sources/Drivers)
if ( !mysql_select_db($this->obj['sql_database'], $this->connection_id) )
{ echo ("ERROR: Cannot find database ".$this->obj['sql_database']);}
mysql_query("SET NAMES 'cp1251'");
За решение спасибо song’у:
http://www.sysman.ru/index.php?showtopic=7164
Иногда необходимо перенести только структуру базы данных mysql без данных.
Делается это просто (команда в одну строку):
#mysqldump -u use -p --databases base_name --add-drop-table
--force --no-data > /home/userdir/base.sql
Ключевая директива mysqldump: --no-data
Получаем файл с описанием таблиц базы без данных.
ВНИМАНИЕ! Когда вы создали дамп базы и хотите на его основе сделать новую – проверьте нет ли упоминания имени старой базы в дампе (оператор drop database) – при попытке залить структуру в новую базу на той же площадке – потрете старую базу!
Если ipfw во FreeBSD выбрасывает на консоль ошибку:
ipfw: install_state: Too many dynamic rules
Может помочь увеличение переменной net.inet.ip.fw.dyn_max
Смотрим значение переменной:
#sysctl net.inet.ip.fw.dyn_max
Рекомендуют выставлять net.inet.ip.fw.dyn_max=16384
Делаем
#sysctl net.inet.ip.fw.dyn_max=16384
Или прописываем переменную в sysctl.conf
Просмотреть текущее значение можно командой:
#sysctl net.inet.ip.fw.dyn_count
У меня сообщение ipfw: install_state: Too many dynamic rules иногда проскакивает по причине ограничения одновременных подключений с одного айпи на 80 порт.
Есть ещё один совет – просмотреть количество незакрытых соединений:
#netstat -na | grep FIN_WAIT_2 | wc -l
Если количество около 4000 – запретить ожидание:
#sysctl net.inet.ip.fw.dyn_keepalive=0
По умолчанию переменная установлена – в 1.
Иногда полезно просмотреть с какого айпи чаще всего пользователи заходят на Ваш веб сайт. Ну скажем если вы подозреваете что кто-то злоупотребляет количеством одновременных соединений с одной машины.
Парсим лог апача выбираем уникальные айпи и количество хитов.
#sort /var/log/httpd-access.log | awk '{print $1}' | uniq -c | sort -n > /tmp/who
Получаем список – количество вхождений, и айпи.
23 182.24.23.5
24 23.10.234.54
27 129.34.25.333
и т.д.
Кстати ограничить количество соединений на 80 порт можно строкой фаервола (ipfw):
${fwcmd} add allow tcp from any to me 80 limit src-addr 200
После src-addr пишем количество одновременных коннектов с одного айпи.
Настройка сетевого интерфейса в OpenBSD не совсем обычна для администратора, к примеру, FreeBSD. В OpenBSD для каждого интерфейса создается вручную файл с именем – hostname + псевдоним сетевого интерфейса. Например:
#cd /etc/
#touch hostname.em0
В файл прописываем настройки интерфейса:
inet 10.0.0.1 255.255.255.0 NONE
Собственно зачем стал писать об этой в общем тривиальной вещи – недавно на одном из довольно загруженных шлюзов заметил сильные тормоза, большое количество коллизий и потери пакетов.
Делаем:
#netstat -aI em1
И в полях Oerrs
, Ierrs
, Colls
смотрим количество ошибок при приёме передаче и количество коллизий.
Сделал ifconfig и увидел что интерфейс на стомегабитном канале автоселектом перешёл в half-duplex. Скорее всего на другом конце оборудование переходило в состояние полудуплекса и наш шлюз подстроился автоматически, либо были другие причины. В любом случае делаем:
#ifconfig em1 media 100baseTX mediaopt full-duplex
И пишем в файл настройки интерфейса:
inet 10.0.0.1 255.255.255.0 NONE media 100baseTX mediaopt full-duplex
В общем очевидные вещи про которые забываем…
Продублирую описание ошибки из предыдущей статьи потому как в рунете решения не нашёл, а видно что случается…
Если после настройки fcgid под apache22 мы получили при заходе на страницу Internal Server Error, а в логах апача такую строку:
[warn] [client 223.45.3.19] (53)Software caused connection abort: mod_fcgid: error reading
data from FastCGI server, referer: http://server.ru/index.php
[error] [client client 223.45.3.19] Premature end of script headers: index.php, referer:
http://server.ru/
Стоит проверить права на запуск скрипта php-wrapper (или как он у вас называется) и php-cgi. Скрипт должен быть доступен на запуск для пользователя (или группы) под которым работает апач.
Для увеличения производительности веб сервера сегодня ставим fcgid на апач (сервера у меня не настолько загружены чтобы переходить на nginix или lighttpd). Mod_fcgid написан специально для апача второй ветки и является продолжением разработки fastCGI.