ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
6   •   Посмотреть все темы

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

 

156
Eugene @MechanisM
Получаем инфу о слушателях(Город, Страна, Координаты для карты) и все это без всяких 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 **********
}
# 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
далее слушатели подключаются к ********** и слушают.. а nginx благополучно проксит все на радиосервер + добавляет дополнительные данные по выбору:
Код страны напр. RU ($geoip_city_country_code),
Название страны напр. Russian Federation ($geoip_city_country_name),
Город напр. Moscow ($geoip_city),
Ну и гео-координаты: широта - $geoip_latitude, долгота -$geoip_longitude,
И название плеера или браузера.. вобщем юзерагент $http_user_agent.

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


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


Отредактировано MechanisM - 24.10.2012
833
metra52 @metra52
крутецко

223
Игорь @devilben
для 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 ********** lenny main" >> /etc/apt/sources.list
Squeeze
echo "deb ********** 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 ********** -O- | apt-key add -
и собственно устанавливаем nginx
#apt-get install nginx
без ручной сборки из исходников :)

156
Eugene @MechanisM
devilben пишет:

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

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

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

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

Я так понимаю, что за это отвечают директивы:
proxy_set_header X-Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;

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

156
Eugene @MechanisM
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 **********
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
6
Анатолий @ashum
Мне адреса нужны для статистики. Я потом логи айскаста загоняю в Sawmill, там есть встроенные парсеры для айскаста. Можно конечно и логи nginx использовать, но это надо переделывать парсер. Если подскажете более удобный способ сбора статистики по слушателям и городам, то буду благодарен.
Я нашел патч, который позволяет айскасту обрабатывать X-Real-IP в заголовках. **********. Его еще не внедрили в релиз? Никогда не работал с патчами, правильно ли я понимаю, что его надо применить к исходнику, а потом скомпилировать вручную айскаст?
Ваши усилия по развитию данных продуктов достойны всяческих похвал.

156
Eugene @MechanisM
ashum пишет:

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

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

6
Анатолий @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;

156
Eugene @MechanisM
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