Use conditions to specify how to edit and deploy configurations. This allows you to add logic to any basic configuration object in a service. When you assign a condition to an object in your service, you are wrapping the object in a VCL if-statement. If the condition is met, then the object is used when processing an end-user request.
Before you begin
Because of their complexity and power, be sure you're comfortable with the following before you begin using conditions:
- Know how to edit and deploy configurations using the Fastly application. If you are not familiar with basic editing using the application, see our documentation to learn more before moving forward.
- Understand basic C-style logical expression syntax (e.g., basic logic, operators such as &&, and precedence). If you do not have experience with these types of expressions, refer to a basic programming guide (such as the Tizag Perl tutorial) that deals with "IF" style expressions in either C or Perl. (These languages are not directly applicable to the tutorial because VCL is neither C nor Perl. However, the syntax is similar.)
Conditions are saved in your service like any other configuration object, but they can only be accessed, assigned, and manipulated through a selection in the gear-shaped menu to the right of an existing configuration object (e.g., origin servers and headers). This means that when you create a condition, you can apply it in multiple places across your configuration.
Properly configured conditions require only three parameters, making them appear deceptively simple:
- a Name - A human-readable identifier for the condition.
- an Apply If statement - The logical expression to execute in VCL to determine if condition resolves as True or False.
- the Priority - A number used to determine the order in which multiple conditions execute. Lower numbers execute first.
Most problems occur in the Apply If parameter because it uses actual VCL code to specify when a condition should be applied.
Working with conditions
A basic condition used by Fastly might look like this:
req.url ~ "^/api/"
This condition tells the cache server to pay attention if a request it receives begins with the string
~ operator performs a Perl-style regular expression match with the
"^/api/" regex and returns true if
req.url matches. You might use this condition when you want to specifically route certain requests for your service. In this example, you might be routing requests to an API backend that exists on your website.
Matching conditions on logical expressions
Conditions can perform matches on more complicated logical expressions. For example:
client.ip == "127.0.0.1": The client requesting a resource on your service has the IP
req.http.host ~ "example.com": The host header of the incoming request is
req.request ~ "POST|PUT" && req.url ~ "^/api/articles/": The request is a POST or a PUT and the URL begins with
req.url conditions shown above all represent configuration variables in VCL.
Operators for complex conditions
You could also get creative and create a more complex condition used by Fastly that might look like this:
req.http.host = "www.example.com" && (req.url !~ "^/foo" || req.url !~ "^/bar/" || req.url !~ "^/baz/")
This condition tells the cache server that the URL should equal
www.example.com and the url cannot match
www.example.com/baz. You might use this type of condition when you have multiple variables or options and want to fine-tune your results. In this example, you are indicating that you don't want URLs that contain
baz by using the following operators:
- ( ) groups your expressions and restricts alteration to part of the regex
- | | performs an alternation where each variable is checked until it finds a variable that is true
- !~ excludes any urls that include the specified variables
Where to go for more information
The Varnish Cache documentation on variables provides a complete list of variables you can use to craft conditions. Keep in mind, however, some of the variables Varnish allows may not be available or may have no meaning in the context of Fastly services. For more information, see our Guide to VCL.