• Быстрый переход
  • Рубрики
  • Свежие записи
  • Метки
  • Архивы
  • Реклама 1
  • Реклама 2
  • Рейтинг@Mail.ru

    Добро пожаловать! Ваш IP-адрес: ec2-54-80-33-183.compute-1.amazonaws.com

    OS FreeBSD

    Сборка Nginx с модулями nginx-upload-module nginx-rtmp-module

    Для начало скачиваем последнюю стабильную версию nginx:

    wget http://nginx.org/download/nginx-1.4.6.tar.gz
    tar xzf nginx-1.4.6.tar.gz

    Далее с github скачиваем нужные нам модули:

    git clone https://github.com/yaoweibin/nginx_cross_origin_module.git
    git clone https://github.com/arut/nginx-rtmp-module.git
    git clone -b 2.2 git://github.com/vkholodkov/nginx-upload-module.git
    git clone https://github.com/masterzen/nginx-upload-progress-module.git

    Устонавливаем библиотеку libpcre3-dev:

     apt-get install libpcre3-dev

    после:

    cd nginx-1.4.6/

    конфигурируем:

    ./configure --add-module=../nginx-upload-module --add-module=../nginx-upload-progress-module --add-module=../nginx_cross_origin_module --add-module=../nginx-rtmp-module --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --user=nginx --group=nginx --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-file-aio

    принеобходимости можно еще добавить доболнительные параметры!

    make
    make install
    
    Проверяем что у нас получилось:
    root@root:~# nginx -V
    nginx version: nginx/1.4.6
    built by gcc 4.7.2 (Debian 4.7.2-5)
    TLS SNI support enabled
    configure arguments: --add-module=../nginx-upload-module --add-module=../nginx-upload-progress-module --add-module=../nginx_cross_origin_module --add-module=../nginx-rtmp-module --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --user=nginx --group=nginx --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-file-aio

    Nginx большие cookies и ошибка сервера 400 Bad Request

    Не давно наткнулся на такую проблему. Нужно было просмотреть превью (Preview), на вордпрессе, в котором был относительно большой объем информации, который необходимо хранить в куках. После чего я получаю ошибка сервера 400 Bad Request
    Как оказывается, при увеличении размеров cookie, заголовок запроса клиента не уместился в буфер для чтения, размер которого у nginx’а по умолчанию составляет 1K.

    Директива: client_header_buffer_size
    синтаксис: client_header_buffer_size размер;
    умолчание: client_header_buffer_size 1k;
    контекст: http, server

    Задаёт размер буфера для чтения заголовка запроса клиента. Для большинства запросов достаточно буфера размером в 1K байт. Однако если в запросе есть длинные cookies, или же запрос пришёл от WAP-клиента, то он может не поместиться в 1K. Поэтому, если строка запроса или поле заголовка запроса не помещаются полностью в этот буфер, то выделяются буферы большего размера, задаваемые директивой large_client_header_buffers.

    Директива: large_client_header_buffers
    синтаксис: large_client_header_buffers число размер;
    умолчание: large_client_header_buffer 4 8k;
    контекст: http, server

    Задаёт максимальное число и размер буферов для чтения большого заголовка запроса клиента. Строка запроса не должна превышать размера одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не должно превышать размера одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request). Буферы выделяются только по мере необходимости. По умолчанию размер одного буфера равен 8K байт. Если по окончании обработки запроса соединение переходит в состояние keep-alive, эти буферы освобождаются.
    Поэтому, при возникновении 400 ошибки предположительно по описанной причине, увеличиваем буферы чтения (значения подбираются по необходимости). Напр:

    server {
    ...
    client_header_buffer_size 4k;
    large_client_header_buffers 8 16k;
    ...
    }

    Также возможно понадобится отредактировать директивы proxy_buffers и proxy_buffer_size

    nginx: Защита файлов от прямых ссылок ngx_http_referer_module

    Часто, при цитировании материала с вашего сайта, адреса изображений или загружаемых файлов не изменяют. Возникает нагрузка на ваш сервер, но при этом посетитель даже не знает, откуда загружается рисунок и не видит вашего сайта.

    Наиболее гуманно будет выдавать посетителю другого сайта изображение с текстом "Это изображение доступно только на сайте www.example.com". Если ссылаются на загружаемый файл — перенаправлять на страницу загрузок вашего сайта.

    Сделать это можно с помощью модуля ngx_http_referer_module: он будет анализировать поле "Referer" (ссылающаяся страница) в запросе посетителя и сравнивать со списком разрешенных доменов. Конечно, посетитель может подделать это поле в своем запросе, но это не так просто и обычно этого никто не делает.

    Не стоит забывать, что некоторые сервисы могут использовать ваши картинки, принося вам пользу в виде трафика. Например, поиск по изображениям Google. Если вы в этом заинтересованы, обязательно включите домены таких сервисов в список разрешенных.

    Кроме того, не стоит блокировать запросы без поля "Referer", очень часто за ними скрываются посетители вашего сайта с необычными браузерами или нестандартными настройками.

    Для изображений:

    server {
    ...

    location ~ \.(jpg|gif|png)$ {
    valid_referers none blocked server_names ~\.google\. images.yandex.ru;
    if ($invalid_referer) {
    rewrite ^(.*)$ /img/invalid_referer.png redirect;
    }
    }
    }

    Подробнее...

    nginx: Ограничение доступа по паролю

    Используя директивы auth_basic и auth_basic_user_file, можно ограничить доступ ко всему серверу, сайту, каталогу или любому URL по маске, с авторизацией по протоколу "HTTP Basic Authentication".

    Формат файла со списком логинов и паролей такой же, как в Apache. Создание такого файла утилитой htpasswd.
    Добавьте в нужную секцию файла конфигурации две директивы:

    location /admin/ {
    auth_basic "Admin Zone";
    auth_basic_user_file /var/www/example.com/admin/.htpasswd;
    }

    auth_basic задает имя ресурса (realm), которое будет показано посетителю в окне ввода пароля. auth_basic_user_file — путь к файлу с логинами и паролями. Данные из файла считываются заново при каждом обращении посетителя к ресурсу.
    Если необходимо, чтобы файл с паролями находился в каталоге, доступном посетителям, скрыть его от всех можно следующим кодом:

    server {
    listen 80;
    server_name example.com;
    location / {
    ...
    }
    location ~ /\.ht {
    deny all;
    }
    }

    Этот код скроет от посетителя все файлы, начинающиеся с ".ht"

    Борьба с DDoS-атакой с помощью (D)DoS Deflate

    Очень часто по чьему-то злому умыслу или по случайности, ваш сервис начинает испытывать нагрузку свыше той, на которую он рассчитан. Зачастую в таких случаях ваши постоянные клиенты начинают страдать от отказа в обсушивании на вашем ресурсе. Это может проявляться как полным отсутствием ответа от вашего сервиса, так и неприемлемо медленной его работой. Данную ситуацию можно оценивать как атаку на ваш сервис. Данный вид атак называется DoS — Denial of Service(если атака производится с одного адреса), либо DDoS — Distributed Denial of Service (если атака производится с множества адресов). В данной статье мы расскажем как настроить систему которая позволит защищать ваш сервис от подобного вида атак.
    1. Подтверждение атаки на сервер
    При DDoS-атаке (в нашем случае на 80 порт, который открыт на ресурсах, где размещены проекты, к которым нужен доступ по http) наблюдается повышение открытых и ожидающих закрытия соединений (до нескольких тысяч или десятков тысяч), возрастает количество пакетов на сетевом интерфейсе. В случае DDoS-атаки на 80 порт увеличивается общее число процессов на сервере, количество процессов apache (httpd), сайты начинают долго отвечать или не отвечать вовсе, на сервере используется большее число ресурсов (возрастает LA сервера, использование CPU и RAM достигает 100%). В таком случае нужно проверить общее количество соединений с сервером командой netstat:
    netstat -n -p | awk '{print $6}'|awk -F: '{print $1}' | sort -n | uniq -c | sort -nr | head -n10

    вывод команды в случае DDoS-а будет приблизительно таким:
    8580 LAST_ACK
    340 ESTABLISHED
    251 SYN_RECV
    157 FIN_WAIT1
    28 CONNECTED
    7 CLOSING
    6 TIME_WAIT
    3 FIN_WAIT2
    3 CLOSE_WAIT

    Подробнее...

    Импорт и экспорт DB (База Данных) mysql при помощи консоли

    Импорт базы данных:

    mysql -uпользователь -p база < db.sql

    Экспорт: mysqldump -uпользователь -p база > db.sql

    Значения «пользователь» и «база» замените на имя пользователя и имя базы данных соответственно.

    Экспорт базы данных:

    Для экспорта нескольких баз данных можно воспользоваться вот такой командой:

    mysqldump -uroot -p -B база1 база2 база3 > db.sql

    Где «база1», «база2», «база3» — имена нужных для копирования баз данных, а «-B» — указание, что производится копирование нескольких баз.

    Также утилита mysqldump позволяет сделать экспорт всех баз на сервере в один файл sql. Это делает команда:

    mysqldump -uroot -p -A > alldb.sql

    Некоторые полезности в управлении FreeBSD

    Очередность запуска сервисов FreeBSD.

    Посмотреть очередность запуска сервисов в freebsd.

    #rcorder /etc/rc.d/* /usr/local/etc/rc.d/*

    Запустить или остановить службу можно скриптом, который лежит в папке /etc/rc.d/ .
    сетевые службы. Система FreeBSD 5.x/6.x скрипт для работы с сетевыми интерфейсами -> netif . Доступен только для рута (root):

    Стартуем FreeBSD сетевую службу:

    # /etc/rc.d/netif start

    Остановить FreeBSD сетевую службу:

    # /etc/rc.d/netif stop

    restart FreeBSD сетевую службу:

    # /etc/rc.d/netif restart

    То-же самое при помощи ifconfig (если много сетевух и нет необходимости "ложить" все сетевые интерфейсы)
    положить сетевуху (NIC) внаглую:

    # ifconfig network-interface down

    Запустить сетевой интерфейс (NIC):

    # ifconfig network-interface up

    Просмотреть список отключенных интерфейсов:

    # ifconfig -d

    Список включенных сетевух:

    # ifconfig -u

    FreeBSD обновить / перезагрузить таблицу маршрутизации (routing)
    Обязательно надо обновить "routing table" после перезагрузки сетевой службы:

    # /etc/rc.d/routing restart

    Сделать все через ssh подключение:
    Надо ввести команды как одну. Тогда все выполнится в фоновом режиме и никаких проблем с боевым серваком не возникнет:

    # /etc/rc.d/networking restart && /etc/rc.d/routing restart

    Подробнее...

    Полезные команды для мониторинга FreeBSD

    top -mio – показать I/O по процессам
    iostat -d -w1 -c7 – нагрузка на диски
    gstat – нагрузка на диски
    top -S – показать системные процессы в топе (по дефолту они не показываются)
    netstat -inb – передано через интерфейс в байтах
    netstat -i ошибки на интерфейсах
    df -H – количество свободного места
    df -i – количество свободных инодов
    diskinfo -t da0 – тест на дисковую производительность
    tunefs -p /var/ – информация о настройках файловой системы
    vmstat -z чего не хватает
    freecolor – очень симпатичная утилита для мониторинга использования памяти (ставится из портов)
    vmstat -i прерывания по устройствам
    systat -ifstat – интенсивность передачи трафика
    sysctl kern.ipc.numopensockets – количество открытых сокетов
    netstat -w1 – количество пакетов/ошибок/байт на интерфейсе

    Автор admin, 22 апреля 2013 | OS FreeBSD, Новости | 1 коммент.

    Пошаговая установка FreeBSD 9.x и выше

    Установка 9 версии FreeBSD немного отличается от предыдущих версий! И так немного чего нового в 9 версии:

    FreeBSD 9.0 выпущена 12 января 2012 года. Основные изменения:

    • Переход на новый модульный инсталлятор BSDInstall
    • Интеграция в систему LLVM 3.0/Clang 3.0 для постепенной замены устаревшей версии GCC 4.2.2 в базовой системе
    • В DTrace реализованы модули для трассировки 32-разрядных системных вызовов linux32 и freebsd32 на 64-разрядной платформе FreeBSD [amd64]
    • Новая реализация программного RAID graid для замены устаревшей подсистемы ataraid
    • Дисковая подсистема ATA/SATA по умолчанию заменена на реализацию на базе CAM (Common Access Method)
    • Интеграция системы репликации устройств хранения данных HAST
    • Для UFS2 техника мягких обновлений (Soft Updates) дополнена технологией журналирования для быстрого восстановления файловой системы после сбоев
    • Файловая система UFS2 стала поддерживать операцию TRIM для SSD
    • Обновление ZFS до версии 28
    • Начальная поддержка архитектуры NUMA в подсистемах управления памятью
    • Интеграция в базовую систему Infiniband-стека OFED (OpenFabrics Enterprise Distribution)
    • Добавлены новые 10Gb Ethernet-драйверы
    • Универсальный USB-драйвер с поддержкой протоколов USB 3.0/2.0/1.1/1.0
    • Обеспечена поддержка пяти новых алгоритмов для контроля перегрузки в TCP-стеке
    • Обеспечена возможность использования только IPv6 в TCP-стеке базовой системы и в портированных приложениях
    • Поддержка сетевого протокола NFSv4
    • Новый механизм изоляции выполнения приложений Capsicum
    • Реализация интерфейса управления ресурсами RCTL (Hierarchical Resource Limits) в том числе и для Jail
    • Графические среды GNOME версии 2.32.1, KDE версии 4.7.3
    • Возможен запуск и работа FreeBSD на игровых приставках Sony PlayStation 3

    FreeBSD 9.1 выпущена 31 декабря 2012 года. Основные отличия от FreeBSD 9.0:

    • новые драйвера Intel GPU с поддержкой GEM/KMS
    • netmap(4) быстрое пользовательское пространство пакетов системы ввода/вывода
    • в ZFS улучшения от проекта illumos
    • CAM Target Layer (CTL), диск и процессор эмулируются подсистемой
    • выборочный новый C++11 стек включающий LLVM libc++ и libcxxrt
    • Jail devfs, nullfs, zfs поддержка монтирования и конфигурации файлов
    • POSIX2008 расширение локальной поддержки, включающие совместимость с расширениями Darwin
    • oce(4) драйвера для Emulex OneConnect 10Gbit сетевых карт
    • sfxge(4) драйвера для 10Gb сетевых адаптеров построенных на контроллере Solarflare SFC9000
    • улучшение Xen Paravirtualized Backend Ethernet Driver (netback)
    • hpt27xx(4) драйвера для HighPoint RocketRAID 27xx-based SAS 6Gb/s HBA
    • улучшение многоцелевого класса GEOM
    • класс raid в GEOM включен по умолчания для поддержки программного RAID в замен устаревшего ataraid(8)
    • поддержка ядром AVX FPU расширений многочисленные улучшения в аппаратной поддержке разгрузки IPv6

    Подробнее...

    Утилита dd и ее использование в FreeBSD

    Сегодня я рассмотрю одну из древних утилит Unix составляющую, но при этом достаточно гибкую чтобы не утерять свою актуальность не смотря не на что. Утилита dd –  она есть в составе многих Unix систем к примеру FreeBSD, Linux, NetBSD и других.

    Работает она просто – копирует все что идет на стандартный ввод на стандартный вывод. Но как я уже говорил – она более чем универсальна, перейдем к практике.

    Наша задача сделаем образ одного из дисков нашей системы, к примеру раздел /var/, делаем это так :

    it-admin#/>df -m
    Filesystem 1M-blocks Used Avail Capacity Mounted on
    /dev/ad0s1a 3872 315 3247 9% /
    devfs 0 0 0 100% /dev
    /dev/ad0s1e 13037 8664 3330 72% /usr
    /dev/ad0s1d 965 339 548 38% /var
    devfs 0 0 0 100% /var/named/dev
    it-admin#/>dd if=/dev/ad0s1d of=var.img
    2048000+0 records in
    2048000+0 records out
    1048576000 bytes transferred in 681.831838 secs (1537881 bytes/sec)
    it-admin#/>

    Теперь мы обладаем копией раздела /var/ в файле var.img

    it-admin#/>ls -la var.img
    -rw-r–r–  1 root  wheel  1048576000 Dec 17 10:21 var.img
    it-admin#/>

    Подробнее...