пятница, 10 декабря 2010 г.

Медленная работа Captive Portal и web-интерфейса Pfsense

Pfsense - отличный продукт. Готовое решение на основе FreeBSD для управления трафиком. Грубо говоря, продвинутый роутер с веб-интерфейсом. Сделан на базе схожего решения m0n0wall. Основные фичи: NAT, traffic shaper, DHCP, DNS forwarder, VPN (PPTP, OpenVPN, IPSec), RIP, SNMP, CARP. Один недостаток. При включении Captive Portal, его страничка медленно открывается, да и web-интерфейс сильно тормозит.

Дело в том, что Pfsense создан для работы на слабом железе с малым объемом RAM. Соответствующим образом настроен и lighttpd, на котором крутится web часть решения. Чтобы повысить скорость общения с роутером нужно в файле /etc/inc/system.inc выставить параметры PHP_FCGI_MAX_REQUESTS и PHP_FCGI_CHILDREN в соответствии с задачей и объемом памяти. PHP_FCGI_CHILDREN задается переменной max_procs, значения которой зависят от RAM, в файле это выглядит так:

$avail = $memory[0];

        if($avail > 0 and $avail < 98) {
                $max_procs = 1;
        }

        if($avail > 97 and $avail < 128) {
                $max_procs = 1;
        }

        if($avail > 127 and $avail < 256) {
                $max_procs = 1;
        }

        if($avail > 255 and $avail < 384) {
                $max_procs = 3;
        }

        if($avail > 384) {
                $max_procs = 36;
        }

        if($captive_portal == true)  { 
                $bin_environment =  <<
        "bin-environment" => (
                        "PHP_FCGI_MAX_REQUESTS" => "9500",
                        "PHP_FCGI_CHILDREN" => "$max_procs"
        ),


По умолчанию при объеме памяти больше 384 max_procs=4, а PHP_FCGI_MAX_REQUESTS=500.
В моем pfsense-маршрутизаторе 2 Гб ОЗУ, поэтому я выставил max_procs=36 и  PHP_FCGI_MAX_REQUESTS=9500. Т.е. приведенная выше часть конфига стала такой:

$avail = $memory[0];

if($avail > 0 and $avail < 98) {
                $max_procs = 1;
        }

        if($avail > 97 and $avail < 128) {
                $max_procs = 1;
        }

        if($avail > 127 and $avail < 256) {
                $max_procs = 1;
        }

        if($avail > 255 and $avail < 384) {
                $max_procs = 3;
        }

        if($avail > 384) {
                $max_procs = 36;
        }

        if($captive_portal == true)  { 
                $bin_environment =  <<
        "bin-environment" => (
                        "PHP_FCGI_MAX_REQUESTS" => "9500",
                        "PHP_FCGI_CHILDREN" => "$max_procs"
        ),



1 комментарий:

  1. Анонимный24.10.2016, 11:55

    В новых прошивках не актуально, таких параметров нет, статью можно удалять

    ОтветитьУдалить