1

Тема: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

Получаем инфу о слушателях(Город, Страна, Координаты для карты) и все это без всяких php итд.
берем nginx скомпиленный с http_geoip_module(гугл в помошь как его установить и настроить)
естественно добавляем ссылки на базы в блоке http:

#nginx.conf
http {
........................................................................................
        geoip_country  /home/server/apps/geoip/GeoIP.dat;
        geoip_city     /home/server/apps/geoip/GeoIPCity.dat;
........................................................................................
}

далее в файле виртуалхоста или тут-же в блоке server пишем:

server { 
        listen 80; 
        server_name radio.mysite.com; 

        location / { 
            proxy_buffering           off; 
            proxy_set_header          X-Host $http_host; 
            proxy_set_header          X-Forwarded-For $remote_addr;
            proxy_set_header          User-agent $geoip_city_country_code,$geoip_city_country_name,$geoip_city,$geoip_latitude,$geoip_longitude,$http_user_agent;
            chunked_transfer_encoding off;
            proxy_pass http://radioserverIP-or-domain:port;
        }
#        location /radio_status {
#            stub_status on;
#            access_log off;
#        }
}

ну и меняем что нужно $geoip_city_country_code,$geoip_city_country_name,$geoip_city,$geoip_latitude,$geoip_longitude,$http_user_agent
далее слушатели подключаются к http://radio.mysite.com и слушают.. а nginx благополучно проксит все на радиосервер + добавляет дополнительные данные по выбору:
Код страны напр. RU ($geoip_city_country_code),
Название страны напр. Russian Federation ($geoip_city_country_name),
Город напр. Moscow ($geoip_city),
Ну и гео-координаты: широта - $geoip_latitude, долгота -$geoip_longitude,
И название плеера или браузера.. вобщем юзерагент $http_user_agent.

Ну а те кто хорошо разбирается в nginx могут настроить балансировку нескольких потоков еще и много другое.


на скриншоте Icecast2 сервера видно как у меня все это выглядит:
показ айпи я конечно отключил.

http://i.imgur.com/VcT16.png

Отредактировано MechanisM (24-10-2012 15:44:27)

2

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

крутецко

3

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

для Debian всегда свежий nginx в сборе со следующими модулями:

http_stub_status_module --with-http_flv_module --with-http_ssl_module --with-http_dav_module --with-http_sub_module --with-http_realip_module --with-http_gzip_static_module --with-http_secure_link_module --with-ipv6 --with-http_geoip_module --with-debug

добавляем репозиторий:

Lenny

echo "deb http://ftp.debian.org.ua/debian-dou/ lenny main" >> /etc/apt/sources.list

Squeeze

echo "deb http://ftp.debian.org.ua/debian-dou/ squeeze main" >> /etc/apt/sources.list

устанавливаем ключик

# gpg --keyserver keys.gnupg.net --recv-keys 0A3D4789
..... 
gpg: requesting key 0A3D4789 from hkp server keys.gnupg.net
gpg: key 0A3D4789: public key "Debian.org.ua Custom Repository " imported
gpg: Total number processed: 1
gpg:               imported: 1
....
# gpg --armor --export 0A3D4789 | apt-key add -
OK
# apt-get update

или так

wget -q http://ftp.debian.org.ua/debian-dou/archive.key -O- | apt-key add -

и собственно устанавливаем nginx

#apt-get install nginx

без ручной сборки из исходников smile

4

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

пишет devilben:

для Debian всегда свежий nginx в сборе...

я пользуюсь репами dotdeb.org если надо быстро. а так-то в репах убунты 11.10 есть последний, ну а вообще я компилю сам. ибо у меня есть самописные модули и те которых в nginx-extras нет.

Добавлено спустя     5 минут   13 секунд:
самое крутое что город, страна итд уже сразу будут фигурировать в логах Icecast2 и вообще он выдавать будет уже сразу с городами.
не нужно каждый раз скриптами статистики дергать базу геоайпи и генерить все с каждым запросом снова и снова.
плюс можно создать специальный xsl файлик который будет выдавать статистику в формате json, и это уже легко можно задействовать для показа на сайте.
у меня все реалтайм. через APE(ape-project.org) реалтайм отображается трек и слушатели. никаких запросов. данные сами обновляются когда изменяются.

5

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

Подскажите, пожалуйста, как настроить nginx, чтобы в логах айскаста выдавался реальный ip-адрес клиента, а не адрес nginx. Не в колонке User Agent, а именно в IP.

Я так понимаю, что за это отвечают директивы:

proxy_set_header          X-Host $http_host; 
proxy_set_header          X-Forwarded-For $remote_addr;

Но почему-то у меня не работает.

6

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

пишет ashum:

Подскажите, пожалуйста, как настроить nginx, чтобы в логах айскаста выдавался реальный ip-адрес клиента, а не адрес nginx. Не в колонке User Agent, а именно в IP.

