There are many good reasons to want to remove banner ads with a local proxy. I've used Internet Junkbuster, SquidGuard and Privoxy successfully to do advert filtering in the past, but since I'm already running Apache, I thought it'd be worth investigating if I could use it instead. While this isn't as flexible as a dedicated ad-blocker like Privoxy, it might be of use on small machines.

This works by using mod_rewrite to rewrite URLs which match certain patterns so they point at a local file instead (an image which will replace the advert). The patterns below block the adverts on most of the sites that I regularly visit; you will get a few false positives, but I've tried to avoid them as far as possible. If you come across an advert that the filter doesn't catch, add a pattern that'll match it to the list (many graphical browsers have some sort of "Copy image URL" function which is handy for this).

You'll need to copy my adfilter.conf file into your Apache configuration directory.

To filter adverts, enable mod_rewrite and mod_proxy, and configure the proxy appropriately (you may want to enable caching at the same time), then Include "/wherever/adfilter.conf". Note that you must load mod_rewrite before mod_proxy in order to get proxy requests to be rewritten. (This implies that you have your Apache built with shared modules; the default module ordering is the opposite of this, so you can't do advert filtering with a static Apache.)

Modify the RewriteRule setting to point at your own replacement banner; I suggest making up your own in a typical banner size, or just using a 1x1 blank image. (Not that a 1x1 image can be anything other than blank, of course...)

Thanks to Ben Charlton and Chris Bryden for contributing blocking rules.

More information on blocking banner ads can be found at the Realtime Backhoe List.

Don Marti also has a much fancier version of Apache ad filtering, although some of his config files appear to be broken as I write...

Michael J. Talarczyk reported that if you're using Firefox (or another Mozilla-family browser), you can significantly improve the performance by increasing the network.http.max-persistent-connections-per-proxy preference (in about:config or prefs.js): it's set to 4 by default, which means that Firefox will only have four connections open per proxy.