nginx-frontend + nginx-backend и потерявшиеся реальные IP посетителей.

Мы говорим о связке nginx+nginx. Те, кто впервые настраивает такую связку наверняка столкнулись с тем, что nginx-backend пишет в лог (и отдает в PHP/Django и прочее, соответственно) IP фронт-энда. Если в апаче это решалось при помощи mod_rpaf, то в nginx’e всё намного проще.

В секцию http {} или в секцию нужного server {} (если вы упрямы — то можете даже в location {} вписать) пишем следующие строки:
set_real_ip_from 8.8.8.8;
real_ip_header X-Real-IP;

Либо:
set_real_ip_from 192.168.0.0/24;
real_ip_header X-Real-IP;

В директиве set_real_ip_from мы указываем серверы, которым мы доверяем тяжкую ношу по передаче нам IP адресов посетителей (если тут указать чужие серверы — то эти самые чужие серверы смогут вас очень красиво и весело dos-ить с адресов вида 0.0.0.1, например).

Директивой real_ip_header мы указываем откуда брать IP. В данном примере нужно на фронте написать proxy_set_header X-Real-IP $remote_addr; в proxy_pass.

оригинал

nginx как reverse proxy

Конфигурация nginx без ssl

server {
    listen 80;
    server_name mydomain.com;

    location / {
	proxy_pass http://127.0.0.1:8080/;
	proxy_set_header   X-Real-IP $remote_addr;
	proxy_set_header   Host $host;
	proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    }																							    
}

Конфигурация nginx с ssl

server {
 listen 80;
 server_name mydomain.com;
 return 301 https://$server_name$request_uri; # enforce https
}

server {
        listen            443;
        server_name       mydomain.com;

        access_log       /var/log/nginx/ssl-access.log;

        ssl                     on;
        ssl_protocols           SSLv3 TLSv1;
        ssl_certificate         /etc/nginx/ssl/cert.pem;
        ssl_certificate_key     /etc/nginx/ssl/cert.key;

        location / {
                proxy_pass            https://127.0.0.1:8080/;
                proxy_redirect        off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For      $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_pass_header Set-Cookie;
        }
}

Сохранение правил iptables в Debian

Рассказ про то, как правильно сохранять и загружать правила iptables в Debian.
Поместить запуск в rc.local это не самое правильное решение, более правильно – это сохранить правила iptables перед выключением, потом перед поднятием сетевого интерфейса загрузить правила, объясню как это сделать:

Для сохранения правил iptables существует команда:

# iptables-save > /etc/ip_rulles.lst

После этого правила будут сохранены в файле (имя произвольное) /etc/ip_rulles.lst
Для загрузки правил соответственно:

# iptables-restore < /etc/ip_rulles.lst

Тут мы подошли к самому интересному, то бишь феншую _:) – в файле настроек сети /etc/network/interfaces в каждый из интерфейсов можно добавлять секции которые будут выполнятся до поднятияпосле поднятиядо отключения и после отключения интерфейса –секции:

Arduino Micro

мне таки пришла по почте Arduino Micro, без лишних проблем и затрат

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

http://www.ebay.com/itm/Leonardo-Pro-Micro-ATmega32U4-Arduino-IDE-1-0-3-Bootloader-replace-Pro-Mini-/310634777706?ssPageName=ADME:L:OC:US:3160

http://www.ebay.com/itm/40PCS-Dupont-wire-jumpercables-20cm-2-54MM-male-to-female-1P-1P-For-Arduino-/181011986500?pt=LH_DefaultDomain_0&hash=item2a2527b844&tfrom=400366982418&tpos=unknow&ttype=price&talgo=origal

http://www.ebay.com/itm/Solderless-MB-102-MB102-Breadboard-830-Tie-Point-PCB-BreadBoard-For-Arduino-/170884671651?pt=LH_DefaultDomain_0&hash=item27c98528a3

под линуксом среду запустить не смог сразу, оказалось она lock файлы не может создать в /var/lock, пока решил это костылем через chmod 777 /var/lock

Linux pipes tips & tricks

Pipe — что это?

Pipe (конвеер) – это однонаправленный канал межпроцессного взаимодействия. Термин был придуман Дугласом Макилроемдля командной оболочки Unix и назван по аналогии с трубопроводом. Конвейеры чаще всего используются в shell-скриптах для связи нескольких команд путем перенаправления вывода одной команды (stdout) на вход (stdin) последующей, используя символ конвеера ‘|’:

cmd1 | cmd2 | .... | cmdN

Например:

$ grep -i “error” ./log | wc -l
43

grep выполняет регистронезависимый поиск строки “error” в файле log, но результат поиска не выводится на экран, а перенаправляется на вход (stdin) команды wc, которая в свою очередь выполняет подсчет количества строк.

Логика

Конвеер обеспечивает асинхронное выполнение команд с использованием буферизации ввода/вывода. Таким образом все команды в конвейере работают параллельно, каждая в своем процессе.

