From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.3 (2007-08-08) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.3 Date: Sun, 6 Jan 2008 01:41:16 +0200 From: Michael Shigorin To: sysadmins@lists.altlinux.org Message-ID: <20080105234116.GT17636@osdn.org.ua> Mail-Followup-To: sysadmins@lists.altlinux.org, Denis Smirnov , Denis Ovsienko Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.4.2.1i Cc: Denis Ovsienko Subject: [Sysadmins] nginx+nginx+... :) X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.9 Precedence: list Reply-To: shigorin@gmail.com, ALT Linux sysadmin discuss List-Id: ALT Linux sysadmin discuss List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Jan 2008 23:41:17 -0000 Archived-At: List-Archive: Здравствуйте. Родилось тут желание (и возможность) чуть разогнать сервер в подписи. Работает он на связке nginx+apache, поэтому после причёсывания всего нужного в новом контейнере и нескольких дней неспешных игрищ с ab(8) было решено переезжать. Опять же, это быстрее и обратимее делать разворотом реверс-прокси, чем DNS. Но в итоге получилась такая вот связка: old-ip:80 [dnat] `-> ve0:8080 [nginx] `-> new-ip:8080 [dnat] `-> ve1:8080 [nginx] `-> ve2:8080 [nginx] `-> ve2:80 [apache] Здесь два момента, один про порты и другой про IP. Про порты -- старый: если apache где-то в недрах посадить не на :80, то при каноникализации куда-то наружу может вылезти левый порт. Который внутрь вовсе не факт, что просунут вообще хоть как-то. Поэтому проще обеспечить apache на :80, а всё остальное так или иначе выстроить между ним и тем внешним :80, на который к нам собственно ходят. Этим ночером выучил ещё один вариант нового, про IP. При работе reverse proxy или такого frontend webserver, каким тут является nginx, backend webserver запросы получает от него, а не от клиента. В логах же хочется видеть всё-таки клиента. Поэтому прокси обучается добавлять исходный IP в левый заголовок вроде X-Real-IP: или X-Forwarded-For:, а бэкенд -- доставать оттуда нужный адрес и прикидываться, что так и было. Для apache-1.3 есть такой mod_realip, у нас с ним апач года три как собирается. Для apache-2.x есть такой apache2-mod_rpaf, который в 4.0 собран, но с багом #13886, поэтому из коробки не работает (справедливости ради, совсем из коробки и не выйдет, надо прописывать доверенные IP, с которых будут приниматься к рассмотрению такие заголовки). Конфигурируются они по документации, только вместо 127.0.0.1 может быть другой адрес, если прокси ходит не по loopback interface: --- /etc/httpd/conf/httpd.conf AddModule mod_realip.c # ... RealIP 127.0.0.1 xfwd RealIP 10.0.1.234 xfwd RealIP my.re.al.ip xfwd # ... --- Тут выяснилось, что nginx как бэкенд тоже умеет такое. Зовётся оно ngx_http_realip_module, описано здесь: http://sysoev.ru/nginx/docs/http/ngx_http_realip_module.html У меня _не_ завелось на 0.5.20 из ALS4.0+updates, но поехало с тем же конфигом на 0.5.31-alt4 из 4.0/branch (осталось дофиксить там неприятность с недостающим вдвое bucket_hash_size по умолчанию и надо бы в updates). Вот, архивирую :) -- ---- WBR, Michael Shigorin ------ Linux.Kiev http://www.linux.kiev.ua/