Syntax
In HAProxy Enterprise, variables are used to store and manipulate values that can be used in various parts of the configuration file. Overall, variables provide a powerful mechanism for configuring and customizing HAProxy Enterprise's behavior based on runtime conditions and other factors
Global variables
set-var
can only be defined in the global section of your hapee-lb.cfg
file. This will define variables that live for the lifetime of the HAProxy Enterprise process. The syntax for creating a variable in HAProxy Enterprise is as follows:
global
# Set a variable named "my_var" to a string value
set-var proc.my_string str("some string value")
# Set a variable named "my_num_var" to an integer value
set-var proc.my_num_var int(123)
Once a variable is defined, you can use it in various parts of the configuration file such as ACLs, log formats, and HTTP header values by using the var
fetch method.
frontend example
bind :80
http-response set-header X-MyString %[var(proc.my_string)]
http-response set-header X-MyNumber %[var(proc.my_num_var)]
Temporary variables
You can use http-request set-var
and http-response set-var
for variables that live only for a given request, response, or client session.
frontend example
# Define a custom variable named 'my_string' and set its value to 'some string value'
http-request set-var(txn.my_string) str("some string value")
# Use the custom variable in the response header
http-response add-header X-My-String %[var(txn.my_string)]
In addition to setting variables explicitly, HAProxy Enterprise also provides a number of built-in fetches that are automatically set based on various aspects of the client request or server response. These include variables like src
, which contains the client's source IP address, and path
, which contains the path portion of the requested URL. More information can be found in the section Fetching samples.
Scoping
All variables are scoped, meaning they can only be accessed within the same scope. When you set a variable, you prefix its names with a scope. The scope can be any of the following:
proc: variable is available during all phases
sess: variable is available during a client's entire TCP session
txn: variable is available during an entire HTTP request-response transaction
req: variable is available during the HTTP request phase only
res: variable is available during the HTTP response phase only
Use the set-var
directives to set a variable:
http-request set-var
http-response set-var
http-response-after-response set-var
In the following example, the variable mypath
is scoped to the transaction, which makes it available during both the request and response phases:
frontend www bind :80 http-request set-var(txn.mypath) path
Unset a variable
Use one of the following directives to unset a variable:
http-request unset-var
http-response unset-var
http-response-after-response unset-var
Next up
Environment variables