- debug
- quiet
- pidfile <file>
+ - stats
1.1) Event logging
------------------
Warning : the syntax has changed since version 1.0 !
---------
+2.11) Application Cookies
+-------------------------
+Since 1.2.4 it is possible to catch the cookie that comes from an
+application server in order to apply "application session stickyness".
+The server's response is searched for 'appsession' cookie, the first
+'len' bytes are used for matching and it is stored for a period of
+'timeout'.
+The syntax is:
+
+ appsession <SESSIONCOOKIE> len <MATCHLENGTH> timeout <HOLDTIME>
+
+- <SESSIONCOOKIE> is the cookie, the server uses for it's session-handling
+- <MATCHLENGTH> how many bytes/characters should be used for matching equal
+ sessions
+- <HOLDTIME> after this inactivaty time, in ms, the cookie will be deleted
+ from the sessionstore
+
+The appsession is only per 'listen' section possible.
+
+Example :
+---------
+ listen http_proxy :80
+ mode http
+ appsession JSESSIONID len 52 timeout 300000
+ .
+ .
+
3) Autonomous load balancer
===========================
mode http
cookie SERVERID insert nocache indirect
balance roundrobin
- server 192.168.1.1:80 cookie server01 check
- server 192.168.1.2:80 cookie server02 check
+ server srv1 192.168.1.1:80 cookie server01 check
+ server srv2 192.168.1.2:80 cookie server02 check
The other solution brought by versions 1.1.30 and 1.2.3 is to reuse a cookie
from the server, and prefix the server's name to it. In this case, don't forget
mode http
cookie JSESSIONID prefix
balance roundrobin
- server 192.168.1.1:80 cookie srv1 check
- server 192.168.1.2:80 cookie srv2 check
+ server srv1 192.168.1.1:80 cookie srv1 check
+ server srv2 192.168.1.2:80 cookie srv2 check
option httpclose
mode http
cookie SERVERID insert nocache indirect
balance roundrobin
- server 192.168.1.1:80 cookie server01 check
- server 192.168.1.2:80 cookie server02 check
+ server srv1 192.168.1.1:80 cookie server01 check
+ server srv2 192.168.1.2:80 cookie server02 check
L'autre solution apportée par les versions 1.1.30 et 1.2.3 est de réutiliser un
cookie en provenance du serveur et de lui préfixer l'identifiant du serveur.
mode http
cookie JSESSIONID prefix
balance roundrobin
- server 192.168.1.1:80 cookie srv1 check
- server 192.168.1.2:80 cookie srv2 check
+ server srv1 192.168.1.1:80 cookie srv1 check
+ server srv2 192.168.1.2:80 cookie srv2 check
option httpclose
#include <strings.h>
#endif
-#define TBLSIZ 10
-#define TBLCHKINT 5000 /* The time between two calls of appsession_refresh in ms */
-
-/*
- These Parts are copied from
-
- http://www.oreilly.com/catalog/masteralgoc/index.html
- Mastering Algorithms with C
- By Kyle Loudon
- ISBN: 1-56592-453-3
- Publishd by O'Reilly
-
- We have added our own struct to these function.
- */
-
-#include <include/list.h>
-#include <include/chtbl.h>
-#include <include/hashpjw.h>
-/* end of copied parts */
-
-struct app_pool {
- void **sessid;
- void **serverid;
- int ses_waste, ses_use, ses_msize;
- int ser_waste, ser_use, ser_msize;
-};
-
-struct app_pool apools;
-int have_appsession;
-
-/* Callback for hash_lookup */
-int match_str(const void *key1, const void *key2);
-
-/* Callback for destroy */
-void destroy(void *data);
-
-#if defined(DEBUG_HASH)
-static void print_table(const CHTbl *htbl);
-#endif
+#include "include/appsession.h"
#define HAPROXY_VERSION "1.2.4"
#define HAPROXY_DATE "2005/01/22"
srv = srv->next;
}/* end while(srv) */
}/* end else of if (asession_temp->serverid == NULL) */
-
- method_checked = 1;
}/* end if(strncasecmp(request_line,t->proxy->appsession_name,apssesion_name_len) == 0) */
else {
//fprintf(stderr,">>>>>>>>>>>>>>>>>>>>>>NO SESSION\n");
}
+ method_checked = 1;
}/* end if(!method_checked ...) */
else{
//printf("No Methode-Header with Session-String\n");
}/* end else if server == NULL */
tv_delayfrom(&asession_temp->expire, &now, t->proxy->appsession_timeout);
- break;
}/* end if ((t->proxy->appsession_name != NULL) ... */
}
--- /dev/null
+#ifndef _APPSESS_H
+#define _APPSESS_H
+
+#define TBLSIZ 10
+#define TBLCHKINT 5000 /* The time between two calls of appsession_refresh in ms */
+
+/*
+ These Parts are copied from
+
+ http://www.oreilly.com/catalog/masteralgoc/index.html
+ Mastering Algorithms with C
+ By Kyle Loudon
+ ISBN: 1-56592-453-3
+ Publishd by O'Reilly
+
+ We have added our own struct to these function.
+ */
+
+#include <include/list.h>
+#include <include/chtbl.h>
+#include <include/hashpjw.h>
+/* end of copied parts */
+
+struct app_pool {
+ void **sessid;
+ void **serverid;
+ int ses_waste, ses_use, ses_msize;
+ int ser_waste, ser_use, ser_msize;
+};
+
+struct app_pool apools;
+int have_appsession;
+
+/* Callback for hash_lookup */
+int match_str(const void *key1, const void *key2);
+
+/* Callback for destroy */
+void destroy(void *data);
+
+#if defined(DEBUG_HASH)
+static void print_table(const CHTbl *htbl);
+#endif
+
+#endif
const char *ptr;
unsigned int val;
- AppSess *appsession_temp;
+ appsess *appsession_temp;
/*****************************************************************************
* *
*****************************************************************************/
val = 0;
- appsession_temp = (AppSess *)key;
+ appsession_temp = (appsess *)key;
ptr = appsession_temp->sessid;
while (*ptr != '\0') {