]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/proxy.cgi
squid: Run as many redirectors as we have CPU cores
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / proxy.cgi
index 6c4e2b05d1e2f1cbc99bd0551ab88950b5a1af51..75f535151b1fd240554e5b28b76892ce41434131 100644 (file)
@@ -27,6 +27,7 @@
 #
 
 use strict;
+use Apache::Htpasswd;
 
 # enable only the following on debugging purpose
 #use warnings;
@@ -286,7 +287,6 @@ $proxysettings{'IDENT_USER_ACL'} = 'positive';
 $proxysettings{'ENABLE_FILTER'} = 'off';
 $proxysettings{'ENABLE_UPDXLRATOR'} = 'off';
 $proxysettings{'ENABLE_CLAMAV'} = 'off';
-$proxysettings{'CHILDREN'} = '10';
 
 $ncsa_buttontext = $Lang::tr{'advproxy NCSA create user'};
 
@@ -358,7 +358,7 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'}
                $errormessage = $Lang::tr{'advproxy errmsg cache'}." ".$proxysettings{'CACHE_MEM'}." > ".$proxysettings{'CACHE_SIZE'};
                goto ERROR;
        }
-       
+
        if (!(&General::validport($proxysettings{'PROXY_PORT'})))
        {
                $errormessage = $Lang::tr{'advproxy errmsg invalid proxy port'};
@@ -400,8 +400,7 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'}
                $errormessage = $Lang::tr{'proxy errmsg filedescriptors'};
                goto ERROR;
        }
