Недавно, по работе, пришлось столкнуться с сайтом fbi.gov. Пароль, который выдали почему-то не прошел, и каково-же было мое удивление, когда после 3-ей попытки я увидел это

25.19
Рейтинг
Nginx *
Веб-сервер и почтовый прокси-сервер
Сначала показывать
Порог рейтинга
Уровень сложности
MySQL в NGINX: использование блокирующих библиотек в неблокирующем сервере
7 мин
8.6KКак известно, при разработке высоконагруженных серверов часто применяется событийная модель работы с сокетами. Ключевым компонентом системы при этом является epoll (во FreeBSD и Windows есть свои решения, но остановимся на Линуксе). Функция epoll_wait, будучи единственным блокирующим вызовом, возвращает нам информацию обо всех сетевых событиях, которые нас интересуют. Подобным образом, конечно, работает и всем известный сервер NGINX.
Событийная модель программирования делает код весьма своеобразным, как будто выворачивает его наизнанку. Но эта проблема не так страшна. Есть другая проблема — использование в событийно-ориентированном коде существующих библиотек, изначально не предназначенных для него. Если подобная библиотека делает блокирующие вызовы (например, connect, recv и т.д.), вся событийная модель может потерять смысл т.к. окончания одного такого вызова будут ждать все остальные клиенты, что совершенно неприемлемо, если вы пишете серьезный продукт.
Событийная модель программирования делает код весьма своеобразным, как будто выворачивает его наизнанку. Но эта проблема не так страшна. Есть другая проблема — использование в событийно-ориентированном коде существующих библиотек, изначально не предназначенных для него. Если подобная библиотека делает блокирующие вызовы (например, connect, recv и т.д.), вся событийная модель может потерять смысл т.к. окончания одного такого вызова будут ждать все остальные клиенты, что совершенно неприемлемо, если вы пишете серьезный продукт.
+61
Генерация уникального идентификатора пользователя средствами Nginx
5 мин
15KПриветствую Вас, хабрачитатели!
Расскажу об одной задачке, которая встала передо мной, и как я ее решил.
Сразу оговорюсь — часовой поиск в G и в Я удовлетворяющего результата не принес, но за следующий час было реализовано собственное решение.
Все это пока не более чем эксперимент — есть белые пятна как в идеи, так и в реализации, на данном этапе нужно понять жить или не жить.
Суть задачи сводилась к тому, что мне требовалось уникально идентифицировать посетителя в независимости от природы и вероисповедания компонентов системы (Web-проект). Причем сделать это максимально просто, быстро и без большого оверхеда по быстродействию.
Важно заметить, что авторизация пользователя по логину/паролю или еще как не производится.
В качестве веб-сервера и первичного балансировщика нагрузки у меня имеется Nginx.
В моей системе для php используетcя php-fpm через fastcgi, так же через fastcgi работает c++ сервер бизнес логики.
Расскажу об одной задачке, которая встала передо мной, и как я ее решил.
Сразу оговорюсь — часовой поиск в G и в Я удовлетворяющего результата не принес, но за следующий час было реализовано собственное решение.
Все это пока не более чем эксперимент — есть белые пятна как в идеи, так и в реализации, на данном этапе нужно понять жить или не жить.
Суть задачи сводилась к тому, что мне требовалось уникально идентифицировать посетителя в независимости от природы и вероисповедания компонентов системы (Web-проект). Причем сделать это максимально просто, быстро и без большого оверхеда по быстродействию.
Важно заметить, что авторизация пользователя по логину/паролю или еще как не производится.
В качестве веб-сервера и первичного балансировщика нагрузки у меня имеется Nginx.
В моей системе для php используетcя php-fpm через fastcgi, так же через fastcgi работает c++ сервер бизнес логики.
+34
Nginx обогнал Microsoft IIS и вышел на второе место по активным сайтам
1 мин
4.1KВ свежей статистике Netcraft за январь 2012 произошло замечательное событие: веб-сервер nginx наконец-то обогнал Microsoft IIS и вышел на второе место в интернете среди активных сайтов (то есть сайтах с уникальным контентом, сделанных не по шаблонам).

