Проксирование запросов с помощью Nginx

Например стоит задача спроксировать через свой домен (mydomain.ru) ссылки вида:

https://proxy.domain.com/v1/button?label=pocket&count=horizontal&align=center&v=1&url=*custom link*

На адрес типа http://mydomain.ru/pocket/?url=*custom link*

Для решения данной задачи, опишем локейшен /pocket следующим образом:


location /pocket {
	set $args ?label=pocket&count=horizontal&align=center&v=1&$args;
        proxy_pass https://proxy.domain.com/v1/button;
        proxy_redirect off;
        proxy_set_header Host proxy.domain.com;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_read_timeout 1800;
        proxy_buffer_size 16k;
        proxy_buffers 32 16k;

    }

PHP:PEAR Non-static method Mail::factory() should not be called statically

Нечасто встретишь, но многие до сих пор пользуются отправкой почты с помощью PHP:PEAR, а как результат, иногда получают вот такие ошибки (например после обновления версии PHP):

Strict Standards: Non-static method Mail::factory() should not be called statically in /path/XXXXX.php on line 111

Все можно поправить, пускай руками, но зато метод рабочий. Приступаем:

vi /usr/share/pear/Mail.php + 74

- function &factory($driver, $params = array())
+ static function &factory($driver, $params = array())

vi /usr/share/pear/Mail.php +253

- $addresses = Mail_RFC822::parseAddressList($recipients, 'localhost', false);
+ $Mail_RFC822 = new Mail_RFC822();
+ $addresses = $Mail_RFC822->parseAddressList($recipients, 'localhost', false);

vi /usr/share/pear/PEAR.php +250

- function isError($data, $code = null)
+ static function isError($data, $code = null)

Проверяем и теперь все работает как нужно.
Удачи Вам и используйте функцию PHP mail.

Mac OS error: git-credential-osxkeychain died of signal 11

Установка клиента git под MacOS описывалась в смежной статье: http://nagg.ru/2014/08/ustanovka-git-klienta-mac-os-x-lion/
В данной статье я хочу разобрать ошибки при работе git-клиента:

$ git pull
error: git-credential-osxkeychain died of signal 11
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.

Для решения ошибки, нам потребуется внести следующие правки:

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain
git config --global credential.helper osxkeychain

Теперь проверяем и видим что ошибка исчезла:

$ git pull
Already up-to-date.

Nginx защита от DDoS атак – продолжение

Обычно атака ботов происходит на любой участок сайта, обычно это сотни и тысячи различных IP.
Как уже рассказывалось в первой части статьи, защититься можно ограничив подключение к сайту для пустых реферер, это самый простой способ.
Что если реферер у ботов оформлен корректно? Вида: «http://mgg23.ru», «http://trew5un.com» и т.п. Выход есть, напишем правило блокировки такий ботов по следующему принципу – в реферер присутствуют буквы и цифры, конечно, оставлять такое правило на постоянной основе нельзя, но на время атаки – это самых простой выход.

server {

    # DDoS Protect from bad referer
    if ($http_referer ~* (\d\w\d|\d\d|\w\w\d\w|\d\w\w|\w\d\.)) {
        return 403;
    }

Передача HTTPS приложению в связке Nginx Apache

Иногда при работе по защищенному HTTPS-соединению, приложение не может определить тип соединения.
Для исправления ошибки, нужно внести правки в конфигурацию Nginx и Apache:

Nginx:

location / {

        proxy_set_header X-Forwarded-Proto $scheme;

    }

Apache:

<VirtualHost *>

    SetEnvIf X-Forwarded-Proto https HTTPS=on

TCP: time wait bucket table overflow (CTXXX)

Если Вы используете виртуализацию OpenVZ и возникает данная ошибка, Вам нужно поправить параметр tcp_max_tw_buckets_ub.

Проверяем и сохраняем текущие значения:

# sysctl -a | grep tw

net.ipv4.tcp_max_tw_buckets = 720000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_kmem_fraction = 384
net.ipv4.tcp_max_tw_buckets_ub = 16536

Для решения проблемы увеличиваем tcp_max_tw_buckets_ub:

# echo 65536 > /proc/sys/net/ipv4/tcp_max_tw_buckets_ub

Проверяем что изменения применились:

# sysctl -a | grep tw

net.ipv4.tcp_max_tw_buckets = 720000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_kmem_fraction = 384
net.ipv4.tcp_max_tw_buckets_ub = 65536

Установка git-клиента Mac OS X Lion

Заходим на сайт гугла и скачиваем самую свежую версию:


http://code.google.com/p/git-osx-installer/downloads/list

После установки, открываем Терминал и правим переменные:

$ vi ~/.bash_profile
export PATH=$PATH:/usr/local/git/bin/

Применяем изменения:

$ source ~/.bash_profile

Проверяем:

$ git --version
git version 1.8.4.2

Supermicro IPMI – настройка и полезные команды

Для работы с IPMI Вы можете использовать на свое усмотрение утилиты: ipmicfg, ipmitool.
Сначала рекомендую установить ipmicfg, так как утилита может сбросить пароль к заводским установкам и менять многие параметры, используя nехнологию IPMI.

Дистрибутив утилиты для различных ОС можно скачать с оффициального сайта: ftp://ftp.supermicro.com/utility/IPMICFG/

Далее, установка под CentOS по шагам:

wget ftp://ftp.supermicro.com/utility/IPMICFG//ipmicfg_1.14.3_20130725.zip
unzip ipmicfg_1.14.3_20130725.zip

Asterisk – установка Fail2Ban

Очень часто мы сталкиваемся с атаками на SIP-серверы, особенно когда сервер виден их сети интернет, поэтому я написал статью-заметку, с целью создать первую линию в защите Вашей IP ATC.

Устанавливаем необходимые пакеты:

 yum install -y fail2ban iptables

Настраиваем конфигурационный файл /etc/fail2ban/fail2ban.conf:

[Definition]

loglevel = 3
logtarget = SYSLOG

socket = /var/run/fail2ban/fail2ban.sock
pidfile = /var/run/fail2ban/fail2ban.pid

Правим конфиг /etc/fail2ban/jail.conf (добавим правило для сервиса asterisk):

[DEFAULT]

ignoreip = 127.0.0.1/8

bantime  = 600
findtime = 600
maxretry = 3

backend = auto
usedns  = warn

# Monitoring settings
[asterisk-iptables]

enabled  = true
filter   = asterisk
action   = iptables-allports[name=ASTERISK, protocol=all]
logpath  = /var/log/asterisk/fail2ban
maxretry = 3
bantime  = 259200

ImageMagick и высокая нагрузка при обработке изображений

При обработке изображений с помощью ImageMagick CPU загружен на 100%, это баг в основных сборках, собранных с параметром –enable-openmp.

Проверяем (OpenMP означает что версия собрана с –enable-openmp):

convert --version
Version: ImageMagick 6.8.7-4 2013-11-02 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: DPC OpenMP

Для решения проблемы, нужно собрать ImageMagick с опцией –disable-openmp, в результате вывод должен быть без OpenMP, также потребуется перезапустить все Ваши воркеры:

convert --version
Version: ImageMagick 6.8.9-0 Q16 x86_64 2014-06-25 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules

Версию, собранную с опцией –disable-openmp для CentOs 6 можно найти в репозитарии: ImageMagick-last-6.8.9.0-2