On 12/08/2010 08:45 PM, Leif Hedstrom wrote:
On 12/08/2010 08:36 PM, Victor Lucero wrote:
Hi.
Im writing a plugin to implement Load balancing. im facing some problem doing it with a remap plugin because its looks like when i alter new_host its also alter the "host" header in the http petition (and i dont want that) I need a way to alter the conection to Original Server and change the ip(so i can select between the servers in the pool). but there is no hook in this step.


You have two options:


Well, there's a third option, I meant to say there are "two options" if you want to do this as a remap plugin (which makes a fair amount of sense, since you might want to easily configure this plugin per remap rule).

The third option is to use "trunk", which has a few changes to the hooks and APIs. In particular, there are two useful hooks (one is merely renamed, but still):

    TS_HTTP_PRE_REMAP_HOOK
    TS_HTTP_POST_REMAP_HOOK


In addition, there's a new, very useful API (when running as a reverse proxy only):

    tsapi TSReturnCode TSSkipRemappingSet(TSHttpTxn txnp, int flag);


All three of my "suggestions" probably suffers from the fact that changing the destination "url" also affects the cache key (if the content is cacheable). In most cases, that would be undesirable, so you should also look into using this API to control the cache key:

tsapi TSReturnCode TSCacheUrlSet(TSHttpTxn txnp, const char *url, int length);


As a side note, for real load balancing, we need a way to intercept all DNS / hostDB lookups in a plugin. So, you'd do something like

    map http://www.example.com/  http://real.example.com/


and when real.example.com is looked up in our hostDB / DNS (on every request), you would intercept it with a plugin (new hook required, there's no way to do this now afaik) that allows you to return an IP based on your own code. It's unclear to me right now how such a hook would interact with hostDB, and the existing code we have for marking IPs as down etc. (i.e. it's important for the core to communicate connect failures to a plugin in a new hook like this). It's something we should noodle about (I'll file a bug later), it'd be great to get core changes in before v3.0.

Cheers,

-- leif

Reply via email to