Примечательно, что в этой статистике все основные конкуренты потеряли позиции, и только nginx прибавил по сравнению с декабрём 2011 года.

Разработчик | Декабрь 2011 | Доля | Январь 2012 | Доля | Изменение |
Apache | 102 005 032 | 58,21% | 105 684 049 | 57,93% | -0,28 |
nginx | 20 342 324 | 11,61% | 22 221 514 | 12,18% | 0,57 |
Microsoft | 21 572 870 | 12,31% | 22 142 114 | 12,14% | -0,17 |
14 240 979 | 8,13% | 14 412 926 | 7,90% | -0,23 |
+50
Четыре зловещие шестнадцатеричные цифры на страницах ошибок — и как преодолеть их
2 мин
3KТуториал
С этим загадочным глюком вы столкнётесь только при сочетании сразу нескольких условий.
Ваш сайт обслуживается Apache Server. (Это условие выполнить нетрудно: сейчас Apache — один из наиболее популярных вебосерверов.)
Ваш сайт также снабжён кэширующим сервером nginx. (Закупаяshared-хостинг для небольшого сайта, вы можете до последней минуты ничего и не знать о том, что хостинговый провайдер, заботясь об экономии ресурсов, навесил nginx. Если, конечно, не полезете читать заголовки HTTP-отклика.)
Вы ставите какой-нибудь движок, работающий на PHP. (Например, CMS Drupal.Или, например, вики MediaWiki.)
После этого вам хочется посмотреть, как выглядят страницы ошибок №404, создаваемые движком. Вы скармливаете в вики адрес несуществующей статьи, или скармливаете в Drupal адрес несуществующей страницы.
И тогда приходят они. Четыре шестнадцатеричные цифры. Они появляются в коде страницы с описанием ошибки 404 (а также и 403), они стоят в этом кодеперед «<!DOCTYPE», и поэтому многие браузеры (например, Firefox) стремятся отобразить их выше всего остального текста страницы — а значит, заметно разламывают дизайн, задуманный создателями CMS или вики:
В чём же дело?