Я так понимаю, что за это отвечают директивы:

proxy_set_header          X-Host $http_host; 
proxy_set_header          X-Forwarded-For $remote_addr;

Но почему-то у меня не работает.

Лучше вообще отключи логи у айсика чтобы он не парился писаниной логов и жрал меньше. читай логи у nginx.
просто пропиши в конфиге nginx что-то типа:

server { 
        listen 80; 
        server_name radio.mysite.com; 

        location / { 
            proxy_buffering                  off; 
            proxy_set_header              X-Host $http_host; 
            proxy_set_header              X-Forwarded-For $remote_addr;
            proxy_set_header              User-agent $geoip_city_country_code,$geoip_city_country_name,$geoip_city,$geoip_latitude,$geoip_longitude,$http_user_agent;
            chunked_transfer_encoding off;
            proxy_pass                         http://radioserverIP-or-domain:port;
            access_log                         /server/log/nginx-icecast2.access.log; # <------------------------------------------------------------------------------------------------------------------
            error_log                             /server/log/nginx-icecast2.error.log; # <---------------------------------------------------------------------------------------------------------------------
        }

}

если тебе нужно это чтобы как-то отсеивать айпишники через баны итд. так то-же самое можно сделать и через nginx только намного шустрее и с меньшими затратами ресурсов системы.
я вообще убрал показ айпишника только страна и город итд.

Кстати общался с разработчиками айскаста, скоро выйдет новая версия восновном с багфиксами итд. И возможно успеют включить мой дизайн для страниц айскаста. как на скриншоте тут выше. или другой сделаю.
Еще сейчас переговоры веду чтобы внедрили GeoIP сразу в айсик. Готовлю код и патчи. Но это уже к следующей версии они разродятся только. Я буду стараться их подпинывать чтобы чаще выпускали актуальные версии.
так-же сегодня болтал с разработчиками mpd возможно тоже моими услилиями добавят поддержку чтобы мпд не кодировал треки если они уже в нужном формате и битрейте.
айскаст станет еще одним из опенсорсных проектов где я контрибьютор. недавно и Airtime добавлили в разрабатываемую новую версию мой код для поддержки nginx.

У меня, к сожалению, времени на все катастрофически не хватает. Полный загруз до февраля. Но что в рамках этого загруза я реализовываю и дополняю айсик и мпд.

Отредактировано MechanisM (24-10-2012 15:45:25)

7

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

Мне адреса нужны для статистики. Я потом логи айскаста загоняю в Sawmill, там есть встроенные парсеры для айскаста. Можно конечно и логи nginx использовать, но это надо переделывать парсер. Если подскажете более удобный способ сбора статистики по слушателям и городам, то буду благодарен.
Я нашел патч, который позволяет айскасту обрабатывать X-Real-IP в заголовках. http://old.nabble.com/-PATCH--Use-X-For … 25136.html. Его еще не внедрили в релиз? Никогда не работал с патчами, правильно ли я понимаю, что его надо применить к исходнику, а потом скомпилировать вручную айскаст?
Ваши усилия по развитию данных продуктов достойны всяческих похвал.

8

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

пишет ashum:

... Можно конечно и логи nginx использовать, но это надо переделывать парсер...
... правильно ли я понимаю, что его надо применить к исходнику, а потом скомпилировать вручную айскаст?...

Уж если там есть парсер для Icecast то для nginx тем-более есть.
Да, правильно.

9

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

Этот момент практически недокументирован, поэтому напишу тут для истории.
Начиная с версии 2.3.3-kh1icecast поддерживает работу с x-forwarded-for.
Для этого надо в конфиге icecast.xml добавить строку в раздел <paths>:

<x-forwarded-for>127.0.0.1</x-forwarded-for>

В конфиге nginx должны быть строки:

proxy_set_header          X-Host $http_host;
proxy_set_header          X-Forwarded-For $remote_addr;

10

Re: Получаем инфу о слушателях(Город, Страна, Координаты для карты)

пишет ashum:

Этот момент практически недокументирован, поэтому напишу тут для истории.
Начиная с версии 2.3.3-kh1icecast поддерживает работу с x-forwarded-for.
Для этого надо в конфиге icecast.xml добавить строку в раздел <paths>:

<x-forwarded-for>127.0.0.1</x-forwarded-for>

В конфиге nginx должны быть строки:

proxy_set_header          X-Host $http_host;
proxy_set_header          X-Forwarded-For $remote_addr;

Совершенно верно.
Кроме того, в конфиге nginx, в блоке location надо еще добавить:

chunked_transfer_encoding off;

Пропустил этот момент когда писал статью. Сам то использую, но не указал это тут. Уже подкорректировал статью.

Отредактировано MechanisM (24-10-2012 15:47:08)