A reverse proxy that aggregates multiple VLESS configurations from various services into a single unified subscription link.
Note
This guide is relevant for Debian-based Linux distributions. Most testing was done with the sing-box client Hiddify
This service requires a valid SSL certificate, so you'll need to get it first.
Once your domain is set up, generate a certificate using the following (make sure ports 80 and/or 443 are open):
sudo apt update && sudo apt upgrade -y
sudo apt install certbot
sudo certbot certonly --standalone -d <domain> --register-unsafely-without-emailThe certificates will be located in: "/etc/letsencrypt/live//"
If you want aggregate not only direct links (vless://) but also subscription URLs, you'll need to enable Subscription on each panel in settings.
All clients you want to merge must share the same subscription ID.
To get the service up and running, you'll also need a plain .txt file with your list configurations available on GitHub or locally.
As mentioned above, both subscription and direct VLESS links are supported:
- Direct
vless://links go into the file as-is. - For subscription links, you must strip out the subscription ID part. For example,
https://<domain>:<port>/<url>/<subscription_id>->https://<domain>:<port>/<url>/(make sure the is a trailing slash).
Example:
https://subscription_link_example:1/imy/
https://subscription_link_example:2/sub/
vless://...
vless://...
vless://...Download and install required tools:
sudo apt update && sudo apt upgrade -y
sudo apt install git curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.shDownload repo:
git clone https://github.com/NoisyCake/vless_config_aggregator.git
cd vless_config_aggregator
cp .env.template .envEdit the .env file with your own values:
| variable | description | example |
|---|---|---|
| LOCAL_MODE | If enabled, the file will be read from the local host. Otherwise, it will be fetched from a remote repository. | on |
| FILE_PATH | Absolute path to the .txt configuration file |
/path/to/configs.txt |
| CONFIG_URL | Link to the .txt configuration file hosted on GitHub |
https://api.github.com/.../file.txt |
| GITHUB_TOKEN | GitHub token (required if the file is in a private repo) | ghp_dhoauigc7898374yduisdhSDHFHGf7 |
| SUB_NAME | Display name for the subscription in clients. If empty, the subscription ID will be used in most cases | HFK |
| SERVER_NAME | Your server’s domain name | domain.or.subdomain |
| PORT | Port the service should run on | 443 |
| URL | Path segment used in the final subscription URL | sub |
| CERT_PATH | Absolute path to your SSL certificate directory | /etc/letsencrypt/live/domain.or.subdomain |
Start everything via Docker: sudo docker compose up --build -d.
The final aggregated link will depend on the contents of your config file and your purposes:
- If there are only direct links or subscription links aren’t needed:
https://{SERVER_NAME}:{PORT}/{URL}/{SUB_NAME}; - If subscriptions are used:
https://{SERVER_NAME}:{PORT}/{URL}/subscription_id/{SUB_NAME}.
In both cases, the /{SUB_NAME} part is obviously unnecessary if the variable is empty.
MIT licensed — see LICENSE for details.
You can track version changes on the Releases page. Suggestions, bug reports, and pull requests are welcome!

