108 lines
2.9 KiB
Markdown
108 lines
2.9 KiB
Markdown
# Header Tagger
|
|
|
|
**Zoraxy plugin** — Copy custom headers from a source domain to every other domain sharing the same tag.
|
|
|
|
---
|
|
|
|
## The Problem
|
|
|
|
Zoraxy forwards `X-Forwarded-For`, `X-Real-IP`, `X-Forwarded-Proto`, and `X-Forwarded-Host` natively, but when you want a *custom* header on many domains (e.g. `X-Original-Client-IP = $remote_addr`, or a security header), you'd normally set it manually on every domain — one by one.
|
|
|
|
## The Solution
|
|
|
|
Define the header **once** on a source domain, tag it, then let this plugin copy it to all other domains sharing the tag.
|
|
|
|
```
|
|
Tag "tracking":
|
|
├── app.example.com ← manually set X-Original-Client-IP = $remote_addr (SOURCE)
|
|
├── api.example.com ← plugin copies the header here
|
|
└── cdn.example.com ← and here
|
|
```
|
|
|
|
---
|
|
|
|
## Usage
|
|
|
|
1. In Zoraxy, edit a domain → **Advanced Settings → Custom Headers** → add your headers.
|
|
2. Tag that domain (e.g. `tracking`).
|
|
3. Tag the other domains with the same tag.
|
|
4. Open the plugin at `/plugin.ui/zoraxy-headers/`.
|
|
5. Click **Apply to selected** — the plugin copies the source's headers to the selected targets.
|
|
|
|
Use **Remove from selected** to strip those headers from targets.
|
|
|
|
---
|
|
|
|
## Supported Dynamic Header Values
|
|
|
|
Zoraxy v3.1.2+ supports nginx-style `$variable` placeholders in request-direction header values:
|
|
|
|
| Placeholder | Meaning |
|
|
|-------------|---------|
|
|
| `$remote_addr` | Client IP |
|
|
| `$host` | Original host |
|
|
| `$scheme` | http / https |
|
|
| `$request_uri` | Full request URI |
|
|
| `$request_method` | GET / POST / ... |
|
|
| `$http_user_agent` | User-Agent |
|
|
| `$http_referer` | Referer |
|
|
|
|
Example — preserve the original client IP in a custom header:
|
|
|
|
```
|
|
Header: X-Original-Client-IP = $remote_addr (request direction)
|
|
```
|
|
|
|
---
|
|
|
|
## Install
|
|
|
|
```bash
|
|
curl -sSL https://git.lohmar.co.uk/cclohmar/zoraxy-headers/raw/branch/main/install.sh | sudo bash
|
|
```
|
|
|
|
Or manually:
|
|
|
|
```bash
|
|
git clone https://git.lohmar.co.uk/cclohmar/zoraxy-headers.git /opt/zoraxy/plugins/zoraxy-headers
|
|
cd /opt/zoraxy/plugins/zoraxy-headers
|
|
go build -buildvcs=false -o zoraxy-headers .
|
|
systemctl restart zoraxy
|
|
```
|
|
|
|
Then enable **Header Tagger** in Zoraxy → Plugins.
|
|
|
|
---
|
|
|
|
## How It Works
|
|
|
|
The plugin uses Zoraxy's plugin API key (scoped to proxy list + header endpoints) to:
|
|
|
|
1. `GET /api/proxy/list?type=host` → all domains and their tags
|
|
2. Group domains by tag, identify the "source" (a domain that already has headers)
|
|
3. `POST /api/proxy/header/add` / `remove` → copy the source's headers to targets
|
|
|
|
No root access needed — the API key is scoped to only the required endpoints.
|
|
|
|
---
|
|
|
|
## API Endpoints (plugin UI)
|
|
|
|
| Method | Path | Purpose |
|
|
|--------|------|---------|
|
|
| `GET` | `/ui/api/groups` | List tags → domains → source |
|
|
| `POST` | `/ui/api/apply` | Copy source headers to targets |
|
|
| `POST` | `/ui/api/remove` | Remove headers from targets |
|
|
|
|
---
|
|
|
|
## Requirements
|
|
|
|
- Zoraxy v3.2.0+
|
|
- Go 1.21+ (to build)
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
Zoraxy plugin SDK is LGPL. This plugin is open source.
|