referer-restriction
The referer-restriction Plugin restricts access to Services or Routes by applying rules to the Referer request header. You can define rules using whitelists or blacklists of hostnames, with optional support for wildcards.
Attributes
| Name | Type | Required | Default | Description | 
|---|---|---|---|---|
| whitelist | array[string] | False | List of hostnames to allow. Wildcards are supported with *. | |
| blacklist | array[string] | False | List of hostnames to deny. Wildcards are supported with *. | |
| message | string | False | "Your referer host is not allowed" | Custom message returned when access is denied. | 
| bypass_missing | boolean | False | false | If true, skips checks when theRefererheader is missing or malformed. | 
Only one of whitelist or blacklist must be specified. These attributes cannot be used together.  
Enable Plugin
You can enable the referer-restriction Plugin for a specific Route or Service. The example below demonstrates enabling it for a Route.
Step 1: Retrieve the Admin Key
To manage the configuration, retrieve the admin_key from the config.yaml file 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 with a whitelist and set bypass_missing to true:
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": {
        "referer-restriction": {
            "bypass_missing": true,
            "whitelist": [
                "xx.com",
                "*.xx.com"
            ]
        }
    }
}'
Example Usage
Case 1: Request from Whitelisted Referer
A request with a Referer header matching the whitelist (e.g., http://xx.com/x) is allowed:
curl http://127.0.0.1:9080/index.html -H 'Referer: http://xx.com/x'
HTTP/1.1 200 OK
...
Case 2: Request from Non-Whitelisted Referer
A request with a Referer header not in the whitelist (e.g., http://yy.com/x) is denied:
curl http://127.0.0.1:9080/index.html -H 'Referer: http://yy.com/x'
HTTP/1.1 403 Forbidden
...
{"message":"Your referer host is not allowed"}
Case 3: Request Without Referer Header
Since bypass_missing is set to true, a request without the Referer header is allowed:
curl http://127.0.0.1:9080/index.html
HTTP/1.1 200 OK
...
Delete Plugin
To remove the referer-restriction Plugin from a Route, delete its configuration. 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
        }
    }
}'