ua-restriction
The ua-restriction Plugin in Stargate enables you to control access to Routes or Services by filtering requests based on the User-Agent header. You can define an allowlist to permit specific User-Agent headers or a denylist to block undesired ones.
A typical use case is restricting web crawlers or bots by denying specific User-Agent strings.
Attributes
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
bypass_missing | boolean | False | false | If true, bypasses checks when the User-Agent header is missing. |
allowlist | array[string] | False | A list of allowed User-Agent headers. | |
denylist | array[string] | False | A list of denied User-Agent headers. | |
message | string | False | "Not allowed" | Custom message included in the response when access is denied. |
allowlist and denylist cannot be configured simultaneously. Use only one to avoid conflicts.
Enable Plugin
To enable the ua-restriction Plugin on a specific Route or Service, follow these steps:
Step 1: Retrieve the Admin Key
Extract the admin_key from config.yaml and save it as an environment variable:
admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')
Step 2: Configure the Plugin
Enable the Plugin on a Route and specify the desired restrictions:
curl http://127.0.0.1:9180/api/stargate/v1/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"plugins": {
"ua-restriction": {
"bypass_missing": true,
"denylist": [
"my-bot2",
"(Twitterspider)/(\\d+)\\.(\\d+)"
],
"message": "Do you want to do something bad?"
}
}
}'
Example Usage
Case 1: Request Without User-Agent Header
When bypass_missing is set to true, requests without the User-Agent header will bypass restrictions and succeed:
curl http://127.0.0.1:9080/index.html -i
HTTP/1.1 200 OK
...
Case 2: Request With Denied User-Agent
If the User-Agent header matches an entry in the denylist (e.g., Twitterspider/2.0), access is denied:
curl http://127.0.0.1:9080/index.html --header 'User-Agent: Twitterspider/2.0'
HTTP/1.1 403 Forbidden
...
{"message":"Do you want to do something bad?"}
Delete Plugin
To remove the ua-restriction Plugin, delete its configuration from the Route or Service. Stargate automatically reloads changes without requiring a restart:
curl http://127.0.0.1:9180/api/stargate/v1/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/index.html",
"plugins": {},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'