Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Re-Tracker | Система локальных ретрекеров | Ретрекер _ Помощь по ретрекеру (FAQ) _ XBT vs. Apache

Автор: kup 21.9.2009, 10:28

Такой вопрос. В связи с тем, что на т.ру стал добавляться в список трекеров retracker.local появилось желание перевести XBT на 80 порт, но всплыла серьёзная проблема. На сервере, где крутится ретрекер ещё установлен апач, который уже использует 80 порт. Возможно ли вообще их как-то "подружить" между собой?

Автор: FreeM@N 21.9.2009, 10:46

Можно сделать редирект в апаче на XBTT но это будет довольно ресурсоёмко если много пиров...

И второй вариант - перенаправлять все запросы с внутреннего ИП и 80-го порта на порт XBTT файерволом...но это при условии что у вас есть внутренний и внешний ИП...

т.е. будет что-то такое:
local net -> local IP:80 -> firewall NAT -> local IP:2710 -> XBTT

при этом апач будет работать корректно но на локальную сеть вещать не будет.
правила для iptables будут что-то типа:

Код
IPTABLES -t nat -A PREROUTING  -p tcp -m tcp   -d YOUR_LOCAL_IP_ADDRESS --dport 80 -j DNAT --to-destination :2710
IPTABLES -t nat -A OUTPUT  -p tcp -m tcp   -d YOUR_LOCAL_IP_ADDRESS --dport 80 -j DNAT --to-destination :2710

YOUR_LOCAL_IP_ADDRESS - заменить на соответствующее значение.

В качестве третьего варианта можно попробовать явно указать апачу какой ИП адрес слушать и тогда, теоретически, XBTT можно будет повесить на 80-й внутренего ИП.

Я лично пользуюсь вторым вариантом, т.к. мне XBTT нужен не только на одном ИП.

Автор: kenny85 21.9.2009, 17:46

Цитата(kup @ 21.9.2009, 10:28) *
Такой вопрос. В связи с тем, что на т.ру стал добавляться в список трекеров retracker.local появилось желание перевести XBT на 80 порт, но всплыла серьёзная проблема. На сервере, где крутится ретрекер ещё установлен апач, который уже использует 80 порт. Возможно ли вообще их как-то "подружить" между собой?

Не плохо бы указать ось, чтоб не гадать....

Автор: FreeM@N 21.9.2009, 20:04

Первый и третий варианты имеют место быть на любой ОС.
А так да - для ясности было бы не плохо и указать...

Автор: kup 5.10.2009, 12:16

В конфиге веб-сервера настроили перенаправление smile.gif

Автор: ustas 5.10.2009, 23:48

Цитата(kup @ 5.10.2009, 13:16) *
В конфиге веб-сервера настроили перенаправление smile.gif
не подскажете, как именно?

Автор: FreeM@N 6.10.2009, 0:00

Посмотрите http://wiki.torrents.ru/Retracker.local, может найдете что-нить полезное...

Автор: ustas 6.10.2009, 0:03

Цитата(FreeM@N @ 6.10.2009, 1:00) *
Посмотрите http://wiki.torrents.ru/Retracker.local, может найдете что-нить полезное...

там уже был )
что-то не могу разобраться с mod_proxy

Автор: FreeM@N 6.10.2009, 0:06

Какой ещё mod_proxy?
Я же по-русски написал:

Цитата
# Редирект на внутренний ИП блоее эффективен нежели
# использование proxy_pass

Это касается и apache...так что http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html.

Автор: ustas 6.10.2009, 6:52

Цитата(FreeM@N @ 6.10.2009, 1:06) *
Какой ещё mod_proxy?
Я же по-русски написал:

Это касается и apache...так что http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html.

c rewrite у меня тоже не получилось

Код
ServerName  retracker.local;
RewriteEngine On
RewriteRule ^/(announce)$ http://10.0.0.35:2710/announce
RewriteRule ^/(sta)$ http://10.0.0.35:2710/sta


на http://retracker.local/sta захожу, стату трекера вижу
но в utorent для трекера http://retracker.local/announce пишется 404