-       if (!($proxysettings{'CACHE_MEM'} =~ /^\d+/) ||
-               ($proxysettings{'CACHE_MEM'} < 1))
+       if (!($proxysettings{'CACHE_MEM'} =~ /^\d+/))
        {
                $errormessage = $Lang::tr{'advproxy errmsg mem cache size'};
                goto ERROR;
@@ -436,11 +435,6 @@ if (($proxysettings{'ACTION'} eq $Lang::tr{'save'}) || ($proxysettings{'ACTION'}
        {
                $errormessage = $Lang::tr{'invalid maximum incoming size'};
                goto ERROR;
-       }
-               if (!($proxysettings{'CHILDREN'} =~ /^\d+$/) || ($proxysettings{'CHILDREN'} < 1))
-       {
-               $errormessage = $Lang::tr{'advproxy invalid num of children'};
-               goto ERROR;
        }
        if ($proxysettings{'ENABLE_BROWSER_CHECK'} eq 'on')
        {
@@ -694,7 +688,7 @@ ERROR:
                        system ('/usr/bin/touch', "${General::swroot}/proxy/transparent_blue"); }
 
                if ($proxysettings{'ACTION'} eq $Lang::tr{'advproxy save and restart'}) { system('/usr/local/bin/squidctrl restart >/dev/null 2>&1'); }
-               if ($proxysettings{'ACTION'} eq $Lang::tr{'proxy reconfigure'}) { system('/usr/local/bin/squidctrl reconfigure >/dev/null 2>&1'); }     
+               if ($proxysettings{'ACTION'} eq $Lang::tr{'proxy reconfigure'}) { system('/usr/local/bin/squidctrl reconfigure >/dev/null 2>&1'); }
   }
 }
 
@@ -1034,12 +1028,8 @@ print <<END
 </table>
 <hr size='1'>
 <table width='100%'>
-<tr><td class='base' colspan='4'><b>$Lang::tr{'advproxy redirector children'}</b></td></tr>
-<tr><td class='base' >$Lang::tr{'processes'}:&nbsp;<img src='/blob.gif' alt='*' /><input type='text' name='CHILDREN' value='$proxysettings{'CHILDREN'}' size='5' /></td>
 END
 ;
-my $count = `ip n| wc -l`;
-if ( $count < 1 ){$count = 1;}
 if ( -e "/usr/bin/squidclamav" ) {
        print "<td class='base'><b>".$Lang::tr{'advproxy squidclamav'}."</b><br />";
        if ( ! -e "/var/run/clamav/clamd.pid" ){
@@ -1048,18 +1038,16 @@ if ( -e "/usr/bin/squidclamav" ) {
                }
        else {
                print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_CLAMAV' ".$checked{'ENABLE_CLAMAV'}{'on'}." /><br />";
-               print "+ ".int(( $count**(1/3)) * 8);}
+}
        print "</td>";
 } else {
        print "<td></td>";
 }
-print "<td class='base'><b>".$Lang::tr{'advproxy url filter'}."</b><br />";
+print "<td class='base'><a href='/cgi-bin/urlfilter.cgi'><b>".$Lang::tr{'advproxy url filter'}."</a></b><br />";
 print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_FILTER' ".$checked{'ENABLE_FILTER'}{'on'}." /><br />";
-print "+ ".int(($count**(1/3)) * 6);
 print "</td>";
-print "<td class='base'><b>".$Lang::tr{'advproxy update accelerator'}."</b><br />";
+print "<td class='base'><a href='/cgi-bin/updatexlrator.cgi'><b>".$Lang::tr{'advproxy update accelerator'}."</a></b><br />";
 print $Lang::tr{'advproxy enabled'}."<input type='checkbox' name='ENABLE_UPDXLRATOR' ".$checked{'ENABLE_UPDXLRATOR'}{'on'}." /><br />";
-print "+ ".int(($count**(1/3)) * 5);
 print "</td></tr>";
 print <<END
 </table>
@@ -1117,7 +1105,7 @@ print <<END
        <td colspan='4'><b>$Lang::tr{'advproxy cache management'}</b></td>
 </tr>
 <tr>
-       <td class='base'>$Lang::tr{'proxy cachemgr'}:</td>
+       <td class='base'><a href='/cgi-bin/cachemgr.cgi' target='_blank'>$Lang::tr{'proxy cachemgr'}:</td>
        <td><input type='checkbox' name='CACHEMGR' $checked{'CACHEMGR'}{'on'} /></td>
        <td class='base'>$Lang::tr{'advproxy admin mail'}:</td>
        <td><input type='text' name='ADMIN_MAIL_ADDRESS' value='$proxysettings{'ADMIN_MAIL_ADDRESS'}' /></td>
@@ -1531,7 +1519,7 @@ END
 ;
 
 foreach (@throttle_limits) {
-       print "\t<option value='$_' $selected{'THROTTLING_GREEN_TOTAL'}{$_}>$_ kBit/s</option>\n";
+       print "\t<option value='$_' $selected{'THROTTLING_GREEN_TOTAL'}{$_}>$_ kbit/s</option>\n";
 }
 
 print <<END
@@ -1545,7 +1533,7 @@ END
 ;
 
 foreach (@throttle_limits) {
-       print "\t<option value='$_' $selected{'THROTTLING_GREEN_HOST'}{$_}>$_ kBit/s</option>\n";
+       print "\t<option value='$_' $selected{'THROTTLING_GREEN_HOST'}{$_}>$_ kbit/s</option>\n";
 }
 
 print <<END
@@ -1566,7 +1554,7 @@ END
 ;
 
 foreach (@throttle_limits) {
-       print "\t<option value='$_' $selected{'THROTTLING_BLUE_TOTAL'}{$_}>$_ kBit/s</option>\n";
+       print "\t<option value='$_' $selected{'THROTTLING_BLUE_TOTAL'}{$_}>$_ kbit/s</option>\n";
 }
 
 print <<END
@@ -1580,7 +1568,7 @@ END
 ;
 
 foreach (@throttle_limits) {
-       print "\t<option value='$_' $selected{'THROTTLING_BLUE_HOST'}{$_}>$_ kBit/s</option>\n";
+       print "\t<option value='$_' $selected{'THROTTLING_BLUE_HOST'}{$_}>$_ kbit/s</option>\n";
 }
 
 print <<END
@@ -3076,8 +3064,6 @@ END
                        print FILE "\n";
 
                        print FILE <<END
-
-
    )
      return "PROXY $netsettings{'GREEN_ADDRESS'}:$proxysettings{'PROXY_PORT'}";
 END
