Add documentation for clash_api

This commit is contained in:
世界 2022-07-20 07:36:06 +08:00
parent 6ac1b395cf
commit 45643fbed1
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
6 changed files with 72 additions and 10 deletions

View file

@ -0,0 +1,39 @@
### Structure
```json
{
"experimental": {
"clash_api": {
"external_controller": "127.0.0.1:9090",
"external_ui": "folder",
"secret": ""
}
}
}
```
### Clash API Fields
!!! error ""
Clash API is not included by default, see [Installation](/#Installation).
!!! note ""
Traffic statistics and connection management will disable TCP splice in linux and reduce performance, use at your own risk.
#### external_controller
RESTful web API listening address. Disabled if empty.
#### external_ui
A relative path to the configuration directory or an absolute path to a
directory in which you put some static web resource. Clash core will then
serve it at `http://{{external-controller}}/ui`.
#### secret
Secret for the RESTful API (optional)
Authenticate by spedifying HTTP header `Authorization: Bearer ${secret}`
ALWAYS set a secret if RESTful API is listening on 0.0.0.0

View file

@ -10,19 +10,21 @@ sing-box uses JSON for configuration files.
"dns": {}, "dns": {},
"inbounds": {}, "inbounds": {},
"outbounds": {}, "outbounds": {},
"route": {} "route": {},
"experimental": {}
} }
``` ```
### Fields ### Fields
| Key | Format | | Key | Format |
|-------------|------------------------| |----------------|--------------------------------|
| `log` | [Log](./log) | | `log` | [Log](./log) |
| `dns` | [DNS](./dns) | | `dns` | [DNS](./dns) |
| `inbounds` | [Inbound](./inbound) | | `inbounds` | [Inbound](./inbound) |
| `outbounds` | [Outbound](./outbound) | | `outbounds` | [Outbound](./outbound) |
| `route` | [Route](./route) | | `route` | [Route](./route) |
| `experimental` | [Experimental](./experimental) |
### Check ### Check

View file

@ -9,9 +9,20 @@ The universal proxy platform.
sing-box requires Golang 1.18 or a higher version. sing-box requires Golang 1.18 or a higher version.
```bash ```bash
go install github.com/sagernet/sing-box/cmd/sing-box@latest go install -v github.com/sagernet/sing-box/cmd/sing-box@latest
``` ```
Install with options:
```bash
go install -v -tags "with_clash_api,no_gvisor" github.com/sagernet/sing-box/cmd/sing-box@latest
```
| Build Tag | Description |
|------------------|-----------------------------------------------------------------------------------------|
| `with_clash_api` | Build with clash api support, see [Experimental](./configuration/experimental). |
| `no_gvisor` | Build without gVisor, which required by the [Tun](./configuration/inbound/tun) inbound. |
The binary is built under $GOPATH/bin The binary is built under $GOPATH/bin
```bash ```bash

View file

@ -58,7 +58,15 @@ func NewServer(router adapter.Router, logFactory log.ObservableFactory, options
r.Mount("/profile", profileRouter()) r.Mount("/profile", profileRouter())
r.Mount("/cache", cacheRouter()) r.Mount("/cache", cacheRouter())
}) })
if options.ExternalUI != "" {
chiRouter.Group(func(r chi.Router) {
fs := http.StripPrefix("/ui", http.FileServer(http.Dir(options.ExternalUI)))
r.Get("/ui", http.RedirectHandler("/ui/", http.StatusTemporaryRedirect).ServeHTTP)
r.Get("/ui/*", func(w http.ResponseWriter, r *http.Request) {
fs.ServeHTTP(w, r)
})
})
}
return &Server{ return &Server{
logFactory.NewLogger("clash-api"), logFactory.NewLogger("clash-api"),
&http.Server{ &http.Server{

View file

@ -62,6 +62,7 @@ nav:
- Geosite: configuration/route/geosite.md - Geosite: configuration/route/geosite.md
- Route Rule: configuration/route/rule.md - Route Rule: configuration/route/rule.md
- Protocol Sniff: configuration/route/sniff.md - Protocol Sniff: configuration/route/sniff.md
- Experimental: configuration/experimental.md
- Examples: - Examples:
- examples/index.md - examples/index.md
- Shadowsocks Server: examples/ss-server.md - Shadowsocks Server: examples/ss-server.md

View file

@ -6,5 +6,6 @@ type ExperimentalOptions struct {
type ClashAPIOptions struct { type ClashAPIOptions struct {
ExternalController string `json:"external_controller,omitempty"` ExternalController string `json:"external_controller,omitempty"`
ExternalUI string `json:"external_ui,omitempty"`
Secret string `json:"secret,omitempty"` Secret string `json:"secret,omitempty"`
} }