Ваш сайт также снабжён кэширующим сервером nginx. (Закупая
Вы ставите какой-нибудь движок, работающий на PHP. (Например, CMS Drupal.
После этого вам хочется посмотреть, как выглядят страницы ошибок №404, создаваемые движком. Вы скармливаете в вики адрес несуществующей статьи, или скармливаете в Drupal адрес несуществующей страницы.
И тогда приходят они. Четыре шестнадцатеричные цифры. Они появляются в коде страницы с описанием ошибки 404 (а также и 403), они стоят в этом коде
3340
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<title> … … …
В чём же дело?
+72
Модуль для получения скриншотов из видео — nginx-video-thumbextractor-module
2 мин
3.8KПолучаем скриншоты из видео через NGINX средствами ImageMagick и ffmpeg
Совсем недавно появился новый модуль nginx-video-thumbextractor-module
Хотел опубликовать как ссылку но как видно топиков-ссылок больше нет. да и как перевод уже не подходит ибо добавил отсебятины.
В любом случае считаю что стоит поделиться этим замечательным модулем с Хабровчанами.
В статусе указано что он готов для продакшена, что очень радует.
+26
Кеширующий прокси-сервер на nginx. Хитрая конфигурация
7 мин
40KНа Хабре уже есть несколько описаний Nginx, но, думаю, моя конфигурация тоже будет интересна.
Ситуация выглядит следующим образом: есть размещённый на нескольких серверах IIS сайт (интернет-магазин), перед ним расположен балансировщик. Между ними решено установить nginx для уменьшения нагрузки на IIS.
Основная масса динамического контента отображается Ajax-ом, так что кеширование страниц каталога товаров вполне безопасно. Однако на них могут быть отзывы о товаре, за которые можно проголосовать — совсем как на Хабре, что тоже надо учесть.
Плюс к этому хочется поддерживать валидность популярных страниц в кеше автоматически.
Ситуация выглядит следующим образом: есть размещённый на нескольких серверах IIS сайт (интернет-магазин), перед ним расположен балансировщик. Между ними решено установить nginx для уменьшения нагрузки на IIS.
Основная масса динамического контента отображается Ajax-ом, так что кеширование страниц каталога товаров вполне безопасно. Однако на них могут быть отзывы о товаре, за которые можно проголосовать — совсем как на Хабре, что тоже надо учесть.
Плюс к этому хочется поддерживать валидность популярных страниц в кеше автоматически.
+67
Проксируем Cookies на Nginx при помощи модуля lua-nginx
4 мин
31K
Я уже писал о том, как с помощью Nginx трансформировать контент на лету. С момента публикации статьи на базе описанного метода запущен и развивается реальный проект ecommerce. Помимо перевода и трансформации также реализован и SEO рерайт по заветам руководства для начинающих от Google.
Однако, до полной победы изделия русских программистов над заграничным контентом, не хватало одной небольшой, но очень важной вещи — проксирования Cookies.
В чем суть проблемы
Проблема заключается в том, что любой нормальный сервер приложений всегда выставляет Cookie, например для того, чтобы сохранять сессию клиента или корзину с его товаром. Если этот сервер (точнее его администратор) озабочен поддержанием определенного уровня безопасности, то он выставляет в теле Cookie домен и путь, например domain= backend.org; path=/path1. Наш Nginx запущенный в режиме Reverse Proxy замечательно меняет все ссылки в теле документов с backend.org на frontend.org, но не делает этого для кук! Это означает что браузер клиента отвергнет такие куки.
Этот вопрос с давних пор волнует умы администраторов nginx, в рассылках он всплывает по 1-2 раза в год. Большинство вопрошавших, по-видимому, решили свои проблемы подкручивая логику backendа, но не я! После очередного апдейта оригинального сайта стало понятно, что костыль с PHP + Curl тянуть больше невозможно и надо непременно найти решение с помощью Nginx!
Я вернул тему в рассылку, попутно перебирая варианты из ngx_http_perl_module и переменной $upstream_http_set_cookie, даже заглянул в дебри сорсов с призрачной надеждой написать модуль самому. Но все было неудачно пока в один прекрасный момент я не получил письмо от Mikhail Mazursky, который дал ценный совет. Благодаря этому совету я не только с легкостью решил задачу проксирования Cookie, но и получил новый инструмент, с помощью которого можно создать версию 2.0 своего проекта.
Решение
Название этого инструмента lua-nginx-module, который написан еще одним китайским самородком с корнями из Taobao. Из названия легко понять, что речь об языке скриптов Lua встроенном в Nginx — но это больше чем просто интерпретатор! Эти ребята создали полностью неблокируемую реализацию с производительностью десятки тысяч операций в секунду, которая имеет хуки ко всем событиям внутри Nginx. То что раньше можно было реализовать только написав свой модуль на C, теперь можно сделать несколькими строчками на Lua. Заинтересовались?
+62
Nginx получил 3 миллиона долларов инвестиций
1 мин
1.9KКомпания Nginx Inc. сообщила о получении первого транша венчурных инвестиций в размере $3 млн. Венчурные фонды Runa Capital, BV Capital и MSD Capital вложили деньги под создание нового коммерческого продукта, который должен выйти до конца октября.
Три миллиона долларов пойдут на американскую экспансию Nginx Inc., открытие офиса в Сан-Франциско в октябре-декабре 2011 года, наём персонала.
Игорь Сысоев разработал первую версию веб-сервера Engine X (Nginx) в 2002-2004 гг, будучи штатным сотрудником компании «Рамблер». В июле 2011 года он основал собственную фирму Nginx, а в октябре 2011 года — акционерное общество Nginx Inc. На сегодняшний день веб-сервер Nginx установлен на более чем 40 млн доменах в интернете (8,5% от общего количества) и владеет долей более 20% среди тысячи самых крупных веб-сайтов, включая Facebook, Dropbox и WordPress.
Можно посчитать, что если хотя бы 1% сайтов перейдёт с бесплатной на коммерческую версию Nginx, то инвестиции венчурных фондов окупятся с лихвой. Кажется, беспроигрышная сделка. По некоторым оценкам, за $3 млн инвесторы получили до 40% акций, а также два места в совете директоров.
UPD. По поводу инвестиционной сделки опубликовано сообщение в официальном блоге Runa Capital на Хабрахабре.
Три миллиона долларов пойдут на американскую экспансию Nginx Inc., открытие офиса в Сан-Франциско в октябре-декабре 2011 года, наём персонала.
Игорь Сысоев разработал первую версию веб-сервера Engine X (Nginx) в 2002-2004 гг, будучи штатным сотрудником компании «Рамблер». В июле 2011 года он основал собственную фирму Nginx, а в октябре 2011 года — акционерное общество Nginx Inc. На сегодняшний день веб-сервер Nginx установлен на более чем 40 млн доменах в интернете (8,5% от общего количества) и владеет долей более 20% среди тысячи самых крупных веб-сайтов, включая Facebook, Dropbox и WordPress.
Можно посчитать, что если хотя бы 1% сайтов перейдёт с бесплатной на коммерческую версию Nginx, то инвестиции венчурных фондов окупятся с лихвой. Кажется, беспроигрышная сделка. По некоторым оценкам, за $3 млн инвесторы получили до 40% акций, а также два места в совете директоров.
UPD. По поводу инвестиционной сделки опубликовано сообщение в официальном блоге Runa Capital на Хабрахабре.
+113
В nginx появился нативный модуль стриминга mp4
1 мин
10K
Изменения в nginx 1.1.3 14.09.2011
*) Добавление: модуль ngx_http_mp4_module.
Только что я его поставил и он работает.
Основная директива mp4 совместима с модулем h264.code-shop.com/trac/wiki/Mod-H264-Streaming-Nginx-Version2
Описание директив модуля:
nginx.org/en/docs/http/ngx_http_mp4_module.html
Ссылка на исходник, спасибо powder96
nginx.org/download/nginx-1.1.3.tar.gz
Ссылка на rpm для Centos 5
centos.alt.ru/?p=579
По моему это просто чудо какое то.
Добейте если не жалко 22 плюса к новости до инвайта.
+128
WebDav и Nginx
2 мин
35KТуториал
Приветствую вас, господа.
Не так давно в одном из своих проектов мне понадобилось иметь возможность передачи файлов посредством метода PUT, без скрипта-обработчика на принимающей стороне, принять и обработать файл должен был сам сервер. Так же была задача реализовать это не на Apache, а на его собрате — Nginx.
В итоге своих изысканий у меня получилась такая схема — скрипт на PHP получает адрес файла и делает запрос к серверу, а он в свою очередь получает файл и складывает в требуемую папочку.
Приводить дальнейшие примеры по установке, настройке и отработке взаимодействий я буду отталкиваясь от debian-based ОС.
Не так давно в одном из своих проектов мне понадобилось иметь возможность передачи файлов посредством метода PUT, без скрипта-обработчика на принимающей стороне, принять и обработать файл должен был сам сервер. Так же была задача реализовать это не на Apache, а на его собрате — Nginx.
В итоге своих изысканий у меня получилась такая схема — скрипт на PHP получает адрес файла и делает запрос к серверу, а он в свою очередь получает файл и складывает в требуемую папочку.
Приводить дальнейшие примеры по установке, настройке и отработке взаимодействий я буду отталкиваясь от debian-based ОС.
+3
Ограничения в secure_link «реальном» мире
3 мин
3KЗдравствуйте.
Побудила меня написать эту заметку статься Недокументированные возможности secure_link.
Где по большому счету была теория но мало прикладных примеров.
Поэтому я и решил немножко исправить ситуацию и поделится своими небольшими наработками.
Побудила меня написать эту заметку статься Недокументированные возможности secure_link.
Где по большому счету была теория но мало прикладных примеров.
Поэтому я и решил немножко исправить ситуацию и поделится своими небольшими наработками.
+4
Nginx получит полноценную поддержку HTTP/1.1 Keep-Alive соединений с бэк-эндами
2 мин
6KНа прошлой неделе Максим Дунин разместил в англоязычном списке рассылки разработчиков Nginx сообщение с просьбой потестировать патч, добавляющий полноценную (включая chunked-ответы) поддержку Keep-Alive соединений (при использовании upstream keepalive модуля) с http, fastcgi и memcached бэк-энд серверами.
Во избежание кривотолков, напомню, что Nginx обладает прекрасной поддержкой протокола HTTP 1.1 и Keep-Alive соединений с клиентами. Однако, постоянные соединения с http бэк-эндами не поддерживаются. На то были свои причины.
Во избежание кривотолков, напомню, что Nginx обладает прекрасной поддержкой протокола HTTP 1.1 и Keep-Alive соединений с клиентами. Однако, постоянные соединения с http бэк-эндами не поддерживаются. На то были свои причины.
+59
Ближайшие события
Прозрачное кэширование в nginx для всех и каждого
2 мин
115KПредставим, что у нас есть сайт, на который регулярно дают ссылки с хабра.
Нам нужно подготовить его к резким всплескам посещаемости. Как это сделать?
С версии 0.8.46 в nginx появились опции, позволяющие легко и просто настроить прозрачное кэширование для анонимных пользователей.
Для работы этой схемы от сайта требуется очень мало: достаточно лишь не начинать сессию, то есть не отправлять сессионную куку, без явной на то необходимости. Редкий сайт нельзя довести до такого состояния, а значит большинство сайтов можно защитить от резких всплесков посещаемости с помощью nginx с минимальными затратами сил и времени.
Нам нужно подготовить его к резким всплескам посещаемости. Как это сделать?
С версии 0.8.46 в nginx появились опции, позволяющие легко и просто настроить прозрачное кэширование для анонимных пользователей.
Для работы этой схемы от сайта требуется очень мало: достаточно лишь не начинать сессию, то есть не отправлять сессионную куку, без явной на то необходимости. Редкий сайт нельзя довести до такого состояния, а значит большинство сайтов можно защитить от резких всплесков посещаемости с помощью nginx с минимальными затратами сил и времени.
+94
Поддержка реверс-проксирования Web Sockets в Nginx
2 мин
12KЕсли вы используете Socket.IO или Faye с WebSockets, и хотите при этом использовать реверс-прокси с Nginx, то вы встретитесь с проблемой поддержки WebSocket в Nginx. Ее просто нет — WebSocket использует HTTP 1.1, в то же время как Nginx умеет правильно проксировать только HTTP 1.0.
Вы можете попытаться пойти в обход — использовать HAProxy для проксирования tcp соединений, или же скатиться к использованию Long-polling.
Но есть способ реализовать реверсированное проксирование и с NGINX, используя неофициальный патч, реализующий модуль tcp_proxy в nginx, который даст возможность пробрасывать произвольные tcp-соединения (по сути тоже самое, что дает HAProxy).
Что делать?
Вы можете попытаться пойти в обход — использовать HAProxy для проксирования tcp соединений, или же скатиться к использованию Long-polling.
Но есть способ реализовать реверсированное проксирование и с NGINX, используя неофициальный патч, реализующий модуль tcp_proxy в nginx, который даст возможность пробрасывать произвольные tcp-соединения (по сути тоже самое, что дает HAProxy).
+51
Установка Asp.Net на Linux (nginx+mono+xsp)
7 мин
40K
В свое время озадачившись проблемой хостинга маленьких Asp.Net-проектов я осознал одну простую вещь: покупать лицензию на Windows Server, а потом и арендовывать достаточно мощный выделенный/виртуальный сервер для каких-то домашних поделок/экспериментов — крайне неразумно. Решение как-то сразу всплыло в моей лысой голове: есть же Mono! Непродолжительный поиск по mono-project.com вывел на FAQ об Asp.Net. Фактически, документация показала мне три возможных варианта:
+60
Недокументированные возможности secure_link
2 мин
14K Начиная с версии 0.8.50 в модуле Nginx secure_link появилось значительное улучшение по защите ссылок от подделывания. Как ни странно, новые возможности до сих пор не отражены в официальной документации [1]. Описание на английском можно найти на сайте Nginx Community [2], а также пояснения Сысоева по данным изменениям [3]. Код на PHP для генерации защищённых ссылок можно найти в форуме по nginx [4].
В общем, новшество выглядит так:
В общем, новшество выглядит так:
+34
Релиз Nginx CT++ Module 0.5 — высокопроизводительного модуля-шаблонизатора для веб-сервера
2 мин
3.4KПервоначально хотел оформить как топик-ссылку, но тогда не получилось бы вставить картинку:

а она всё иллюстрирует, как нельзя лучше. Если картинка вас заинтересовала, то вы можете сразу пройти на открытый по случаю релиза сайт, или заглянуть под хабракат за комментами и некоторыми моими мыслями.
Позднее, как появится свободное время, напишу более подробную пошаговый HowTo, что вообще можно и что нужно делать с модулем, как можно представить MVC в виде: M — ваши сервисы, V — этот модуль и C — Nginx.

а она всё иллюстрирует, как нельзя лучше. Если картинка вас заинтересовала, то вы можете сразу пройти на открытый по случаю релиза сайт, или заглянуть под хабракат за комментами и некоторыми моими мыслями.
Позднее, как появится свободное время, напишу более подробную пошаговый HowTo, что вообще можно и что нужно делать с модулем, как можно представить MVC в виде: M — ваши сервисы, V — этот модуль и C — Nginx.
+57
Не nginx`ом единым…
1 мин
92012 апреля уже позади, как и релиз 1.0 версии nginx`а ) Вспоминал времена «до» nginx`а. Соответственно, на моём опыте. Апач в то время уже не очень рулил, а если и рулил, то обрезанный, без всяких реврайтов и htaccess`ов. И вдруг вспомнил замечательный сервер 0w (ZeroWait), от создателя счётчиков ракса (ныне ли.ру), Максима Зотова. Вроде как работа над сервером завершилась 3 года назад, но вот что интересно. Как и nginx, 0w не стремился к мажорным цифрам и релизам. Приятно ведь ) приятно что у нас такие разработчики. И ведь посмотрите. Самый быстрый веб сервер — русский. Реализация fastcgi для php — русская. Самый быстрый шаблонизатор, Blitz — русский.
Вот до чего доводит голод и отсутсвие железных ресурсов русских разработчиков…
Вот до чего доводит голод и отсутсвие железных ресурсов русских разработчиков…
+41
Вышел Nginx 1.0
1 мин
1.3K
Сегодня, в день космонавтики, Игорь Сысоев выпустил стабильную версию веб-сервера Nginx 1.0.
Список изменений по сравнению с предыдущей версией:
- Исправление: cache manager мог нагружать процессор после
переконфигурации.
Спасибо Максиму Дунину. - Исправление: директива «image_filter crop» неправильно работала в
сочетании с «image_filter rotate 180». - Исправление: директива «satisfy any» запрещала выдачу
пользовательской страницы для 401 кода.
Репозитарий доступен по адресу svn://svn.nginx.org. Инструкция по установке из исходников.
Скачать rpm для CentOS 5 можно здесь (репозиторий CentALT).
В комментариях к этому посту есть ссылки на пакеты и разъяснения по установке для некоторых других дистрибутивов Linux.
Порт nginx 1.0.0 на FreeBSD здесь.

+208