+2.26
4 читателя, 59 топиков

Защита моих ссылок с привязкой по IP

Самый оптимальный вариан это раздача киношек сервером NginX, для защиты контента его нужно немного настроить, поэтому нужер root доступ к серверу, хотя это может быть и VPS конечно

Решение данной задачи с помощью nginx реализуется просто и очень эффективно. В конфиг nginx в блок server для нашего домена добавляем:
location / {
rewrite ^/video/(w+)/(.+)$ /get.php?hash=&filename= last;
...
}
location /video {
internal;
flv;
}

К сожалению форум выстригает некоторые символы, вообщем в строке реврайта
get.php?hash=«знак доллара»1&filename=«знак доллара»2 last;
«знак доллара» это "$"

Первый локейшен это настройка реврайта NginX, а второй это папка от корня вашего домена в которой лежит видео, то есть вы закрываете внешний доступ к этой папке, теперь NginX будет отдавать файлы с этой папки только по внутреннему запросу (internal)

В корень домена ложим файлик get.php это обработчик flv запросов
Тут есть небольшая проблемка, для псевдостреминга(«перемотки»), плеер приклепляет к ссылке смещение в байтах через знак ?, регулярка в реврайте конфига NginX не может выбрать весь GET запрос, вернее может, но только до знака "?", поэтому я малость извратилась и вставила $url=explode(’?’,$url);…
неуклюже конечно, но зато перемотка в плеере работает
Вот текст обработчика flv запросов get.php
$hash =$_GET['hash'];
$filename = $_GET['filename'];
$ip = md5(getenv(”REMOTE_ADDR”).”key”);
if ($hash == $ip){
$url=$_SERVER['REQUEST_URI'];
$url=explode(’?',$url);
$url=$url[1];
if (isset($url)){$filename .=’?’.$url;}
header(”Content-Type: video/x-flv”);
header(”X-Accel-Redirect:/video/”.$filename);
die();
}
echo “фигу вам! :)”; //Ну или можно клипчик с фигой показать, для наглядности

Например у вас есть файл по адресу
http://flv.site.ru/video/video.flv

дабавляете в ссылку хеш из ip юзера и секретного слова
$ip = md5(getenv(”REMOTE_ADDR”).”key”);
и получаете ссылку уже вида
http://flv.site.ru/video/922f3b5fcb227cfae135299e786edd82/video.flv

когда плеер запросит ссылку, она попадёт к nginx, если вы всё выставили как написанно, то nginx передаст ссылку обработчику, который проверит хешь, если всё правильно то кажем киношку, если ip не совпадает, то кажем фигу!
В принципе в хеше можно что угодно закодировать, например добавить к хешу два байта время жизни ссылки в минутах, ну или девичью фамилию бабушки посетителя проверить можно :))) шутка!
На самом деле обработчику конечно много чего можно поручить, например можно манипулировать скоростями отдачи файла, типа ВИПу на максимальной скорости, остальных бреем до 50 кбайт, докачки, псевдостреминг, мультисесии, ну естествено и NginX нужно настроить под нужные задачи. У меня файлы залиты на раздельные зеркальные диски и обработчик разруливает раздачу файлов так чтобы нагрузка на дисках была примерно одинаковая…

у меня почему то отказывался работать второй локейшен, пока не прописали в нем root путь
root /home/support/www/flv.site.ru;

Свой Windows на Hetzner VServer

Способ установки пиратской копии Windows на Hetzner VServer:
Лицензию можно ставить из образа :) www.hetzner.de/hosting/produkte_rootserver/windows-standard

1. Качаем или создаем образ нужной Windows.
2. Устанавливаем на рабочий ПК QEMU для Windows (Качаем отсюда).
3. Создаем образ диска в QEMU и устанавливаем на него Windows из образа, изменив qemu-x86_64.bat:
qemu-img create windows.img 10240M

Затем:
qemu -cdrom windows_install.iso -boot d windows.img -m 512

Где:
  • windows.img — название файла-образа HDD для Вашей Windows.
  • 10240M — размер виртуального HDD Вашей Windows м мегабайтах.
  • windows_install.iso — файл образа установочного диска Вашей Windows (кидаем в папку с qemu-x86_64.bat).
  • 512 — сколько оперативной памяти выделим под установку
