Merge branch 'main' into dev

This commit is contained in:
miloschwartz
2026-10-16 11:29:31 -04:00
4 changed files with 59 additions and 21 deletions
+50 -18
View File
@@ -217,9 +217,9 @@ public-resources:
full-domain: app.example.com full-domain: app.example.com
host-header: app.internal host-header: app.internal
tls-server-name: app.internal tls-server-name: app.internal
headers: response-headers:
- name: X-Env - name: Access-Control-Allow-Origin
value: production value: *
rules: rules:
- action: allow - action: allow
match: country match: country
@@ -470,7 +470,7 @@ Example YAML:
```yaml ```yaml
public-resources: public-resources:
my-app: my-app:
headers: request-headers:
- name: X-Env - name: X-Env
value: prod value: prod
``` ```
@@ -479,8 +479,8 @@ Equivalent Compose labels:
```yaml ```yaml
labels: labels:
- pangolin.public-resources.my-app.headers[0].name=X-Env - pangolin.public-resources.my-app.request-headers[0].name=X-Env
- pangolin.public-resources.my-app.headers[0].value=prod - pangolin.public-resources.my-app.request-headers[0].value=prod
``` ```
<Note> <Note>
@@ -524,8 +524,8 @@ services:
- pangolin.public-resources.nginx.name=nginx - pangolin.public-resources.nginx.name=nginx
- pangolin.public-resources.nginx.full-domain=nginx.fosrl.io - pangolin.public-resources.nginx.full-domain=nginx.fosrl.io
- pangolin.public-resources.nginx.protocol=http - pangolin.public-resources.nginx.protocol=http
- pangolin.public-resources.nginx.headers[0].name=X-Example-Header - pangolin.public-resources.nginx.request-headers[0].name=X-Example-Header
- pangolin.public-resources.nginx.headers[0].value=example-value - pangolin.public-resources.nginx.request-headers[0].value=example-value
- pangolin.public-resources.nginx.targets[0].method=http - pangolin.public-resources.nginx.targets[0].method=http
- pangolin.public-resources.nginx.targets[0].path=/path - pangolin.public-resources.nginx.targets[0].path=/path
- pangolin.public-resources.nginx.targets[0].path-match=prefix - pangolin.public-resources.nginx.targets[0].path-match=prefix
@@ -664,9 +664,12 @@ public-resources:
- production - production
host-header: internal.example.local host-header: internal.example.local
tls-server-name: internal.example.local tls-server-name: internal.example.local
headers: request-headers:
- name: X-Env - name: X-Env
value: prod value: prod
response-headers:
- name: Access-Control-Allow-Origin
value: *
rules: rules:
- action: allow - action: allow
match: country match: country
@@ -720,7 +723,7 @@ public-resources:
Container label: `pangolin.public-resources.web-app.mode=http` Container label: `pangolin.public-resources.web-app.mode=http`
</ResponseField> </ResponseField>
<ResponseField name="protocol" type="string"> <ResponseField name="protocol" type="string" deprecated>
Deprecated resource type field. Use `mode` instead. Deprecated resource type field. Use `mode` instead.
**Options**: `http`, `tcp`, `udp`, `ssh`, `rdp`, `vnc` **Options**: `http`, `tcp`, `udp`, `ssh`, `rdp`, `vnc`
@@ -904,31 +907,60 @@ public-resources:
Container label: `pangolin.public-resources.web-app.tls-server-name=internal.example.local` Container label: `pangolin.public-resources.web-app.tls-server-name=internal.example.local`
</ResponseField> </ResponseField>
<ResponseField name="headers" type="array of objects"> <ResponseField name="request-headers" type="array of objects">
Static headers added to proxied requests. Static headers added to proxied requests.
Container labels for arrays must include an index (`[0]`, `[1]`, ...). Container labels for arrays must include an index (`[0]`, `[1]`, ...).
YAML: `headers: [{ name: X-Env, value: prod }]` YAML: `request-headers: [{ name: X-Env, value: prod }]`
Container label: `pangolin.public-resources.web-app.headers[0].name=X-Env` Container label: `pangolin.public-resources.web-app.request-headers[0].name=X-Env`
<Expandable title="Header object"> <Expandable title="Header object">
<ResponseField name="name" type="string" required> <ResponseField name="name" type="string" required>
Header name. Header name.
YAML: `name: X-Env` YAML: `name: X-Env`
Container label: `pangolin.public-resources.web-app.headers[0].name=X-Env` Container label: `pangolin.public-resources.web-app.request-headers[0].name=X-Env`
</ResponseField> </ResponseField>
<ResponseField name="value" type="string" required> <ResponseField name="value" type="string" required>
Header value. Header value.
YAML: `value: prod` YAML: `value: prod`
Container label: `pangolin.public-resources.web-app.headers[0].value=prod` Container label: `pangolin.public-resources.web-app.request-headers[0].value=prod`
</ResponseField> </ResponseField>
</Expandable> </Expandable>
</ResponseField> </ResponseField>
<ResponseField name="response-headers" type="array of objects">
Static headers added to proxied responses.
Container labels for arrays must include an index (`[0]`, `[1]`, ...).
YAML: `response-headers: [{ name: Cache-Control, value: no-cache }]`
Container label: `pangolin.public-resources.web-app.response-headers[0].name=Cache-Control`
<Expandable title="Header object">
<ResponseField name="name" type="string" required>
Header name.
YAML: `name: Cache-Control`
Container label: `pangolin.public-resources.web-app.response-headers[0].name=Cache-Control`
</ResponseField>
<ResponseField name="value" type="string" required>
Header value.
YAML: `value: no-cache`
Container label: `pangolin.public-resources.web-app.response-headers[0].value=no-cache`
</ResponseField>
</Expandable>
</ResponseField>
<ResponseField name="headers" type="array of objects" deprecated>
Deprecated alias for `request-headers`.
</ResponseField>
<ResponseField name="rules" type="array of objects"> <ResponseField name="rules" type="array of objects">
Ordered access rules for public resources. Ordered access rules for public resources.
@@ -1241,7 +1273,7 @@ public-resources:
Container label: `pangolin.public-resources.web-app.targets[0].rewrite-path=/` Container label: `pangolin.public-resources.web-app.targets[0].rewrite-path=/`
</ResponseField> </ResponseField>
<ResponseField name="rewritePath" type="string"> <ResponseField name="rewritePath" type="string" deprecated>
Deprecated alias for `rewrite-path`. Deprecated alias for `rewrite-path`.
</ResponseField> </ResponseField>
@@ -1297,7 +1329,7 @@ public-resources:
Check interval while the target is unhealthy. Check interval while the target is unhealthy.
</ResponseField> </ResponseField>
<ResponseField name="unhealthyInterval" type="integer"> <ResponseField name="unhealthyInterval" type="integer" deprecated>
Deprecated alias for `unhealthy-interval`. Deprecated alias for `unhealthy-interval`.
</ResponseField> </ResponseField>
@@ -1328,7 +1360,7 @@ public-resources:
Whether redirects should be followed. Whether redirects should be followed.
</ResponseField> </ResponseField>
<ResponseField name="followRedirects" type="boolean"> <ResponseField name="followRedirects" type="boolean" deprecated>
Deprecated alias for `follow-redirects`. Deprecated alias for `follow-redirects`.
</ResponseField> </ResponseField>
+1 -1
View File
@@ -4,7 +4,7 @@ description: "How machine clients authenticate with an ID and secret, and how to
--- ---
## Understanding Credentials ## Understanding Credentials
Machine client credentials are only for [machine clients](/manage/clients/understanding-clients#machines): servers and automated systems that connect without a person present. Each machine client is provisioned with a unique identifier (ID), secret, and endpoint. The client uses those three values to establish a secure, encrypted connection to the server. Machine client credentials are only for [machine clients](/manage/clients/understanding-clients#machines): servers and automated systems that connect without a person present. Each machine client is provisioned with a unique identifier (ID), secret, and endpoint. The client uses those three values to establish a secure, encrypted connection to the server. **Machine client credentials can not be shared across different clients**.
User devices do not use machine client credentials. A person logs in with their Pangolin user credentials, or with an external identity provider, through the web login flow in the client. That login creates a session tied to their account. The session is not shown in the dashboard and cannot be regenerated. To disconnect a user device, have the user log out in the client. User devices do not use machine client credentials. A person logs in with their Pangolin user credentials, or with an external identity provider, through the web login flow in the client. That login creates a session tied to their account. The session is not shown in the dashboard and cannot be regenerated. To disconnect a user device, have the user log out in the client.
+7 -1
View File
@@ -239,6 +239,7 @@ sudo pangolin up site \
--secret ts1v7480qqw01j7ba4uiw5y7l58skw7anpji2ndludhgzloh \ --secret ts1v7480qqw01j7ba4uiw5y7l58skw7anpji2ndludhgzloh \
--endpoint https://app.pangolin.net \ --endpoint https://app.pangolin.net \
--native-main --native-main
--no-cloud # Used to prevent it from failing over to Pangolin nodes
``` ```
On Windows, set `nativeMain` in `C:\Users\<Username>\.config\pangolin\site.json` instead: On Windows, set `nativeMain` in `C:\Users\<Username>\.config\pangolin\site.json` instead:
@@ -248,10 +249,15 @@ On Windows, set `nativeMain` in `C:\Users\<Username>\.config\pangolin\site.json`
"id": "34s48my8iba5wsl", "id": "34s48my8iba5wsl",
"secret": "ts1v7480qqw01j7ba4uiw5y7l58skw7anpji2ndludhgzloh", "secret": "ts1v7480qqw01j7ba4uiw5y7l58skw7anpji2ndludhgzloh",
"endpoint": "https://app.pangolin.net", "endpoint": "https://app.pangolin.net",
"nativeMain": true "nativeMain": true,
"noCloud": true
} }
``` ```
<Tip>
Use the no-cloud option to prevent the site from failing over to a Pangolin node if the backhaul node goes down. If you want the site to fail over, leave it out.
</Tip>
<Warning> <Warning>
If you are using a Pangolin Site on Windows, `wintun.dll` is required to run in native mode. If not already provided by the installer, you can download from https://www.wintun.net/ If you are using a Pangolin Site on Windows, `wintun.dll` is required to run in native mode. If not already provided by the installer, you can download from https://www.wintun.net/
</Warning> </Warning>
@@ -13,7 +13,7 @@ This table compiles paths that need to be allowed for various apps to work with
| Lidarr | `/api/*` | | Lidarr | `/api/*` |
| **Media Servers** | | | **Media Servers** | |
| Jellyfin (iOS) | `/system/info/public` | | Jellyfin (iOS) | `/system/info/public` |
| Jellyfin (Roku) | `/System/Info/Public`<br />`/Users/AuthenticateByName`<br />`/Users/Public`<br />`/QuickConnect/Initiate`<br />`/QuickConnect/Connect`<br />`/Users/AuthenticateWithQuickConnect` | | Jellyfin (Roku) | `/System/Info/Public`<br />`/Users/AuthenticateByName`<br />`/Users/Public`<br />`/QuickConnect/Initiate`<br />`/QuickConnect/Connect`<br />`/Users/AuthenticateWithQuickConnect`<br /> `/Branding/Configuration` |
| Audiobookshelf | Audiobookshelf also supports `/audiobookshelf` by default. Each rule should also be applied to this path.<br />`/api/*`<br />`/login`<br />`/auth/*`<br />`/feed/*`<br />`/socket.io/`<br />`/status`<br />`/logout`<br />`/ping`<br />`/public/*`<br />The following is needed for public shares and is optional for clients:<br />`/share/*`<br />`/_nuxt/*.js`<br />`/_nuxt/fonts/*` | | Audiobookshelf | Audiobookshelf also supports `/audiobookshelf` by default. Each rule should also be applied to this path.<br />`/api/*`<br />`/login`<br />`/auth/*`<br />`/feed/*`<br />`/socket.io/`<br />`/status`<br />`/logout`<br />`/ping`<br />`/public/*`<br />The following is needed for public shares and is optional for clients:<br />`/share/*`<br />`/_nuxt/*.js`<br />`/_nuxt/fonts/*` |
| **Management & Monitoring** | | | **Management & Monitoring** | |
| Tautulli | `/api/*` | | Tautulli | `/api/*` |