p.s. я в этом деле мало разбираюсь (

Автор: FreeM@N 6.10.2009, 8:21

У вас неправильные условия (их вообще нету так-то)
Должно быть что-то типа

Код
RewriteEngine On
RewriteCondition %{REQUEST_URI} ^/announce*$
RewriteRule ^/announce http://10.0.0.35:2710/announce?%{QUERY_STRING} [L,R]


А статистику не нужно редиректить. Кто захочет - и на 2710 зайдёт.

З.Ы.: Это скорей всего тоже не заработает с первого раза, но тут показано куда копать. Документацию читайте, там всё написано.

Автор: ISQman 13.10.2009, 17:19

Реврайт не всем спасение smile.gif
я использую мод пркси
с опциями proxy, proxy_http, proxy_balancer;
в httpd.conf вносим:

Код
# там, где грузим модули
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
LoadModule proxy_balancer_module libexec/apache22/mod_proxy_balancer.so
#в виртуал хосте, например

<VirtualHost *:80>
    ServerAdmin webmaster@your.service.com
    DocumentRoot "/some/www/patch/"
    ServerName retracker.local
    ServerAlias retracker.local www.retracker.local
    ErrorLog        /patch/to/log/bb_error.log
    TransferLog     /patch/to/log/bb_access.log
    ProxyRequests Off
    ProxyPass           / http://your.ip.adr.es:2710/
    ProxyPassReverse    / http://your.ip.adr.es:2710/
</VirtualHost>


и вуаля всё работает.

Автор: FreeM@N 13.10.2009, 18:04

Цитата(ISQman @ 13.10.2009, 18:19) *
и вуаля всё работает.


Не спорю, работает, но использование реврайта будет благоразумнее. Особенно прибольших количествах пиров и, что критично, при использовании для сервера VPS с ограниченными ресурсами.

Связано это с тем, что при высокой загрузке сервер отработает быстрее с реврайтом, т.к. XBTT изначально для этого заточен, а апач (или nginx например) просто будут сбрасывать пиров на на него. При этом при редиректе идёт скорейшее высвобождение ресурсов сервера нежели при проксировании.

Проверено так сказать на практике smile.gif

Автор: ISQman 15.10.2009, 11:32

дело в том что я так и не разобрался как правильно прописать реврайт (согласен на звание криворукого, гг, шучу) а для 2к абонов, думаю вполне подойдёт и проксирование (сервак ретрекера кроме как вторичный днс никакой нагрузки не имеет), поэтому покачто остался этот вариант....

Автор: gochankot 12.11.2009, 17:33

а чем плох вариант? http://wiki.torrents.ru/Retracker.local#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D1.87.D0.B5.D1.80.D0.B5.D0.B7_xbt_.2B_Nginx & http://www.opennet.ru/base/net/nginx_frontend_apache.txt.html

Автор: FreeM@N 12.11.2009, 21:32

А кто сказал что вариант плох? А вот при чём тут Apache+Nginx вообще не понятно...

Автор: eximido 15.11.2009, 1:07

Цитата(FreeM@N @ 12.11.2009, 21:32) *
А вот при чём тут Apache+Nginx вообще не понятно...

При том, что nginx вешается как фронтенд на 80-й порт. Все запросы по хосту ретрекера он кидает на xbt, запросы скриптов по хосту остальных сайтов он кидает в апач, статику остальных сайтов отдает самостоятельно.
Вуаля, проблема решена.

Автор: FreeM@N 15.11.2009, 2:16

Ясно, просто всегда использую только nginx поэтому как-то упустил тот факт что есть и те, кто использует Apache+Nginx smile.gif

Автор: zaglyadin 16.11.2009, 9:07

Я сделал так smile.gif работает и на /announce и на /unnounce.php
.htaccess

RewriteEngine On
Options +FollowSymLinks
RewriteRule ^/announce - [L]
RedirectMatch permanent ^/(?!announce/)(.*) http://retracker.local:2710/$1

Автор: ISQman 18.11.2009, 0:29

спасибо, также хочу дополнить и для скрапов и для статистики вышеизложеный способ работает, осталось проверить на определение айпи, а то с проксями както не очень красиво получается sad.gif
мда уж... с реврайтом что-то тоже не очень то и красиво....
Ip юзверей не определяются О_О как быть в таком случае?

Автор: FreeM@N 18.11.2009, 8:40

Вроде бы xbtt можно сообщить какой у пользователя ип вызвав его с дополнительным параметром, типа:
http://10.10.10.10:2710/announce?ip=1.1.1.1&

Автор: Am1GO 18.11.2009, 21:56

у меня nginx проксирует запросы к /st /announce /scrape и /debug на localhost:порт_xbtt

для того, чтобы xbtt можно было передавать ip, запрос должен поступать с 127.0.0.1 на 127.0.0.1.

Автор: FreeM@N 18.11.2009, 22:08

Конфиг покажите...

Автор: Am1GO 19.11.2009, 0:47

Код
        server {
                listen *:80;
                server_name retracker.lnetw.ru retracker.local;
                location @fallback {
                        proxy_pass http://retracker.lnetw.ru:8197;
                        proxy_redirect http://retracker.lnetw.ru:8197/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }
                location ~* ^.+\\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|ico|tgz|tbz|xls|doc|exe|pdf|ppt|txt|tar|mid|midi|wav|wave|bmp|rtf|swf|tiff|
log|m3u|flv|xcf|wmv|wma|pls|asf|asx|diff|rpm|deb|xml|xhtml|html|mkv)$ {
                        error_page 400 401 402 403 404 500 501 502 503 = @fallback;
                        root /mnt/s80/pub/retracker.lnetw.ru/www;
                        access_log /mnt/s80/pub/retracker.lnetw.ru/logs/access.log;
                }
                location ~* ^/(st|announce|debug|scrape|statistics) {
                        rewrite ^/announce?[^(ip=)]*(.*)$ /announce?ip=$ip_r$1 break;
                        proxy_pass http://127.0.0.1:7717;
                        proxy_redirect http://127.0.0.1:7717/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $ip_r;
                        proxy_set_header X-Real-IP $ip_r;
                }
                location / {
                        proxy_pass http://retracker.lnetw.ru:8197;
                        proxy_redirect http://retracker.lnetw.ru:8197/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Real-IP $remote_addr;
                }
        }

Автор: Am1GO 19.11.2009, 0:49

ах да, по-поводу переменной $ip_r

Код
perl_set $ip_r '

        sub {
            my $r=shift;
            my $sa=$r->variable("server_addr");
            my $ra=$r->remote_addr;

            $ra=~ s/192.168.22.2/$sa/;
            return $ra;
        }

    ';
это мои локальные костыли

Автор: FreeM@N 19.11.2009, 2:11

Перед блоком

Код
location ~* ^/(st|announce|debug|scrape|statistics) {

поставьте вот такой
Код
        if ( $request_uri !~* "^/announce?\?ip=.*" ) {
                rewrite .* /announce?ip=$remote_addr&$args break;
        }


Это шаманство в топку:
Код
rewrite ^/announce?[^(ip=)]*(.*)$ /announce?ip=$ip_r$1 break;


P.S.: Конкретно в вашей конфигурации он не заработает, но при должной модификации всё заведётся.

Принцип такой - сначала подготовить URL с параметрами, а потом отправлять на проксирование.

UPD:
Хотя в вашем случае всётаки if придётся поместить в location
но проверку на announce лучше отделить от остальных

Вот так попробуйте
Код
location ~* ^/announce {
                        if ( $request_uri !~* ".*\?ip=.*" ) {
                                  rewrite .* /announce?ip=$remote_addr&$args break;
                                    }
                        proxy_pass http://127.0.0.1:7717;
                        proxy_redirect http://127.0.0.1:7717/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $ip_r;
                        proxy_set_header X-Real-IP $ip_r;
                }

Автор: Am1GO 19.11.2009, 7:43

в конкретно моём случае всё сделано замечательно. $remote_addr я не использую по той простой причине, что если запрос поступет изнутри моей локальной сети (а сервер является ещё и гейтом для моей локалки), то xbtt передаётся неправильный ip, для того $ip_r и сделана.
далее - отдельный локейшн только для /announce? нахрена?
про все if'ы Сысоев довольно однозначно выразился, почитайте, именно поэтому сделано не if'ом, а вот таким вот реврайтом.

Автор: FreeM@N 19.11.2009, 9:00

Тогда в чём проблема? Вы говорите что не работает, я вам предлагаю вариант, отличный от вашего, а на это отвечаете "танунафиг".
Про if-ы в курсе и тем не менее...
Про $remote_addr - я думал вы сами догадаетесь заменить его, просто так наглядней...

UPD:
Про отделный location для announce - а разве на других страницах необходим IP пользователя? Так зачем делать ненужный rewrite тогда? спички...

Автор: ISQman 19.11.2009, 16:29

пробую ещё один вариант:
на фре по статье лиса собрал джаил и повесил его на отдельный ип (дабы не занимать порты и не строить редиректы), там себе вертяца пару демонов, в том числе XBT, MySQL, ну и ссх, итп, для поддержки "реальности" машины, надеюсь спасёт.

Автор: s2k 8.12.2009, 8:51

Подскажите как подружить XBT c DLE на деневре, чтобы работал http://retracker.local/announce
с реврайтом не получаеться
[code]DirectoryIndex index.php

RewriteEngine On

# DLE
RewriteRule ^announce(/?)+$ /announce.php [L][code]

Автор: FreeM@N 21.12.2009, 0:27

Apache под рукой нет поэтому попробуйте изучить http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html.

Автор: nemec2000 11.1.2010, 19:37

Сделал так, все работает, но в клиенте иногда не показаны сидеры и личеры, почему, кто поможет?
Redirect permanent /announce.php http://ип:2710/announce
Redirect permanent /announce http://ип:2710/announce

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)