lighttpd + fcgid | Lighttpd
Поскольку апач на одном из моих серверов начал потихоньку сдавать – начинаем искать ему альтернативы.
Начнём с lighttpd – быстрый фронтенд для fcgid который мы настроили ранее. Посмотрим.
Поскольку апач на одном из моих серверов начал потихоньку сдавать – начинаем искать ему альтернативы.
Начнём с 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.
Как настроить ограничение reject_unknown_client я уже писал (см. здесь) но почтовые сервера у которых отсутствует PTR запись в днс зоне не такая редкость. Если нам нужно внести ограничение на действие директивы reject_unknown_client можно создать карту исключений.
Создаем файл с именами, айпи адресами и т.д. Например /usr/local/etc/postfix/client_access
Пишем в него:
@mail.ru OK
193.33.24.24 OK
mail.ru OK
info@server.ru OK
В нашем случае, когда в логе мы видим что отрабатывает правило reject_unknown_client и имя машины у нас unknown[193.33.24.24]
:
postfix/smtpd[99471]: NOQUEUE: reject: RCPT from unknown[193.33.24.24]: 450 Client host
rejected: cannot find your hostname
Важно добавить в карту именно айпишник сервера с которого нам шлют почту:
193.33.24.24 OK
Далее делаем:
#postmap hash:/usr/local/etc/postfix/maps/client_access
Получаем файл client_access.db
Прописываем в набор ограничений в файл main.cf (ставим ссылку на хэш до ограничивающей директивы):
smtpd_recipient_restrictions =
check_client_access hash:/usr/local/etc/postfix/client_access,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_unknown_sender_domain,
reject_unlisted_sender,
reject_unknown_client,
reject_rbl_client sbl-xbl.spamhaus.org
Запятые – не обязательно если директивы идут с новой строки. Обращаем внимание последовательность применения наборов у postfix следующая:
1. smtpd_client_restrictions
2. smtpd_helo_restrictions
3. smtpd_sender_restrictions
4. smtpd_recipient_restrictions
5. smtpd_data_restrictions
То есть в принципе мы могли бы добавить наши директивы в первый набор smtpd_client_restrictions.
Не забываем про директиву:
smtpd_delay_reject = yes
Хотя это поведение postfix по умолчанию, но на всякий случай. Директива smtpd_delay_reject
позволяет нашему серверу получить заголовки письма, и лишь потом применить к ним правила.
Для удобства просмотра лога в реальном времени не забываем про tail
Делаем.
#tail -f /var/log/maillog | grep @server.ru
И просим прислать с вражеского сервера письмо.