On Tue, 2011-03-08 at 12:21 +1300, Amos Jeffries wrote: > On Tue, 08 Mar 2011 11:58:57 +1300, Amos Jeffries wrote: > > On Mon, 07 Mar 2011 16:59:07 -0500, Osmany wrote: > >> Greetings everyone, > >> > >> So I'm having trouble with my squid proxy-cache server. I recently > >> added > >> a redirect program because I had to make users go to my kaspersky > >> admin > >> kit and my WSUS services to get their updates and it works fine but > >> I > >> get constantly a warning and squid just collapses after a few > >> minutes of > >> run time. This is what I get in my cache.log: > >> > >> 2011/03/07 15:54:17| WARNING: All url_rewriter processes are busy. > >> 2011/03/07 15:54:17| WARNING: up to 465 pending requests queued > >> 2011/03/07 15:54:17| storeDirWriteCleanLogs: Starting... > >> 2011/03/07 15:54:17| WARNING: Closing open FD 1455 > >> 2011/03/07 15:54:17| commSetEvents: epoll_ctl(EPOLL_CTL_DEL): failed > >> on > >> fd=1455: (1) Operation not permitted > >> 2011/03/07 15:54:17| 65536 entries written so far. > >> 2011/03/07 15:54:17| 131072 entries written so far. > >> 2011/03/07 15:54:17| WARNING: Closing open FD 1456 > >> 2011/03/07 15:54:17| commSetEvents: epoll_ctl(EPOLL_CTL_DEL): failed > >> on > >> fd=1456: (1) Operation not permitted > >> 2011/03/07 15:54:17| Finished. Wrote 139965 entries. > >> 2011/03/07 15:54:17| Took 0.1 seconds (1288729.1 entries/sec). > >> FATAL: Too many queued url_rewriter requests (465 on 228) > >> Squid Cache (Version 2.7.STABLE7): Terminated abnormally. > >> > >> This is what I have in the squid.conf > >> > >> # TAG: url_rewrite_program > >> url_rewrite_program /etc/squid/redirect > >> > >> # TAG: url_rewrite_children > >> url_rewrite_children 100 > >> > >> # TAG: url_rewrite_concurrency > >> url_rewrite_concurrency 50 > >> > >> # TAG: url_rewrite_access > >> url_rewrite_access allow redirect > >> > >> And this is what I have in my redirector script > >> > >> #!/usr/bin/perl > >> BEGIN {$|=1} > >> while (<>) { > >> @X = split; > >> $url = $X[0]; > >> if ($url =~ /^http:\/\/dnl(.*)kaspersky(.*)com(.*)/) { > >> print > >> "301:ftp:\/\/dnl-kaspersky\.quimefa\.cu\:2122\/Updates"; > >> } > >> elsif ($url =~ /^http:\/\/(.*)windowsupdate(.*)/) { > >> print "301:http:\/\/windowsupdate\.quimefa\.cu\:8530"; > >> } > >> } > >> > >> Can you please help me to solve this? > > > > Your script does not support concurrency. When that is configured in > > squid there will be 2 space-delimited fields to handle. > > First one being the ID of the request channel, not the URL. > > > > Oops, I missed a few other things too: > * 'else' case is needed to print the no-change result back to Squid > * newlines need to be printed in perl > > > $url = $X[1]; > if ($url =~ /^http:\/\/dnl(.*)kaspersky(.*)com(.*)/) { > print $X[0]." > 301:ftp:\/\/dnl-kaspersky\.quimefa\.cu\:2122\/Updates\n"; > } > elsif ($url =~ /^http:\/\/(.*)windowsupdate(.*)/) { > print $X[0]." 301:http:\/\/windowsupdate\.quimefa\.cu\:8530\n"; > } > else { > print $X[0]."\n"; > } > > Amos So this is what I have now but it doesn't work. I've tried it manually: #!/usr/bin/perl BEGIN {$|=1} while (<>) { @X = split; $url = $X[1]; if ($url =~ /^http:\/\/dnl(.*)kaspersky(.*)com(.*)/) { print $X[0]." 301:ftp:\/\/dnl-kaspersky\.quimefa\.cu\:2122\/Updates\n"; } elsif ($url =~ /^http:\/\/(.*)windowsupdate(.*)/) { print $X[0]." 301:http:\/\/windowsupdate\.quimefa\.cu\:8530\n"; } else { print $X[0]."\n"; } } it just keeps on returning the same url that I enter. help please?