Adaptec аппаратный RAID-контроллер

Один из самых распространенных и надежных аппаратных RAID-контроллеров Adaptec. В данной статье я опишу утилиту arcconf которая служит для управления контроллером из командной строки.
ASM (Adaptec Storage Manager) — графическая утилита.

Установка:

yum install -y compat-libstdc++-33
wget http://download.adaptec.com/raid/storage_manager/asm_linux_x64_v7_00_18781.tgz

Распаковываем, берем arconf и копируем ее в /usr/bin
Разрешаем запуск: chmod +x /usr/bin/arcconf

Включение смарт:

smartctl --smart=on --offlineauto=on --saveauto=on /dev/sg1

Состояние RAID можно получить следующей командой:

arcconf getconfig 1 ld

Полезные команды PostgreSQL

В наше время все чаще встречаются БД PostgreSQL, поэтому возможно кому-то будет полезно знать самые часто используемые команды для работы с этой БД.

Сделать дамп БД postgresql:

pg_dump -U postgres -c -O database > database.sql

Залить дамп БД postgresql (обязательно заливать БД под тем пользователем, под которым она доступна, иначе поломаются права):

psql -U dbusername database < database.sql

Просмотреть список всех БД в postgresql:

postgres=# \l

Nginx: просмотр директорий сайта

Иногда необходимо разрешить просмотр каталогов вашего сайта, в nginx для этого существует директива autoindex, по-умолчанию, она установлена в off, поэтому нам потребуется ее включить:

location / {
   root /www/mysite/htdocs;
   autoindex on;
}

Для веб сервера apache запрещает просмотр содержимого каталогов директива (вы можете ее добавить в файл .htaccess, либо в настройки виртуального хоста):

Options -Indexes

Установка приоритетов для процессов в linux: nice

Команду nice можно также использовать для запуска процесса с другим приоритетом. Опция -n (или –adjustment) с положительным значением повышает приоритет, а эта же опция с отрицательным значением – понижает его. Помните, что процесс с наименьшим приоритетом имеет максимальное значение параметра niceness, поэтому увеличение этого значения означает, что процесс становится более дружелюбным по отношению к другим процессам. Заметьте, что, как правило, понижать значение приоритетов процессов может только суперпользователь (root). Другими словами, обычные пользователи могут делать процессы лишь более дружелюбными.

nice -n -5 top                     # Повысить приоритет процесса (/bin/nice)
nice -n 5 top                      # Понизить приоритет процесса (/bin/nice)
nice +5 top                        # Понизить приоритет процесса

PHP: Show current time based on user’s timezone

Example command (take time from files timezone /usr/share/zoneinfo/):

php -r 'printf("\ntimezone:\t%s\ndatetime:\t%s\n".PHP_EOL,date_default_timezone_get(),date("Y-m-d H:i:s T"));date_default_timezone_set("Europe/Moscow");printf("timezone:\t%s\ndatetime:\t%s\n".PHP_EOL,date_default_timezone_get(),date("Y-m-d H:i:s T"));date_default_timezone_set("Europe/Berlin");printf("timezone:\t%s\ndatetime:\t%s\n".PHP_EOL,date_default_timezone_get(),date("Y-m-d H:i:s T"));date_default_timezone_set("Asia/Dubai");printf("timezone:\t%s\ndatetime:\t%s\n".PHP_EOL,date_default_timezone_get(),date("Y-m-d H:i:s T"));'

Output:

timezone:	America/New_York
datetime:	2014-01-28 01:29:25 EST

timezone:	Europe/Moscow
datetime:	2014-01-28 10:29:25 MSK

timezone:	Europe/Berlin
datetime:	2014-01-28 07:29:25 CET

timezone:	Asia/Dubai
datetime:	2014-01-28 10:29:25 GST

Nginx защита от DDoS атак

При несложных атаках, можно защититься средствами сервера, в некоторых случаях это довольно эффективно.
Рассмотрим подробнее способы защиты от DDoS атак с помощью nginx.

Способ №1: Кривой referer

В данном случае прописываем одно условие:

server {
       server_name ….. 

            if ($http_referer !~* ^($|http://|https://) ){
                   return 403;
            }
       }

Сбособ №2: Блокируем атакующих с помощью модуля testcookies в nginx

Необходимо собрать nginx с поддержкой данного модуля, сам модуль с инструкцией по установке и документацией находится здесь: http://kyprizel.github.io/testcookie-nginx-module/
Либо скачать rpm nginx testcookies тут: http://rpms.southbridge.ru/rhel6/stable/x86_64/

How can I restore the MySQL root user’s full privileges?

Stop MySQL server.
Start MySQL server with –skip-grant-tables:

mysqld_safe --skip-grant-tables &

Login (your password not need):

mysql -uroot

Fix privileges:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Create root user, if need;

GRANT ALL ON *.* TO 'root'@'localhost';
GRANT ALL ON *.* TO 'root'@'%';

Update privileges:

FLUSH PRIVILEGES;

That’s all!

Nginx redirect wildcard subdomains to https

В данном примере мы перенаправляем весь трафик http на https. Для домена nagg.ru это работает и ошибок нет.

server {
listen      80;
server_name *.nagg.ru;

rewrite     ^ https://$server_name$request_uri? permanent;
}

Однако, если идет 301-й редирект вайлдкард домена, то мы видим проблему:


https://%A6S2.nagg.ru/

Решение простое, нужно использовать переменную $host вместо $server_name

server {
    listen      80;
    server_name *.nagg.ru;

     return 301 https://$host$request_uri$is_args$args;
}

Nginx redirect to url if image does not exist

Задача: только для статики сделать перенаправление (302 редирект), если файл не был найден.
Самый правильный способ – не использовать ifв данном случае, это может показаться странным, но на практике, с данной задачей лучше справится try_files. Будет выглядеть так:

Вариант №1:

location ~* \.(jpg|jpeg|gif)$ {
    root /home/www/;
    try_files $uri @imgproxy;
    }
<p>location @imgproxy {
        rewrite ^/img/(.*) http://nagg.ru/img/$1;
    }

Вариант №2:

location ~* \.(jpg|jpeg|gif)$ {
     if (!-f $request_filename) {
         rewrite ^/images/(.*) http://nagg.ru/images/$1 break;
     }
    root /home/www/;
    }

Оба варианта рабочие.
Удачи!

Не отправляются письма в 1С-Битрикс

Обычно подобную ошибку можно увидеть при полной проверке сайта, выглядит она так:

Таблица в базе данных B_EVENT хранит очередь отправки почты с сайта. Там же регистрируется результат передачи писем. Если какие-то письма с сайта не были отправлены, возможно, проблема в адресе получателя, параметрах почтового шаблона или в работе почты на сервере в целом.

Как вариант решения проблемы, отключение в конфигурационном файле директивы:

bitrix/php_interface/dbconn.php
#define("BX_CRONTAB_SUPPORT", true);