@@ -3173,7 +3159,7 @@ END
                }
        }
 
-       if ($proxysettings{'CACHE_SIZE'} > 0)
+       if (($proxysettings{'CACHE_SIZE'} > 0) || ($proxysettings{'CACHE_MEM'} > 0))
        {
                print FILE "\n";
 
@@ -3205,7 +3191,7 @@ END
 
        if ($proxysettings{'OFFLINE_MODE'} eq 'on') {  print FILE "offline_mode on\n\n"; }
        if ($proxysettings{'CACHE_DIGESTS'} eq 'on') {  print FILE "digest_generation on\n\n"; } else {  print FILE "digest_generation off\n\n"; }
-       
+
        if ((!($proxysettings{'MEM_POLICY'} eq 'LRU')) || (!($proxysettings{'CACHE_POLICY'} eq 'LRU')))
        {
                if (!($proxysettings{'MEM_POLICY'} eq 'LRU'))
@@ -3270,7 +3256,12 @@ cache_dir aufs /var/log/cache $proxysettings{'CACHE_SIZE'} $proxysettings{'L1_DI
 END
                ;
        } else {
-               print FILE "cache deny all\n\n";
+               if ($proxysettings{'CACHE_MEM'} > 0) {
+                       # always 2% of CACHE_MEM defined as max object size
+                       print FILE "maximum_object_size_in_memory " . int($proxysettings{'CACHE_MEM'} * 1024 * 0.02) . " KB\n\n";
+               } else {
+                       print FILE "cache deny all\n\n";
+           }
        }
 
        print FILE <<END
@@ -3425,7 +3416,7 @@ END
                                my $ntlm_auth_group = $proxysettings{'NTLM_AUTH_GROUP'};
                                $ntlm_auth_group =~ s/\\/\+/;
 
-                               print FILE " --require-membership-of=\"$ntlm_auth_group\"";
+                               print FILE " --require-membership-of=$ntlm_auth_group";
                        }
                        print FILE "\n";
 
@@ -3438,7 +3429,7 @@ END
                                        my $ntlm_auth_group = $proxysettings{'NTLM_AUTH_GROUP'};
                                        $ntlm_auth_group =~ s/\\/\+/;
 
-                                       print FILE " --require-membership-of=\"$ntlm_auth_group\"";
+                                       print FILE " --require-membership-of=$ntlm_auth_group";
                                }
                                print FILE "\n";
                                print FILE "auth_param basic children 10\n";
@@ -4092,7 +4083,10 @@ END
        if (($proxysettings{'ENABLE_FILTER'} eq 'on') || ($proxysettings{'ENABLE_UPDXLRATOR'} eq 'on') || ($proxysettings{'ENABLE_CLAMAV'} eq 'on'))
        {
                print FILE "url_rewrite_program /usr/sbin/redirect_wrapper\n";
-               print FILE "url_rewrite_children $proxysettings{'CHILDREN'}\n\n";
+               print FILE "url_rewrite_children ", &General::number_cpu_cores();
+               print FILE " startup=", &General::number_cpu_cores();
+               print FILE " idle=", &General::number_cpu_cores();
+               print FILE " queue-size=", &General::number_cpu_cores() * 32, "\n\n";
        }
 
        # Include file with user defined settings.
@@ -4134,7 +4128,9 @@ sub adduser
                close(FILE);
        } else {
                &deluser($str_user);
-               system("/usr/sbin/htpasswd -b $userdb $str_user $str_pass");
+
+               my $htpasswd = new Apache::Htpasswd("$userdb");
+               $htpasswd->htpasswd($str_user, $str_pass);
        }
 
        if ($str_group eq 'standard') { open(FILE, ">>$stdgrp");