Размер буфера начиная с ядра версии 2.6.11 составляет 65536 байт (64Кб) и равен странице памяти в более старых ядрах. При попытке чтения из пустого буфера процесс чтения блокируется до появления данных. Аналогично при попытке записи в заполненный буфер процесс записи будет заблокирован до освобождения необходимого места.
Важно, что несмотря на то, что конвейер оперирует файловыми дескрипторами потоков ввода/вывода, все операции выполняются в памяти, без нагрузки на диск.
Вся информация, приведенная ниже, касается оболочки bash-4.2 и ядра 3.10.10.

Простой дебаг

Утилита strace позволяет отследить системные вызовы в процессе выполнения программы:

$ strace -f bash -c ‘/bin/echo foo | grep bar’
....
getpid() = 13726                   <– PID основного процесса
...
pipe([3,  4])                       <– системный вызов для создания конвеера
....
clone(....) = 13727                <– подпроцесс для первой команды конвеера (echo)
...
[pid 13727] execve("/bin/echo",  ["/bin/echo",  "foo"],  [/* 61 vars */] 
.....
[pid 13726] clone(....) = 13728    <– подпроцесс для второй команды (grep) создается так же основным процессом
...
[pid 13728] stat("/home/aikikode/bin/grep",   
...

Видно, что для создания конвеера используется системный вызов pipe(), а также, что оба процесса выполняются параллельно в разных потоках.
Читать далее «Linux pipes tips & tricks»

Свое облачное хранилище на основе ownCloud

d2202679b359b8ed7d307d6c648ee8de

ownCloud — система для организации хранения, синхронизации и обмена данными, размещенными на внешних серверах.
В отличии от Dropbox и ему подобных, ownCloud отличается предоставлением пользователю полного контроля над своими данными — информация размещается на подконтрольных пользователю системах. Доступ к данным в ownCloud может осуществляться при помощи web-интерфейса или протокола WebDAV.

Особенности ownCloud

  • Open source;
  • Поддержка шифрования передачи данных;
  • Автоматическое резервное копирование;
  • Поддержка WebDAV позволяет организовать доступ к данным из любых операционных систем;
  • Поддержка синхронизации данных с другими web-приложениями, поддерживающими протокол remoteStorage;
  • Управление пользователями и группами;
  • В web-интерфейс встроены средства для работы с синхронизированной адресной книгой, календарем-планировщиком, коллекцией фотографий, архивом музыкальных произведений;
  • Для ownCloud подготовлен сервер Ampache, что позволяет организовать потоковое вещание музыки;

Читать далее «Свое облачное хранилище на основе ownCloud»

Интересные факты фильма Tron: Legacy

  • Обложка Tron: Legacy почти в точности повторяет обложку первого фильма.
  • Джефф Бриджес — первый актёр в истории кино, появляющийся на экране с компьютерно-омоложенным прототипом.
  • В одной из эпизодических ролей — бармена в клубе End of Line, появляется Стивен Лисбергер, режиссёр первой части.
  • Диктор новостей говорит о том, что Кевин Флинн стал руководить Encom в 1982 году. В этом же году вышел первый фильм «Трон».
  • Клуб «Конец строки», владение Кастора, был построен специально для фильма в павильоне киностудии. В нём помещались сотни статистов, не считая группы Daft Punk на сцене.
  • Участники Daft Punk — Ги-Мануэль де Омем-Кристо (фр. Guy-Manuel de Homem-Christo) и Том Бангальте (фр. Thomas Bangalter) — сыграли диджеев клуба «Конец строки» (фактически камео, в тех же костюмах, в которых они выступают на сцене).
  • Брюс Бокслейтнер играл в обоих фильмах, и исполнял одну и ту же роль защитной программы Трона и сотрудника компании Алана Брэдли.
  • В эпизодической роли в фильме появляется Киллиан Мёрфи. Он играет Эдварда Диллинжера, сына Эда Дилленжера, одного из персонажей фильма 1982 года.
  • Виртуальная реальность, в которой происходит действие фильма, работает под управлением UNIX-подобной ОС SolarOS (намек на Solaris); видно, как главный герой запускает на ней UNIX-команды whoamiunamels и тд.
  • Когда Сэм набирает команды в текстовой консоли, на фоне слева сверху видна программа top, в ней — запущенный графический сервер Xorg (вместе с демоном hald). Первая версия Xorg официально появилась 6 апреля 2004, то есть через 15 лет после того, как компьютер был в последний раз использован.
  • Когда главный герой крадёт и выкладывает в Интернет EncomOS 12, Эд Диллинджер открывает консоль с надписью «ENCOM LINUX CONSOLE».
  • Главный герой пытается получить рут-доступ в систему отца, войдя под учётной записью «backdoor».

снимок6 Читать далее «Интересные факты фильма Tron: Legacy»