4. В панели управления выбираем rescue mode, перезагружаем VServer, заходим по ssh и создаем 2 раздела NTFS. Лично я использовал cfdisk:
cfdisk /dev/dha

Первый раздел типа primary, второй — extended. Затем:
mkfs.ntfs /dev/hda1

mkfs.ntfs /dev/hda5

5. Первый раздел делаем загрузочным (ставим метку bootable).
6. Загружаем образ диска с установленной (нашей) Windows, созданный QEMU на сервер во второй раздел NTFS. Можно использовать любой sftp-клиент или ftp сервер (использовал WinSCP).
7. Монтируем в системе rescue mode наш образ например в /mnt и копируем файлы установленного нами «своего» Windows на первый (загрузочный) раздел VServer:
mkdir /mnt/new

mkdir /mnt/old

mount -t ntfs-3g /dev/hda1 /mnt/new

modprobe nbd max_part=63

qemu-nbd -c /dev/nbd0 windows.img

partprobe /dev/nbd0

mount /dev/nbd0p1 /mnt/old

cp -Rp /mnt/old/* /mnt/new

8. Устанавливаем в rescue mode утилиту ms-sys:
Качаем тут. Собираем (нужен gettext):
apt-get install gettext

make && make install

9. С помощью данной утилиты исправляем Windows MBR на загрузочном разделе VServer:
/usr/local/bin/ms-sys -w /dev/hda

10. Перезагружаем VServer.
11. С помощью Remote Console дальше настраиваем Windows.

Установка ОС на сервер в ДЦ hetzner

Первым делом авторизуйтесь в панели управления сервером (Robot), нажмите в панели управления кнопку «Rescue», выберите операционную систему «Linux» и архитектуру «64 bit».
Сервер переведется в режим восстановления и на странице выведется пароль для входа на сервер.
Обязательно сохраните пароль у себя на ПК, так как именно он в последствии и будет Вашим root-паролем на сервере.
Для установки ОС нужно будет зайти на сервер с помощью SSH клиента (в нашем примере PUTTY) используя логин root и пароль полученный в панели управления.

Ждем 2 минуты и логинимся на сервер по SSH.
Для запуска процесса инсталлятора Вам необходимо выполнить команду «installimage».
Вы увидете меню, в котором можно выбрать желаемую ОС (например, Debian или CentOS). В подменю Вы сможете выбрать точную версию ОС, например СentOS-56-64-minimal (CentOS 5.6 x64).
После выбора нужной ОС инсталлятор предложит Вам отредактировать стандартный конфиг — нажимаем «OK» (мануал написан под установку стандартной разбивки дисков: SoftRAID1 с разделами /boot — 2GB, swap — 2*RAM, остальное в /).
Откроется текстовый редактор. Здесь нас интересуют только 2 строчки:
1. Находим HOSTNAME и меняем его на нужное сетевое имя сервера, рекомендуется указывать основной домен, например: HOSTNAME server.site.ru
2. Спускаемся ниже и находим пункт про разбивку диска, а точнее «PART swap swap 4G». Здесь меняем «4G» на требуемый объем swap, рекомендуется 2*RAM, т.е. если у Вас на сервере 8 Гб памяти, то ставим значение «16G».

После редактирования нажимаем F10 или щелкаем по значку «Quit» в правом нижнем углу редактора. Редактор предложит Вам сохранить файл, на что отвечаем «Yes».
Далее система спросит у Вас разрешение на форматирование дисков, и тут нужно ответить Yes в обоих случаях.
Примерно через 5-10 минут ОС будет установлена и Вам нужно будет перезагрузить сервер командой reboot.

Ограничение числа подключений с одного IP-адреса в Nginx

Используйте ngx_http_limit_zone_module следующим образом прописав директив limit_zone и limit_conn в конфигурационном файле nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    
    limit_zone   one  $binary_remote_addr  4m;
    limit_conn   one  8;
...

Тем самым мы ограничили число подключений в 8 одновременных коннектов с одного IP-адреса и выделили под это кэш (где будут запоминаться адреса, а в последствии высвобождаться) размером в 4 мегабайта.

Всё что вам нужно знать про память Windows. Читать от начала и до конца. Ну, про 333 можно не читать

Одна простая вещь

Если вы хотите защитить важную директорию от удаления вследствие небрежного обращения с командой rm -rf *, то создайте файл с именем -i, это заставит rm запросить подтверждение:
touch ~/important-directory/-i

Как убить тяжелый MySQL запрос?

1. Зайти на сервер по SSH.
2. Выполнить
$ mysql -u USER -p
USER — это ваш пользователь MySQL
3. Ввести пароль для USER.
4. Выполнить
show processlist;
(не забудьте про точку с запятой в конце)
5. Узнать идентификатор тяжелого запроса.
6. Выполнить
kill query 12345;
где 12345 заменить на идентификатор запроса.

Как узнать, какие модули Apache загружены в текущий момент?

В httpd.conf большой список незакомментированных модулей. Но есть ощущение, что список не полный. Как можно посмотреть полный спсиок модулей, который прямо сейчас загружен (используется) апачем?

Зайти на сервер по SSH и выполнить
apachectl -t -D DUMP_MODULES

Перенаправление на мобильную версию сайта

Создайте файл .htaccess (или добавьте в существующий) с таким содержанием:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} acs [NC,OR]
RewriteCond %{HTTP_USER_AGENT} alav [NC,OR]
RewriteCond %{HTTP_USER_AGENT} alca [NC,OR]
RewriteCond %{HTTP_USER_AGENT} amoi [NC,OR]
RewriteCond %{HTTP_USER_AGENT} audi [NC,OR]
RewriteCond %{HTTP_USER_AGENT} aste [NC,OR]
RewriteCond %{HTTP_USER_AGENT} avan [NC,OR]
RewriteCond %{HTTP_USER_AGENT} benq [NC,OR]
RewriteCond %{HTTP_USER_AGENT} bird [NC,OR]
RewriteCond %{HTTP_USER_AGENT} blac [NC,OR]
RewriteCond %{HTTP_USER_AGENT} blaz [NC,OR]
RewriteCond %{HTTP_USER_AGENT} brew [NC,OR]
RewriteCond %{HTTP_USER_AGENT} cell [NC,OR]
RewriteCond %{HTTP_USER_AGENT} cldc [NC,OR]
RewriteCond %{HTTP_USER_AGENT} cmd- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} dang [NC,OR]
RewriteCond %{HTTP_USER_AGENT} doco [NC,OR]
RewriteCond %{HTTP_USER_AGENT} eric [NC,OR]
RewriteCond %{HTTP_USER_AGENT} hipt [NC,OR]
RewriteCond %{HTTP_USER_AGENT} inno [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ipaq [NC,OR]
RewriteCond %{HTTP_USER_AGENT} java [NC,OR]
RewriteCond %{HTTP_USER_AGENT} jigs [NC,OR]
RewriteCond %{HTTP_USER_AGENT} kddi [NC,OR]
RewriteCond %{HTTP_USER_AGENT} keji [NC,OR]
RewriteCond %{HTTP_USER_AGENT} leno [NC,OR]
RewriteCond %{HTTP_USER_AGENT} lg-c [NC,OR]
RewriteCond %{HTTP_USER_AGENT} lg-d [NC,OR]
RewriteCond %{HTTP_USER_AGENT} lg-g [NC,OR]
RewriteCond %{HTTP_USER_AGENT} lge- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} maui [NC,OR]
RewriteCond %{HTTP_USER_AGENT} maxo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mits [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mmef [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mobi [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mot- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} moto [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mwbp [NC,OR]
RewriteCond %{HTTP_USER_AGENT} nec- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} newt [NC,OR]
RewriteCond %{HTTP_USER_AGENT} noki [NC,OR]
RewriteCond %{HTTP_USER_AGENT} opwv [NC,OR]
RewriteCond %{HTTP_USER_AGENT} palm [NC,OR]
RewriteCond %{HTTP_USER_AGENT} pana [NC,OR]
RewriteCond %{HTTP_USER_AGENT} pant [NC,OR]
RewriteCond %{HTTP_USER_AGENT} pdxg [NC,OR]
RewriteCond %{HTTP_USER_AGENT} phil [NC,OR]
RewriteCond %{HTTP_USER_AGENT} play [NC,OR]
RewriteCond %{HTTP_USER_AGENT} pluc [NC,OR]
RewriteCond %{HTTP_USER_AGENT} port [NC,OR]
RewriteCond %{HTTP_USER_AGENT} prox [NC,OR]
RewriteCond %{HTTP_USER_AGENT} qtek [NC,OR]
RewriteCond %{HTTP_USER_AGENT} qwap [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sage [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sams [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sany [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sch- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sec- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} send [NC,OR]
RewriteCond %{HTTP_USER_AGENT} seri [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sgh- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} shar [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sie- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} siem [NC,OR]
RewriteCond %{HTTP_USER_AGENT} smal [NC,OR]
RewriteCond %{HTTP_USER_AGENT} smar [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sony [NC,OR]
RewriteCond %{HTTP_USER_AGENT} sph- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} symb [NC,OR]
RewriteCond %{HTTP_USER_AGENT} t-mo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} teli [NC,OR]
RewriteCond %{HTTP_USER_AGENT} tim- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} tosh [NC,OR]
RewriteCond %{HTTP_USER_AGENT} tsm- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} upg1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} upsi [NC,OR]
RewriteCond %{HTTP_USER_AGENT} vk-v [NC,OR]
RewriteCond %{HTTP_USER_AGENT} voda [NC,OR]
RewriteCond %{HTTP_USER_AGENT} w3cs [NC,OR]
RewriteCond %{HTTP_USER_AGENT} wap- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} wapa [NC,OR]
RewriteCond %{HTTP_USER_AGENT} wapi [NC,OR]
RewriteCond %{HTTP_USER_AGENT} wapp [NC,OR]
RewriteCond %{HTTP_USER_AGENT} wapr [NC,OR]
RewriteCond %{HTTP_USER_AGENT} webc [NC,OR]
RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]
RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]
RewriteCond %{HTTP_USER_AGENT} xda [NC,OR]
RewriteCond %{HTTP_USER_AGENT} xda- [NC,OR]
RewriteCond %{HTTP_USER_AGENT} up.browser [NC,OR]
RewriteCond %{HTTP_USER_AGENT} up.link [NC,OR]
RewriteCond %{HTTP_USER_AGENT} windows.ce [NC,OR]
RewriteCond %{HTTP_USER_AGENT} iemobile [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mini [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mmp [NC,OR]
RewriteCond %{HTTP_USER_AGENT} symbian [NC,OR]
RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]
RewriteCond %{HTTP_USER_AGENT} wap [NC,OR]
RewriteCond %{HTTP_USER_AGENT} phone [NC,OR]
RewriteCond %{HTTP_USER_AGENT} pocket [NC,OR]
RewriteCond %{HTTP_USER_AGENT} mobile [NC,OR]
RewriteCond %{HTTP_USER_AGENT} android [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Android [NC,OR]
RewriteCond %{HTTP_USER_AGENT} pda [NC,OR]
RewriteCond %{HTTP_USER_AGENT} PPC [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Series60 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Opera.Mini [NC,OR]
RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !ipad [NC]
RewriteCond %{HTTP_USER_AGENT} !iphone [NC]
RewriteCond %{HTTP_USER_AGENT} !iPad [NC]
RewriteCond %{HTTP_USER_AGENT} !iPhone [NC]
RewriteCond %{HTTP_USER_AGENT} !windows.nt [NC]
RewriteCond %{HTTP_USER_AGENT} !bsd [NC]
RewriteCond %{HTTP_USER_AGENT} !x11 [NC]
RewriteCond %{HTTP_USER_AGENT} !unix [NC]
RewriteCond %{HTTP_USER_AGENT} !macos [NC]
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
RewriteCond %{HTTP_USER_AGENT} !playstation [NC]
RewriteCond %{HTTP_USER_AGENT} !google [NC]
RewriteCond %{HTTP_USER_AGENT} !yandex [NC]
RewriteCond %{HTTP_USER_AGENT} !bot [NC]
RewriteCond %{HTTP_USER_AGENT} !libwww [NC]
RewriteCond %{HTTP_USER_AGENT} !msn [NC]
RewriteCond %{HTTP_USER_AGENT} !america [NC]
RewriteCond %{HTTP_USER_AGENT} !avant [NC]
RewriteCond %{HTTP_USER_AGENT} !download [NC]
RewriteCond %{HTTP_USER_AGENT} !fdm [NC]
RewriteCond %{HTTP_USER_AGENT} !maui [NC]
RewriteCond %{HTTP_USER_AGENT} !webmoney [NC]
RewriteCond %{HTTP_USER_AGENT} !windows-media-player [NC]
RewriteRule ^$ http://wap.site.ru/ [L,R=302]