mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-12-05 16:06:51 +00:00
Compare commits
152 Commits
v2.13.3
...
0528d65317
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0528d65317 | ||
|
|
f9991084fc | ||
|
|
20e2d5ffb3 | ||
|
|
e3cdc8bb30 | ||
|
|
ba79eefe5e | ||
|
|
bb94ce75c1 | ||
|
|
89b8b747e1 | ||
|
|
3231023513 | ||
|
|
dc89635971 | ||
|
|
cfa98361d1 | ||
|
|
c2177abe39 | ||
|
|
2c6d614597 | ||
|
|
484ce8db3c | ||
|
|
2c11c0c7e2 | ||
|
|
f1039ce2ef | ||
|
|
d49ff6e7c2 | ||
|
|
a87f24c9dc | ||
|
|
decdfec447 | ||
|
|
32ab3faf57 | ||
|
|
c7f999fa7a | ||
|
|
de7d3b0d19 | ||
|
|
2d4b7399c0 | ||
|
|
316b758455 | ||
|
|
890d06c863 | ||
|
|
81f2aa17d4 | ||
|
|
9b4c34915c | ||
|
|
fce569ca21 | ||
|
|
87ec9c4bdf | ||
|
|
2650648d68 | ||
|
|
fdc0c29f28 | ||
|
|
6cae088432 | ||
|
|
9d8c4cc30b | ||
|
|
66ebecdb43 | ||
|
|
60f3ee03c0 | ||
|
|
a4d54a0291 | ||
|
|
7536b1b1c9 | ||
|
|
5288fbd7af | ||
|
|
2c630bbdca | ||
|
|
0ec1a09c30 | ||
|
|
118c4793e3 | ||
|
|
d7384c568f | ||
|
|
0bcfe0bba6 | ||
|
|
74cbfb2c58 | ||
|
|
8ef65caa5a | ||
|
|
bc341c1dff | ||
|
|
5fc9febf1f | ||
|
|
b23ceebfd8 | ||
|
|
c281fc54a1 | ||
|
|
d0f7dc5b48 | ||
|
|
fb53df862e | ||
|
|
8d8463ae41 | ||
|
|
8774cfe5f9 | ||
|
|
4ca5cadd19 | ||
|
|
45a8d50e03 | ||
|
|
960d4bfe6f | ||
|
|
8c3c964c52 | ||
|
|
afd6134a3e | ||
|
|
9b2d60e67b | ||
|
|
9807e25d45 | ||
|
|
824c895f52 | ||
|
|
7f9b9dfea4 | ||
|
|
d848ba9f65 | ||
|
|
47db5c9aa6 | ||
|
|
79a9653b26 | ||
|
|
e5aae1f365 | ||
|
|
8959190d32 | ||
|
|
7e875eb27a | ||
|
|
cf7306e766 | ||
|
|
1c442dcce6 | ||
|
|
dadd10f89b | ||
|
|
8838dabe8a | ||
|
|
75c012b558 | ||
|
|
9be1381ffe | ||
|
|
f40fe56572 | ||
|
|
b4fd242eb7 | ||
|
|
911476f82f | ||
|
|
963125f963 | ||
|
|
e86a34f2f3 | ||
|
|
6ce9567e48 | ||
|
|
f02145c5ef | ||
|
|
66fa08fd8e | ||
|
|
d783cc3b90 | ||
|
|
17cc75fe7d | ||
|
|
15394c6532 | ||
|
|
2d6252d75d | ||
|
|
adee0e39de | ||
|
|
5dde98cf3e | ||
|
|
c41451618e | ||
|
|
1a3d45f6bc | ||
|
|
2ea54975b6 | ||
|
|
0373017a9f | ||
|
|
b043e70fc0 | ||
|
|
2b5182d339 | ||
|
|
3c5ff81a54 | ||
|
|
8aa46c1f40 | ||
|
|
b26db50ae7 | ||
|
|
d66bb2104a | ||
|
|
8e900dbc92 | ||
|
|
66aac3eb3e | ||
|
|
221c3eddbc | ||
|
|
8460b28597 | ||
|
|
0344bb3c19 | ||
|
|
1a36bdce76 | ||
|
|
06d7db43f7 | ||
|
|
4557244744 | ||
|
|
f649288098 | ||
|
|
28df6db52b | ||
|
|
eee749652c | ||
|
|
f6aa25b9b3 | ||
|
|
40db26b686 | ||
|
|
f36d4e6906 | ||
|
|
86c7cbddab | ||
|
|
e52975bf6c | ||
|
|
ff792f76af | ||
|
|
711f312b71 | ||
|
|
9f0f89ff03 | ||
|
|
f3633cb696 | ||
|
|
8773ce25d7 | ||
|
|
c3954e9845 | ||
|
|
87eef10ff8 | ||
|
|
dc03ad8239 | ||
|
|
441a7262cd | ||
|
|
1600599410 | ||
|
|
74d381e7fa | ||
|
|
ae5faa75fa | ||
|
|
ba79bbc750 | ||
|
|
a7231777aa | ||
|
|
3a6b221b0c | ||
|
|
12b000abb9 | ||
|
|
7cde6ee7ca | ||
|
|
df1b414c2e | ||
|
|
b6dbb68ef3 | ||
|
|
b434bba12f | ||
|
|
f1d7203212 | ||
|
|
990ba28831 | ||
|
|
5aa56c63d4 | ||
|
|
8fdb6091f3 | ||
|
|
58182fcbdf | ||
|
|
b3b1e94b8c | ||
|
|
123f7d1999 | ||
|
|
9de40f067b | ||
|
|
b21d6d9d78 | ||
|
|
bf1ad15ed7 | ||
|
|
1209303a1d | ||
|
|
cd3a09ebf6 | ||
|
|
d0e20d4f1b | ||
|
|
ceb098fcfe | ||
|
|
639ba3a525 | ||
|
|
a85b5f664f | ||
|
|
7e28d8a5d6 | ||
|
|
8991e88ff3 | ||
|
|
e2a8ffa2d3 |
@@ -1,7 +1,7 @@
|
||||
<p align="center">
|
||||
<img src="https://nginxproxymanager.com/github.png">
|
||||
<br><br>
|
||||
<img src="https://img.shields.io/badge/version-2.13.3-green.svg?style=for-the-badge">
|
||||
<img src="https://img.shields.io/badge/version-2.13.5-green.svg?style=for-the-badge">
|
||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||
</a>
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
"azure": {
|
||||
"name": "Azure",
|
||||
"package_name": "certbot-dns-azure",
|
||||
"version": "~=1.2.0",
|
||||
"dependencies": "",
|
||||
"version": "~=2.6.1",
|
||||
"dependencies": "azure-mgmt-dns==8.2.0",
|
||||
"credentials": "# This plugin supported API authentication using either Service Principals or utilizing a Managed Identity assigned to the virtual machine.\n# Regardless which authentication method used, the identity will need the “DNS Zone Contributor” role assigned to it.\n# As multiple Azure DNS Zones in multiple resource groups can exist, the config file needs a mapping of zone to resource group ID. Multiple zones -> ID mappings can be listed by using the key dns_azure_zoneX where X is a unique number. At least 1 zone mapping is required.\n\n# Using a service principal (option 1)\ndns_azure_sp_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\ndns_azure_sp_client_secret = E-xqXU83Y-jzTI6xe9fs2YC~mck3ZzUih9\ndns_azure_tenant_id = ed1090f3-ab18-4b12-816c-599af8a88cf7\n\n# Using used assigned MSI (option 2)\n# dns_azure_msi_client_id = 912ce44a-0156-4669-ae22-c16a17d34ca5\n\n# Using system assigned MSI (option 3)\n# dns_azure_msi_system_assigned = true\n\n# Zones (at least one always required)\ndns_azure_zone1 = example.com:/subscriptions/c135abce-d87d-48df-936c-15596c6968a5/resourceGroups/dns1\ndns_azure_zone2 = example.org:/subscriptions/99800903-fb14-4992-9aff-12eaf2744622/resourceGroups/dns2",
|
||||
"full_plugin_name": "dns-azure"
|
||||
},
|
||||
@@ -482,7 +482,7 @@
|
||||
"porkbun": {
|
||||
"name": "Porkbun",
|
||||
"package_name": "certbot-dns-porkbun",
|
||||
"version": "~=0.9",
|
||||
"version": "~=0.11.0",
|
||||
"dependencies": "",
|
||||
"credentials": "dns_porkbun_key=your-porkbun-api-key\ndns_porkbun_secret=your-porkbun-api-secret",
|
||||
"full_plugin_name": "dns-porkbun"
|
||||
|
||||
84
backend/internal/remote-version.js
Normal file
84
backend/internal/remote-version.js
Normal file
@@ -0,0 +1,84 @@
|
||||
import https from "node:https";
|
||||
import { ProxyAgent } from "proxy-agent";
|
||||
import { debug, remoteVersion as logger } from "../logger.js";
|
||||
import pjson from "../package.json" with { type: "json" };
|
||||
|
||||
const VERSION_URL = "https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest";
|
||||
|
||||
const internalRemoteVersion = {
|
||||
cache_timeout: 1000 * 60 * 15, // 15 minutes
|
||||
last_result: null,
|
||||
last_fetch_time: null,
|
||||
|
||||
/**
|
||||
* Fetch the latest version info, using a cached result if within the cache timeout period.
|
||||
* @return {Promise<{current: string, latest: string, update_available: boolean}>} Version info
|
||||
*/
|
||||
get: async () => {
|
||||
if (
|
||||
!internalRemoteVersion.last_result ||
|
||||
!internalRemoteVersion.last_fetch_time ||
|
||||
Date.now() - internalRemoteVersion.last_fetch_time > internalRemoteVersion.cache_timeout
|
||||
) {
|
||||
const raw = await internalRemoteVersion.fetchUrl(VERSION_URL);
|
||||
const data = JSON.parse(raw);
|
||||
internalRemoteVersion.last_result = data;
|
||||
internalRemoteVersion.last_fetch_time = Date.now();
|
||||
} else {
|
||||
debug(logger, "Using cached remote version result");
|
||||
}
|
||||
|
||||
const latestVersion = internalRemoteVersion.last_result.tag_name;
|
||||
const version = pjson.version.split("-").shift().split(".");
|
||||
const currentVersion = `v${version[0]}.${version[1]}.${version[2]}`;
|
||||
return {
|
||||
current: currentVersion,
|
||||
latest: latestVersion,
|
||||
update_available: internalRemoteVersion.compareVersions(currentVersion, latestVersion),
|
||||
};
|
||||
},
|
||||
|
||||
fetchUrl: (url) => {
|
||||
const agent = new ProxyAgent();
|
||||
const headers = {
|
||||
"User-Agent": `NginxProxyManager v${pjson.version}`,
|
||||
};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
logger.info(`Fetching ${url}`);
|
||||
return https
|
||||
.get(url, { agent, headers }, (res) => {
|
||||
res.setEncoding("utf8");
|
||||
let raw_data = "";
|
||||
res.on("data", (chunk) => {
|
||||
raw_data += chunk;
|
||||
});
|
||||
res.on("end", () => {
|
||||
resolve(raw_data);
|
||||
});
|
||||
})
|
||||
.on("error", (err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
compareVersions: (current, latest) => {
|
||||
const cleanCurrent = current.replace(/^v/, "");
|
||||
const cleanLatest = latest.replace(/^v/, "");
|
||||
|
||||
const currentParts = cleanCurrent.split(".").map(Number);
|
||||
const latestParts = cleanLatest.split(".").map(Number);
|
||||
|
||||
for (let i = 0; i < Math.max(currentParts.length, latestParts.length); i++) {
|
||||
const curr = currentParts[i] || 0;
|
||||
const lat = latestParts[i] || 0;
|
||||
|
||||
if (lat > curr) return true;
|
||||
if (lat < curr) return false;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
};
|
||||
|
||||
export default internalRemoteVersion;
|
||||
@@ -15,6 +15,7 @@ const certbot = new signale.Signale({ scope: "Certbot ", ...opts });
|
||||
const importer = new signale.Signale({ scope: "Importer ", ...opts });
|
||||
const setup = new signale.Signale({ scope: "Setup ", ...opts });
|
||||
const ipRanges = new signale.Signale({ scope: "IP Ranges", ...opts });
|
||||
const remoteVersion = new signale.Signale({ scope: "Remote Version", ...opts });
|
||||
|
||||
const debug = (logger, ...args) => {
|
||||
if (isDebugMode()) {
|
||||
@@ -22,4 +23,4 @@ const debug = (logger, ...args) => {
|
||||
}
|
||||
};
|
||||
|
||||
export { debug, global, migrate, express, access, nginx, ssl, certbot, importer, setup, ipRanges };
|
||||
export { debug, global, migrate, express, access, nginx, ssl, certbot, importer, setup, ipRanges, remoteVersion };
|
||||
|
||||
@@ -14,6 +14,7 @@ import schemaRoutes from "./schema.js";
|
||||
import settingsRoutes from "./settings.js";
|
||||
import tokensRoutes from "./tokens.js";
|
||||
import usersRoutes from "./users.js";
|
||||
import versionRoutes from "./version.js";
|
||||
|
||||
const router = express.Router({
|
||||
caseSensitive: true,
|
||||
@@ -46,6 +47,7 @@ router.use("/users", usersRoutes);
|
||||
router.use("/audit-log", auditLogRoutes);
|
||||
router.use("/reports", reportsRoutes);
|
||||
router.use("/settings", settingsRoutes);
|
||||
router.use("/version", versionRoutes);
|
||||
router.use("/nginx/proxy-hosts", proxyHostsRoutes);
|
||||
router.use("/nginx/redirection-hosts", redirectionHostsRoutes);
|
||||
router.use("/nginx/dead-hosts", deadHostsRoutes);
|
||||
|
||||
40
backend/routes/version.js
Normal file
40
backend/routes/version.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import express from "express";
|
||||
import internalRemoteVersion from "../internal/remote-version.js";
|
||||
import { debug, express as logger } from "../logger.js";
|
||||
|
||||
const router = express.Router({
|
||||
caseSensitive: true,
|
||||
strict: true,
|
||||
mergeParams: true,
|
||||
});
|
||||
|
||||
/**
|
||||
* /api/version/check
|
||||
*/
|
||||
router
|
||||
.route("/check")
|
||||
.options((_, res) => {
|
||||
res.sendStatus(204);
|
||||
})
|
||||
|
||||
/**
|
||||
* GET /api/version/check
|
||||
*
|
||||
* Check for available updates
|
||||
*/
|
||||
.get(async (req, res, _next) => {
|
||||
try {
|
||||
const data = await internalRemoteVersion.get();
|
||||
res.status(200).send(data);
|
||||
} catch (error) {
|
||||
debug(logger, `${req.method.toUpperCase()} ${req.path}: ${error}`);
|
||||
// Send 200 even though there's an error to avoid triggering update checks repeatedly
|
||||
res.status(200).send({
|
||||
current: null,
|
||||
latest: null,
|
||||
update_available: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
||||
23
backend/schema/components/check-version-object.json
Normal file
23
backend/schema/components/check-version-object.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Check Version object",
|
||||
"additionalProperties": false,
|
||||
"required": ["current", "latest", "update_available"],
|
||||
"properties": {
|
||||
"current": {
|
||||
"type": ["string", "null"],
|
||||
"description": "Current version string",
|
||||
"example": "v2.10.1"
|
||||
},
|
||||
"latest": {
|
||||
"type": ["string", "null"],
|
||||
"description": "Latest version string",
|
||||
"example": "v2.13.4"
|
||||
},
|
||||
"update_available": {
|
||||
"type": "boolean",
|
||||
"description": "Whether there's an update available",
|
||||
"example": true
|
||||
}
|
||||
}
|
||||
}
|
||||
26
backend/schema/paths/version/check/get.json
Normal file
26
backend/schema/paths/version/check/get.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"operationId": "checkVersion",
|
||||
"summary": "Returns any new version data from github",
|
||||
"tags": ["public"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "200 response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"examples": {
|
||||
"default": {
|
||||
"value": {
|
||||
"current": "v2.12.0",
|
||||
"latest": "v2.13.4",
|
||||
"update_available": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"schema": {
|
||||
"$ref": "../../../components/check-version-object.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -293,6 +293,11 @@
|
||||
"$ref": "./paths/tokens/post.json"
|
||||
}
|
||||
},
|
||||
"/version/check": {
|
||||
"get": {
|
||||
"$ref": "./paths/version/check/get.json"
|
||||
}
|
||||
},
|
||||
"/users": {
|
||||
"get": {
|
||||
"$ref": "./paths/users/get.json"
|
||||
|
||||
@@ -1430,9 +1430,9 @@ isexe@^2.0.0:
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
|
||||
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b"
|
||||
integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
|
||||
@@ -24,9 +24,13 @@ services:
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
expose:
|
||||
- "80-81/tcp"
|
||||
- "80/tcp"
|
||||
- "81/tcp"
|
||||
- "443/tcp"
|
||||
- "1500-1503/tcp"
|
||||
- "1500/tcp"
|
||||
- "1501/tcp"
|
||||
- "1502/tcp"
|
||||
- "1503/tcp"
|
||||
networks:
|
||||
fulltest:
|
||||
aliases:
|
||||
|
||||
2
frontend/.gitignore
vendored
2
frontend/.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
src/locale/lang
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
@@ -8,7 +8,16 @@
|
||||
|
||||
const allLocales = [
|
||||
["en", "en-US"],
|
||||
["fa", "fa-IR"],
|
||||
["de", "de-DE"],
|
||||
["es", "es-ES"],
|
||||
["it", "it-IT"],
|
||||
["ja", "ja-JP"],
|
||||
["nl", "nl-NL"],
|
||||
["pl", "pl-PL"],
|
||||
["ru", "ru-RU"],
|
||||
["sk", "sk-SK"],
|
||||
["vi", "vi-VN"],
|
||||
["zh", "zh-CN"],
|
||||
];
|
||||
|
||||
const ignoreUnused = [
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Nginx Proxy Manager</title>
|
||||
<meta name="description" content="In The Office Planner" />
|
||||
<link rel="preload" href="/images/logo-no-text.svg" as="image" type="image/svg+xml" fetchPriority="high">
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="180x180"
|
||||
|
||||
@@ -13,6 +13,15 @@
|
||||
--tblr-backdrop-opacity: 0.8 !important;
|
||||
}
|
||||
|
||||
[data-bs-theme="dark"] .modal-content {
|
||||
--tblr-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
[data-bs-theme="dark"] .modal-backdrop {
|
||||
--tblr-backdrop-bg: #000 !important;
|
||||
--tblr-backdrop-opacity: 0.65 !important;
|
||||
}
|
||||
|
||||
.domain-name {
|
||||
font-family: monospace;
|
||||
}
|
||||
@@ -95,3 +104,15 @@ label.row {
|
||||
border-radius: var(--tblr-border-radius) 0 0 var(--tblr-border-radius);
|
||||
}
|
||||
}
|
||||
|
||||
/* Fix for dropdown menus being clipped by table-responsive containers. */
|
||||
.table-responsive .dropdown {
|
||||
position: static;
|
||||
}
|
||||
|
||||
/* Fix for Tabler scrollbar compensation */
|
||||
@media (min-width: 992px) {
|
||||
:host, :root {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
8
frontend/src/api/backend/checkVersion.ts
Normal file
8
frontend/src/api/backend/checkVersion.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import * as api from "./base";
|
||||
import type { VersionCheckResponse } from "./responseTypes";
|
||||
|
||||
export async function checkVersion(): Promise<VersionCheckResponse> {
|
||||
return await api.get({
|
||||
url: "/version/check",
|
||||
});
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
export * from "./checkVersion";
|
||||
export * from "./createAccessList";
|
||||
export * from "./createCertificate";
|
||||
export * from "./createDeadHost";
|
||||
|
||||
@@ -19,3 +19,9 @@ export interface ValidatedCertificateResponse {
|
||||
export interface LoginAsTokenResponse extends TokenResponse {
|
||||
user: User;
|
||||
}
|
||||
|
||||
export interface VersionCheckResponse {
|
||||
current: string | null;
|
||||
latest: string | null;
|
||||
updateAvailable: boolean;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import cn from "classnames";
|
||||
import { useFormikContext } from "formik";
|
||||
import { useState } from "react";
|
||||
import type { AccessListClient } from "src/api/backend";
|
||||
import { T } from "src/locale";
|
||||
import { intl, T } from "src/locale";
|
||||
|
||||
interface Props {
|
||||
initialValues: AccessListClient[];
|
||||
@@ -65,8 +65,8 @@ export function AccessClientFields({ initialValues, name = "clients" }: Props) {
|
||||
value={client.directive}
|
||||
onChange={(e) => handleChange(idx, "directive", e.target.value)}
|
||||
>
|
||||
<option value="allow">Allow</option>
|
||||
<option value="deny">Deny</option>
|
||||
<option value="allow"><T id="action.allow" /></option>
|
||||
<option value="deny"><T id="action.deny" /></option>
|
||||
</select>
|
||||
</span>
|
||||
<input
|
||||
@@ -76,7 +76,7 @@ export function AccessClientFields({ initialValues, name = "clients" }: Props) {
|
||||
autoComplete="off"
|
||||
value={client.address}
|
||||
onChange={(e) => handleChange(idx, "address", e.target.value)}
|
||||
placeholder="192.168.1.100 or 192.168.1.0/24 or 2001:0db8::/32"
|
||||
placeholder={intl.formatMessage({ id: "access-list.rule-source.placeholder" })}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -112,7 +112,7 @@ export function AccessClientFields({ initialValues, name = "clients" }: Props) {
|
||||
value="deny"
|
||||
disabled
|
||||
>
|
||||
<option value="deny">Deny</option>
|
||||
<option value="deny"><T id="action.deny" /></option>
|
||||
</select>
|
||||
</span>
|
||||
<input
|
||||
|
||||
@@ -5,7 +5,7 @@ import { useState } from "react";
|
||||
import Select, { type ActionMeta } from "react-select";
|
||||
import type { DNSProvider } from "src/api/backend";
|
||||
import { useDnsProviders } from "src/hooks";
|
||||
import { T } from "src/locale";
|
||||
import { intl, T } from "src/locale";
|
||||
import styles from "./DNSProviderFields.module.css";
|
||||
|
||||
interface DNSProviderOption {
|
||||
@@ -57,7 +57,7 @@ export function DNSProviderFields({ showBoundaryBox = false }: Props) {
|
||||
id="dnsProvider"
|
||||
closeMenuOnSelect={true}
|
||||
isClearable={false}
|
||||
placeholder="Select a Provider..."
|
||||
placeholder={intl.formatMessage({ id: "certificates.dns.provider.placeholder" })}
|
||||
isLoading={isLoading}
|
||||
isSearchable
|
||||
onChange={handleChange}
|
||||
@@ -116,7 +116,7 @@ export function DNSProviderFields({ showBoundaryBox = false }: Props) {
|
||||
type="number"
|
||||
className="form-control"
|
||||
min={0}
|
||||
max={600}
|
||||
max={7200}
|
||||
{...field}
|
||||
/>
|
||||
<small className="text-muted">
|
||||
|
||||
@@ -5,7 +5,11 @@ import { useTheme } from "src/hooks";
|
||||
import { changeLocale, getFlagCodeForLocale, localeOptions, T } from "src/locale";
|
||||
import styles from "./LocalePicker.module.css";
|
||||
|
||||
function LocalePicker() {
|
||||
interface Props {
|
||||
menuAlign?: "start" | "end";
|
||||
}
|
||||
|
||||
function LocalePicker({ menuAlign = "start" }: Props) {
|
||||
const { locale, setLocale } = useLocaleState();
|
||||
const { getTheme } = useTheme();
|
||||
|
||||
@@ -23,22 +27,24 @@ function LocalePicker() {
|
||||
<button type="button" className={cns} data-bs-toggle="dropdown">
|
||||
<Flag countryCode={getFlagCodeForLocale(locale)} />
|
||||
</button>
|
||||
<div className="dropdown-menu">
|
||||
{localeOptions.map((item) => {
|
||||
return (
|
||||
<a
|
||||
className="dropdown-item"
|
||||
href={`/locale/${item[0]}`}
|
||||
key={`locale-${item[0]}`}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
changeTo(item[0]);
|
||||
}}
|
||||
>
|
||||
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
|
||||
</a>
|
||||
);
|
||||
<div
|
||||
className={cn("dropdown-menu", {
|
||||
"dropdown-menu-end": menuAlign === "end",
|
||||
})}
|
||||
>
|
||||
{localeOptions.map((item: any) => (
|
||||
<a
|
||||
className="dropdown-item"
|
||||
href={`/locale/${item[0]}`}
|
||||
key={`locale-${item[0]}`}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
changeTo(item[0]);
|
||||
}}
|
||||
>
|
||||
<Flag countryCode={getFlagCodeForLocale(item[0])} /> <T id={`locale-${item[1]}`} />
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -2,5 +2,5 @@ interface Props {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
export function SiteContainer({ children }: Props) {
|
||||
return <div className="container-xl py-3">{children}</div>;
|
||||
return <div className="container-xl py-3 min-w-0 overflow-x-auto">{children}</div>;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { useHealth } from "src/hooks";
|
||||
import { useCheckVersion, useHealth } from "src/hooks";
|
||||
import { T } from "src/locale";
|
||||
|
||||
export function SiteFooter() {
|
||||
const health = useHealth();
|
||||
const { data: versionData } = useCheckVersion();
|
||||
|
||||
const getVersion = () => {
|
||||
if (!health.data) {
|
||||
@@ -55,6 +56,19 @@ export function SiteFooter() {
|
||||
{getVersion()}{" "}
|
||||
</a>
|
||||
</li>
|
||||
{versionData?.updateAvailable && versionData?.latest && (
|
||||
<li className="list-inline-item">
|
||||
<a
|
||||
href={`https://github.com/NginxProxyManager/nginx-proxy-manager/releases/tag/${versionData.latest}`}
|
||||
className="link-warning fw-bold"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
title={`New version ${versionData.latest} is available`}
|
||||
>
|
||||
<T id="update-available" data={{ latestVersion: versionData.latest }} />
|
||||
</a>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -25,7 +25,7 @@ export function SiteHeader() {
|
||||
>
|
||||
<span className="navbar-toggler-icon" />
|
||||
</button>
|
||||
<div className="navbar-brand navbar-brand-autodark d-none-navbar-horizontal pe-0 pe-md-3">
|
||||
<div className="navbar-brand navbar-brand-autodark pe-0 pe-md-3">
|
||||
<NavLink to="/">
|
||||
<div className={styles.logo}>
|
||||
<img
|
||||
@@ -48,11 +48,11 @@ export function SiteHeader() {
|
||||
<ThemeSwitcher />
|
||||
</div>
|
||||
</div>
|
||||
<div className="nav-item d-none d-md-flex me-3">
|
||||
<div className="nav-item d-md-flex">
|
||||
<div className="nav-item dropdown">
|
||||
<a
|
||||
href="/"
|
||||
className="nav-link d-flex lh-1 p-0 px-2"
|
||||
className="nav-link d-flex lh-1"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-label="Open user menu"
|
||||
>
|
||||
@@ -70,6 +70,22 @@ export function SiteHeader() {
|
||||
</div>
|
||||
</a>
|
||||
<div className="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
|
||||
<div className="d-md-none">
|
||||
{/* biome-ignore lint/a11y/noStaticElementInteractions lint/a11y/useKeyWithClickEvents: This div is not interactive. */}
|
||||
<div className="p-2 pb-1 pe-1 d-flex align-items-center" onClick={e => e.stopPropagation()}>
|
||||
<div className="ps-2 pe-1 me-auto">
|
||||
<div>{currentUser?.nickname}</div>
|
||||
<div className="mt-1 small text-secondary text-nowrap">
|
||||
<T id={isAdmin ? "role.admin" : "role.standard-user"} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="d-flex align-items-center">
|
||||
<ThemeSwitcher className="me-n2" />
|
||||
<LocalePicker menuAlign="end" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="dropdown-divider" />
|
||||
</div>
|
||||
<a
|
||||
href="?"
|
||||
className="dropdown-item"
|
||||
|
||||
@@ -176,21 +176,17 @@ const getMenuDropown = (item: MenuItem, onClick?: () => void) => {
|
||||
};
|
||||
|
||||
export function SiteMenu() {
|
||||
// This is hacky AF. But that's the price of using a non-react UI kit.
|
||||
const closeMenus = () => {
|
||||
const navMenus = document.querySelectorAll(".nav-item.dropdown");
|
||||
navMenus.forEach((menu) => {
|
||||
menu.classList.remove("show");
|
||||
const dropdown = menu.querySelector(".dropdown-menu");
|
||||
if (dropdown) {
|
||||
dropdown.classList.remove("show");
|
||||
}
|
||||
});
|
||||
};
|
||||
const closeMenu = () => setTimeout(() => {
|
||||
const navbarToggler = document.querySelector<HTMLElement>(".navbar-toggler");
|
||||
const navbarMenu = document.querySelector("#navbar-menu");
|
||||
if (navbarToggler && navbarMenu?.classList.contains("show")) {
|
||||
navbarToggler.click();
|
||||
}
|
||||
}, 300);
|
||||
|
||||
return (
|
||||
<header className="navbar-expand-md">
|
||||
<div className="collapse navbar-collapse" id="navbar-menu">
|
||||
<div className="collapse navbar-collapse" id="navbar-menu">
|
||||
<div className="navbar">
|
||||
<div className="container-xl">
|
||||
<div className="row flex-column flex-md-row flex-fill align-items-center">
|
||||
@@ -198,7 +194,7 @@ export function SiteMenu() {
|
||||
<ul className="navbar-nav">
|
||||
{menuItems.length > 0 &&
|
||||
menuItems.map((item) => {
|
||||
return getMenuItem(item, closeMenus);
|
||||
return getMenuItem(item, closeMenu);
|
||||
})}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -10,35 +10,42 @@ interface Props {
|
||||
color?: string;
|
||||
}
|
||||
|
||||
const DomainLink = ({ domain, color }: { domain: string; color?: string }) => {
|
||||
const DomainLink = ({ domain, color }: { domain?: string; color?: string }) => {
|
||||
// when domain contains a wildcard, make the link go nowhere.
|
||||
let onClick: ((e: React.MouseEvent) => void) | undefined;
|
||||
if (domain.includes("*")) {
|
||||
onClick = (e: React.MouseEvent) => e.preventDefault();
|
||||
// Apparently the domain can be null or undefined sometimes.
|
||||
// This try is just a safeguard to prevent the whole formatter from breaking.
|
||||
if (!domain) return null;
|
||||
try {
|
||||
let onClick: ((e: React.MouseEvent) => void) | undefined;
|
||||
if (domain.includes("*")) {
|
||||
onClick = (e: React.MouseEvent) => e.preventDefault();
|
||||
}
|
||||
return (
|
||||
<a
|
||||
key={domain}
|
||||
href={`http://${domain}`}
|
||||
target="_blank"
|
||||
onClick={onClick}
|
||||
className={cn("badge", color ? `bg-${color}-lt` : null, "domain-name", "me-2")}
|
||||
>
|
||||
{domain}
|
||||
</a>
|
||||
);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
return (
|
||||
<a
|
||||
key={domain}
|
||||
href={`http://${domain}`}
|
||||
target="_blank"
|
||||
onClick={onClick}
|
||||
className={cn("badge", color ? `bg-${color}-lt` : null, "domain-name", "me-2")}
|
||||
>
|
||||
{domain}
|
||||
</a>
|
||||
);
|
||||
};
|
||||
|
||||
export function DomainsFormatter({ domains, createdOn, niceName, provider, color }: Props) {
|
||||
const elms: ReactNode[] = [];
|
||||
if (domains.length === 0 && !niceName) {
|
||||
if ((!domains || domains.length === 0) && !niceName) {
|
||||
elms.push(
|
||||
<span key="nice-name" className="badge bg-danger-lt me-2">
|
||||
Unknown
|
||||
</span>,
|
||||
);
|
||||
}
|
||||
if (niceName && provider !== "letsencrypt") {
|
||||
if (!domains || (niceName && provider !== "letsencrypt")) {
|
||||
elms.push(
|
||||
<span key="nice-name" className="badge bg-info-lt me-2">
|
||||
{niceName}
|
||||
@@ -46,7 +53,9 @@ export function DomainsFormatter({ domains, createdOn, niceName, provider, color
|
||||
);
|
||||
}
|
||||
|
||||
domains.map((domain: string) => elms.push(<DomainLink key={domain} domain={domain} color={color} />));
|
||||
if (domains) {
|
||||
domains.map((domain: string) => elms.push(<DomainLink key={domain} domain={domain} color={color} />));
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex-fill">
|
||||
|
||||
@@ -12,10 +12,12 @@ interface TableLayoutProps<TFields> {
|
||||
function TableLayout<TFields>(props: TableLayoutProps<TFields>) {
|
||||
const hasRows = props.tableInstance.getRowModel().rows.length > 0;
|
||||
return (
|
||||
<table className="table table-vcenter table-selectable mb-0">
|
||||
{hasRows ? <TableHeader tableInstance={props.tableInstance} /> : null}
|
||||
<TableBody {...props} />
|
||||
</table>
|
||||
<div className="table-responsive">
|
||||
<table className="table table-vcenter table-selectable mb-0">
|
||||
{hasRows ? <TableHeader tableInstance={props.tableInstance} /> : null}
|
||||
<TableBody {...props} />
|
||||
</table>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ export * from "./useAuditLog";
|
||||
export * from "./useAuditLogs";
|
||||
export * from "./useCertificate";
|
||||
export * from "./useCertificates";
|
||||
export * from "./useCheckVersion";
|
||||
export * from "./useDeadHost";
|
||||
export * from "./useDeadHosts";
|
||||
export * from "./useDnsProviders";
|
||||
|
||||
18
frontend/src/hooks/useCheckVersion.ts
Normal file
18
frontend/src/hooks/useCheckVersion.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import { checkVersion, type VersionCheckResponse } from "src/api/backend";
|
||||
|
||||
const fetchVersion = () => checkVersion();
|
||||
|
||||
const useCheckVersion = (options = {}) => {
|
||||
return useQuery<VersionCheckResponse, Error>({
|
||||
queryKey: ["version-check"],
|
||||
queryFn: fetchVersion,
|
||||
refetchOnWindowFocus: false,
|
||||
retry: 5,
|
||||
refetchInterval: 30 * 1000, // 30 seconds
|
||||
staleTime: 5 * 60 * 1000, // 5 mins
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export { fetchVersion, useCheckVersion };
|
||||
67
frontend/src/locale/IntlProvider.tsx
Normal file → Executable file
67
frontend/src/locale/IntlProvider.tsx
Normal file → Executable file
@@ -1,25 +1,59 @@
|
||||
import { createIntl, createIntlCache } from "react-intl";
|
||||
import langDe from "./lang/de.json";
|
||||
import langEn from "./lang/en.json";
|
||||
import langEs from "./lang/es.json";
|
||||
import langIt from "./lang/it.json";
|
||||
import langJa from "./lang/ja.json";
|
||||
import langList from "./lang/lang-list.json";
|
||||
import langNl from "./lang/nl.json";
|
||||
import langPl from "./lang/pl.json";
|
||||
import langRu from "./lang/ru.json";
|
||||
import langSk from "./lang/sk.json";
|
||||
import langVi from "./lang/vi.json";
|
||||
import langZh from "./lang/zh.json";
|
||||
|
||||
// first item of each array should be the language code,
|
||||
// not the country code
|
||||
// Remember when adding to this list, also update check-locales.js script
|
||||
const localeOptions = [["en", "en-US"]];
|
||||
const localeOptions = [
|
||||
["en", "en-US", langEn],
|
||||
["de", "de-DE", langDe],
|
||||
["es", "es-ES", langEs],
|
||||
["ja", "ja-JP", langJa],
|
||||
["it", "it-IT", langIt],
|
||||
["nl", "nl-NL", langNl],
|
||||
["pl", "pl-PL", langPl],
|
||||
["ru", "ru-RU", langRu],
|
||||
["sk", "sk-SK", langSk],
|
||||
["vi", "vi-VN", langVi],
|
||||
["zh", "zh-CN", langZh],
|
||||
];
|
||||
|
||||
const loadMessages = (locale?: string): typeof langList & typeof langEn => {
|
||||
const thisLocale = locale || "en";
|
||||
switch (thisLocale.slice(0, 2)) {
|
||||
default:
|
||||
return Object.assign({}, langList, langEn);
|
||||
const thisLocale = (locale || "en").slice(0, 2);
|
||||
|
||||
// ensure this lang exists in localeOptions above, otherwise fallback to en
|
||||
if (thisLocale === "en" || !localeOptions.some(([code]) => code === thisLocale)) {
|
||||
return Object.assign({}, langList, langEn);
|
||||
}
|
||||
|
||||
return Object.assign({}, langList, langEn, localeOptions.find(([code]) => code === thisLocale)?.[2]);
|
||||
};
|
||||
|
||||
const getFlagCodeForLocale = (locale?: string) => {
|
||||
switch (locale) {
|
||||
default:
|
||||
return "EN";
|
||||
const thisLocale = (locale || "en").slice(0, 2);
|
||||
|
||||
// only add to this if your flag is different from the locale code
|
||||
const specialCases: Record<string, string> = {
|
||||
ja: "jp", // Japan
|
||||
zh: "cn", // China
|
||||
vi: "vn", // Vietnam
|
||||
};
|
||||
|
||||
if (specialCases[thisLocale]) {
|
||||
return specialCases[thisLocale].toUpperCase();
|
||||
}
|
||||
return thisLocale.toUpperCase();
|
||||
};
|
||||
|
||||
const getLocale = (short = false) => {
|
||||
@@ -40,10 +74,7 @@ const getLocale = (short = false) => {
|
||||
const cache = createIntlCache();
|
||||
|
||||
const initialMessages = loadMessages(getLocale());
|
||||
let intl = createIntl(
|
||||
{ locale: getLocale(), messages: initialMessages },
|
||||
cache,
|
||||
);
|
||||
let intl = createIntl({ locale: getLocale(), messages: initialMessages }, cache);
|
||||
|
||||
const changeLocale = (locale: string): void => {
|
||||
const messages = loadMessages(locale);
|
||||
@@ -83,12 +114,6 @@ const T = ({
|
||||
);
|
||||
};
|
||||
|
||||
export {
|
||||
localeOptions,
|
||||
getFlagCodeForLocale,
|
||||
getLocale,
|
||||
createIntl,
|
||||
changeLocale,
|
||||
intl,
|
||||
T,
|
||||
};
|
||||
console.log("L:", localeOptions);
|
||||
|
||||
export { localeOptions, getFlagCodeForLocale, getLocale, createIntl, changeLocale, intl, T };
|
||||
|
||||
@@ -39,8 +39,9 @@ not be complete by the time you're reading this:
|
||||
|
||||
- frontend/src/locale/src/[yourlang].json
|
||||
- frontend/src/locale/src/lang-list.json
|
||||
- frontend/src/locale/src/HelpDoc/*
|
||||
- frontend/src/locale/src/HelpDoc/[yourlang]/*
|
||||
- frontend/src/locale/IntlProvider.tsx
|
||||
- frontend/check-locales.cjs
|
||||
|
||||
|
||||
## Checking for missing translations in languages
|
||||
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"access-list": "Access List",
|
||||
"access-list.access-count": "{count} {count, plural, one {Rule} other {Rules}}",
|
||||
"access-list.auth-count": "{count} {count, plural, one {User} other {Users}}",
|
||||
"access-list.help-rules-last": "When at least 1 rule exists, this deny all rule will be added last",
|
||||
"access-list.help.rules-order": "Note that the allow and deny directives will be applied in the order they are defined.",
|
||||
"access-list.pass-auth": "Pass Auth to Upstream",
|
||||
"access-list.public": "Publicly Accessible",
|
||||
"access-list.public.subtitle": "No basic auth required",
|
||||
"access-list.satisfy-any": "Satisfy Any",
|
||||
"access-list.subtitle": "{users} {users, plural, one {User} other {Users}}, {rules} {rules, plural, one {Rule} other {Rules}} - Created: {date}",
|
||||
"access-lists": "Access Lists",
|
||||
"action.add": "Add",
|
||||
"action.add-location": "Add Location",
|
||||
"action.close": "Close",
|
||||
"action.delete": "Delete",
|
||||
"action.disable": "Disable",
|
||||
"action.download": "Download",
|
||||
"action.edit": "Edit",
|
||||
"action.enable": "Enable",
|
||||
"action.permissions": "Permissions",
|
||||
"action.renew": "Renew",
|
||||
"action.view-details": "View Details",
|
||||
"auditlogs": "Audit Logs",
|
||||
"cancel": "Cancel",
|
||||
"certificate": "Certificate",
|
||||
"certificate.custom-certificate": "Certificate",
|
||||
"certificate.custom-certificate-key": "Certificate Key",
|
||||
"certificate.custom-intermediate": "Intermediate Certificate",
|
||||
"certificate.in-use": "In Use",
|
||||
"certificate.none.subtitle": "No certificate assigned",
|
||||
"certificate.none.subtitle.for-http": "This host will not use HTTPS",
|
||||
"certificate.none.title": "None",
|
||||
"certificate.not-in-use": "Not Used",
|
||||
"certificate.renew": "Renew Certificate",
|
||||
"certificates": "Certificates",
|
||||
"certificates.custom": "Custom Certificate",
|
||||
"certificates.custom.warning": "Key files protected with a passphrase are not supported.",
|
||||
"certificates.dns.credentials": "Credentials File Content",
|
||||
"certificates.dns.credentials-note": "This plugin requires a configuration file containing an API token or other credentials for your provider",
|
||||
"certificates.dns.credentials-warning": "This data will be stored as plaintext in the database and in a file!",
|
||||
"certificates.dns.propagation-seconds": "Propagation Seconds",
|
||||
"certificates.dns.propagation-seconds-note": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation.",
|
||||
"certificates.dns.provider": "DNS Provider",
|
||||
"certificates.dns.warning": "This section requires some knowledge about Certbot and its DNS plugins. Please consult the respective plugins documentation.",
|
||||
"certificates.http.reachability-404": "There is a server found at this domain but it does not seem to be Nginx Proxy Manager. Please make sure your domain points to the IP where your NPM instance is running.",
|
||||
"certificates.http.reachability-failed-to-check": "Failed to check the reachability due to a communication error with site24x7.com.",
|
||||
"certificates.http.reachability-not-resolved": "There is no server available at this domain. Please make sure your domain exists and points to the IP where your NPM instance is running and if necessary port 80 is forwarded in your router.",
|
||||
"certificates.http.reachability-ok": "Your server is reachable and creating certificates should be possible.",
|
||||
"certificates.http.reachability-other": "There is a server found at this domain but it returned an unexpected status code {code}. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.",
|
||||
"certificates.http.reachability-wrong-data": "There is a server found at this domain but it returned an unexpected data. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.",
|
||||
"certificates.http.test-results": "Test Results",
|
||||
"certificates.http.warning": "These domains must be already configured to point to this installation.",
|
||||
"certificates.request.subtitle": "with Let's Encrypt",
|
||||
"certificates.request.title": "Request a new Certificate",
|
||||
"column.access": "Access",
|
||||
"column.authorization": "Authorization",
|
||||
"column.authorizations": "Authorizations",
|
||||
"column.custom-locations": "Custom Locations",
|
||||
"column.destination": "Destination",
|
||||
"column.details": "Details",
|
||||
"column.email": "Email",
|
||||
"column.event": "Event",
|
||||
"column.expires": "Expires",
|
||||
"column.http-code": "Access",
|
||||
"column.incoming-port": "Incoming Port",
|
||||
"column.name": "Name",
|
||||
"column.protocol": "Protocol",
|
||||
"column.provider": "Provider",
|
||||
"column.roles": "Roles",
|
||||
"column.rules": "Rules",
|
||||
"column.satisfy": "Satisfy",
|
||||
"column.satisfy-all": "All",
|
||||
"column.satisfy-any": "Any",
|
||||
"column.scheme": "Scheme",
|
||||
"column.source": "Source",
|
||||
"column.ssl": "SSL",
|
||||
"column.status": "Status",
|
||||
"created-on": "Created: {date}",
|
||||
"dashboard": "Dashboard",
|
||||
"dead-host": "404 Host",
|
||||
"dead-hosts": "404 Hosts",
|
||||
"dead-hosts.count": "{count} {count, plural, one {404 Host} other {404 Hosts}}",
|
||||
"disabled": "Disabled",
|
||||
"domain-names": "Domain Names",
|
||||
"domain-names.max": "{count} domain names maximum",
|
||||
"domain-names.placeholder": "Start typing to add domain...",
|
||||
"domain-names.wildcards-not-permitted": "Wildcards not permitted for this type",
|
||||
"domain-names.wildcards-not-supported": "Wildcards not supported for this CA",
|
||||
"domains.force-ssl": "Force SSL",
|
||||
"domains.hsts-enabled": "HSTS Enabled",
|
||||
"domains.hsts-subdomains": "HSTS Sub-domains",
|
||||
"domains.http2-support": "HTTP/2 Support",
|
||||
"domains.use-dns": "Use DNS Challenge",
|
||||
"email-address": "Email address",
|
||||
"empty-search": "No results found",
|
||||
"empty-subtitle": "Why don't you create one?",
|
||||
"enabled": "Enabled",
|
||||
"error.access.at-least-one": "Either one Authorization or one Access Rule is required",
|
||||
"error.access.duplicate-usernames": "Authorization Usernames must be unique",
|
||||
"error.invalid-auth": "Invalid email or password",
|
||||
"error.invalid-domain": "Invalid domain: {domain}",
|
||||
"error.invalid-email": "Invalid email address",
|
||||
"error.max-character-length": "Maximum length is {max} character{max, plural, one {} other {s}}",
|
||||
"error.max-domains": "Too many domains, max is {max}",
|
||||
"error.maximum": "Maximum is {max}",
|
||||
"error.min-character-length": "Minimum length is {min} character{min, plural, one {} other {s}}",
|
||||
"error.minimum": "Minimum is {min}",
|
||||
"error.passwords-must-match": "Passwords must match",
|
||||
"error.required": "This is required",
|
||||
"expires.on": "Expires: {date}",
|
||||
"footer.github-fork": "Fork me on Github",
|
||||
"host.flags.block-exploits": "Block Common Exploits",
|
||||
"host.flags.cache-assets": "Cache Assets",
|
||||
"host.flags.preserve-path": "Preserve Path",
|
||||
"host.flags.protocols": "Protocols",
|
||||
"host.flags.websockets-upgrade": "Websockets Support",
|
||||
"host.forward-port": "Forward Port",
|
||||
"host.forward-scheme": "Scheme",
|
||||
"hosts": "Hosts",
|
||||
"http-only": "HTTP Only",
|
||||
"lets-encrypt": "Let's Encrypt",
|
||||
"lets-encrypt-via-dns": "Let's Encrypt via DNS",
|
||||
"lets-encrypt-via-http": "Let's Encrypt via HTTP",
|
||||
"loading": "Loading…",
|
||||
"login.title": "Login to your account",
|
||||
"nginx-config.label": "Custom Nginx Configuration",
|
||||
"nginx-config.placeholder": "# Enter your custom Nginx configuration here at your own risk!",
|
||||
"no-permission-error": "You do not have access to view this.",
|
||||
"notfound.action": "Take me home",
|
||||
"notfound.content": "We are sorry but the page you are looking for was not found",
|
||||
"notfound.title": "Oops… You just found an error page",
|
||||
"notification.error": "Error",
|
||||
"notification.object-deleted": "{object} has been deleted",
|
||||
"notification.object-disabled": "{object} has been disabled",
|
||||
"notification.object-enabled": "{object} has been enabled",
|
||||
"notification.object-renewed": "{object} has been renewed",
|
||||
"notification.object-saved": "{object} has been saved",
|
||||
"notification.success": "Success",
|
||||
"object.actions-title": "{object} #{id}",
|
||||
"object.add": "Add {object}",
|
||||
"object.delete": "Delete {object}",
|
||||
"object.delete.content": "Are you sure you want to delete this {object}?",
|
||||
"object.edit": "Edit {object}",
|
||||
"object.empty": "There are no {objects}",
|
||||
"object.event.created": "Created {object}",
|
||||
"object.event.deleted": "Deleted {object}",
|
||||
"object.event.disabled": "Disabled {object}",
|
||||
"object.event.enabled": "Enabled {object}",
|
||||
"object.event.renewed": "Renewed {object}",
|
||||
"object.event.updated": "Updated {object}",
|
||||
"offline": "Offline",
|
||||
"online": "Online",
|
||||
"options": "Options",
|
||||
"password": "Password",
|
||||
"password.generate": "Generate random password",
|
||||
"password.hide": "Hide Password",
|
||||
"password.show": "Show Password",
|
||||
"permissions.hidden": "Hidden",
|
||||
"permissions.manage": "Manage",
|
||||
"permissions.view": "View Only",
|
||||
"permissions.visibility.all": "All Items",
|
||||
"permissions.visibility.title": "Item Visibility",
|
||||
"permissions.visibility.user": "Created Items Only",
|
||||
"proxy-host": "Proxy Host",
|
||||
"proxy-host.forward-host": "Forward Hostname / IP",
|
||||
"proxy-hosts": "Proxy Hosts",
|
||||
"proxy-hosts.count": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}",
|
||||
"public": "Public",
|
||||
"redirection-host": "Redirection Host",
|
||||
"redirection-host.forward-domain": "Forward Domain",
|
||||
"redirection-host.forward-http-code": "HTTP Code",
|
||||
"redirection-hosts": "Redirection Hosts",
|
||||
"redirection-hosts.count": "{count} {count, plural, one {Redirection Host} other {Redirection Hosts}}",
|
||||
"role.admin": "Administrator",
|
||||
"role.standard-user": "Standard User",
|
||||
"save": "Save",
|
||||
"setting": "Setting",
|
||||
"settings": "Settings",
|
||||
"settings.default-site": "Default Site",
|
||||
"settings.default-site.404": "404 Page",
|
||||
"settings.default-site.444": "No Response (444)",
|
||||
"settings.default-site.congratulations": "Congratulations Page",
|
||||
"settings.default-site.description": "What to show when Nginx is hit with an unknown Host",
|
||||
"settings.default-site.html": "Custom HTML",
|
||||
"settings.default-site.html.placeholder": "<!-- Enter your custom HTML content here -->",
|
||||
"settings.default-site.redirect": "Redirect",
|
||||
"setup.preamble": "Get started by creating your admin account.",
|
||||
"setup.title": "Welcome!",
|
||||
"sign-in": "Sign in",
|
||||
"ssl-certificate": "SSL Certificate",
|
||||
"stream": "Stream",
|
||||
"stream.forward-host": "Forward Host",
|
||||
"stream.incoming-port": "Incoming Port",
|
||||
"streams": "Streams",
|
||||
"streams.count": "{count} {count, plural, one {Stream} other {Streams}}",
|
||||
"streams.tcp": "TCP",
|
||||
"streams.udp": "UDP",
|
||||
"test": "Test",
|
||||
"user": "User",
|
||||
"user.change-password": "Change Password",
|
||||
"user.confirm-password": "Confirm Password",
|
||||
"user.current-password": "Current Password",
|
||||
"user.edit-profile": "Edit Profile",
|
||||
"user.full-name": "Full Name",
|
||||
"user.login-as": "Sign in as {name}",
|
||||
"user.logout": "Logout",
|
||||
"user.new-password": "New Password",
|
||||
"user.nickname": "Nickname",
|
||||
"user.set-password": "Set Password",
|
||||
"user.set-permissions": "Set Permissions for {name}",
|
||||
"user.switch-dark": "Switch to Dark mode",
|
||||
"user.switch-light": "Switch to Light mode",
|
||||
"username": "Username",
|
||||
"users": "Users"
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"locale-en-US": "English"
|
||||
}
|
||||
7
frontend/src/locale/src/HelpDoc/de/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/de/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Was ist eine Zugriffsliste?
|
||||
|
||||
Zugriffslisten bieten eine Blacklist oder Whitelist mit bestimmten Client-IP-Adressen sowie eine Authentifizierung für die Proxy-Hosts über die grundlegende HTTP-Authentifizierung.
|
||||
|
||||
Sie können mehrere Client-Regeln, Benutzernamen und Passwörter für eine einzelne Zugriffsliste konfigurieren und diese dann auf einen oder mehrere Proxy-Hosts anwenden.
|
||||
|
||||
Dies ist besonders nützlich für weitergeleitete Webdienste, die keine integrierten Authentifizierungsmechanismen haben, oder wenn Sie sich vor unbekannten Clients schützen möchten.
|
||||
32
frontend/src/locale/src/HelpDoc/de/Certificates.md
Normal file
32
frontend/src/locale/src/HelpDoc/de/Certificates.md
Normal file
@@ -0,0 +1,32 @@
|
||||
## Hilfe zu Zertifikaten
|
||||
|
||||
### HTTP-Zertifikat
|
||||
|
||||
Ein HTTP-validiertes Zertifikat bedeutet, dass Let's Encrypt-Server
|
||||
versuchen, Ihre Domains über HTTP (nicht HTTPS!) zu erreichen, und wenn dies erfolgreich ist,
|
||||
stellen sie Ihr Zertifikat aus.
|
||||
|
||||
Für diese Methode müssen Sie einen _Proxy-Host_ für Ihre Domain(s) erstellen, der
|
||||
über HTTP zugänglich ist und auf diese Nginx-Installation verweist. Nachdem ein Zertifikat
|
||||
ausgestellt wurde, können Sie den _Proxy-Host_ so ändern, dass dieses Zertifikat auch für HTTPS-Verbindungen
|
||||
verwendet wird. Der _Proxy-Host_ muss jedoch weiterhin für den HTTP-Zugriff konfiguriert sein,
|
||||
damit das Zertifikat erneuert werden kann.
|
||||
|
||||
Dieser Prozess unterstützt keine Wildcard-Domains.
|
||||
|
||||
### DNS-Zertifikat
|
||||
|
||||
Für ein DNS-validiertes Zertifikat müssen Sie ein DNS-Provider-Plugin verwenden. Dieser DNS-
|
||||
Provider wird verwendet, um temporäre Einträge auf Ihrer Domain zu erstellen. Anschließend fragt Let's
|
||||
Encrypt diese Einträge ab, um sicherzustellen, dass Sie der Eigentümer sind. Bei Erfolg wird
|
||||
Ihr Zertifikat ausgestellt.
|
||||
|
||||
Sie müssen vor der Beantragung dieser Art von Zertifikat keinen _Proxy-Host_ erstellen.
|
||||
Sie müssen Ihren _Proxy-Host_ auch nicht für den HTTP-Zugriff konfigurieren.
|
||||
|
||||
Dieser Prozess unterstützt Wildcard-Domains.
|
||||
|
||||
### Benutzerdefiniertes Zertifikat
|
||||
|
||||
Verwenden Sie diese Option, um Ihr eigenes SSL-Zertifikat hochzuladen, das Ihnen von Ihrer eigenen
|
||||
Zertifizierungsstelle bereitgestellt wurde.
|
||||
10
frontend/src/locale/src/HelpDoc/de/DeadHosts.md
Normal file
10
frontend/src/locale/src/HelpDoc/de/DeadHosts.md
Normal file
@@ -0,0 +1,10 @@
|
||||
## Was ist ein 404-Host?
|
||||
|
||||
Ein 404-Host ist ein Host-Setup, das eine 404-Seite anzeigt.
|
||||
|
||||
Dies kann nützlich sein, wenn Ihre Domain in Suchmaschinen gelistet ist und Sie
|
||||
eine ansprechendere Fehlerseite bereitstellen oder den Suchindexern ausdrücklich mitteilen möchten, dass
|
||||
die Domain-Seiten nicht mehr existieren.
|
||||
|
||||
Ein weiterer Vorteil dieses Hosts besteht darin, dass Sie die Protokolle für Zugriffe darauf verfolgen und
|
||||
die Verweise anzeigen können.
|
||||
7
frontend/src/locale/src/HelpDoc/de/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/de/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Was ist ein Proxy-Host?
|
||||
|
||||
Ein Proxy-Host ist der eingehende Endpunkt für einen Webdienst, den Sie weiterleiten möchten.
|
||||
|
||||
Er bietet optionale SSL-Terminierung für Ihren Dienst, der möglicherweise keine integrierte SSL-Unterstützung hat.
|
||||
|
||||
Proxy-Hosts sind die häufigste Verwendung für den Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/de/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/de/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Was ist ein Redirection Host?
|
||||
|
||||
Ein Redirection Host leitet Anfragen von der eingehenden Domain weiter und leitet den
|
||||
Besucher zu einer anderen Domain weiter.
|
||||
|
||||
Der häufigste Grund für die Verwendung dieses Host-Typs ist, wenn Ihre Website die
|
||||
Domain wechselt, aber Sie noch Suchmaschinen- oder Referrer-Links haben, die auf die alte Domain verweisen.
|
||||
6
frontend/src/locale/src/HelpDoc/de/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/de/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Was ist ein Stream?
|
||||
|
||||
Ein Stream ist eine relativ neue Funktion von Nginx, die dazu dient, TCP/UDP-Datenverkehr
|
||||
direkt an einen anderen Computer im Netzwerk weiterzuleiten.
|
||||
|
||||
Wenn Sie Spielserver, FTP- oder SSH-Server betreiben, kann dies sehr nützlich sein.
|
||||
6
frontend/src/locale/src/HelpDoc/de/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/de/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
7
frontend/src/locale/src/HelpDoc/es/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/es/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## ¿Qué es una Lista de Acceso?
|
||||
|
||||
Las Listas de Acceso proporcionan una lista negra o blanca de direcciones IP de cliente específicas junto con autenticación para los Hosts Proxy a través de Autenticación HTTP Básica.
|
||||
|
||||
Puede configurar múltiples reglas de cliente, nombres de usuario y contraseñas para una única Lista de Acceso y luego aplicarla a uno o más _Hosts Proxy_.
|
||||
|
||||
Esto es más útil para servicios web reenviados que no tienen mecanismos de autenticación integrados o cuando desea protegerse de clientes desconocidos.
|
||||
32
frontend/src/locale/src/HelpDoc/es/Certificates.md
Normal file
32
frontend/src/locale/src/HelpDoc/es/Certificates.md
Normal file
@@ -0,0 +1,32 @@
|
||||
## Ayuda de Certificados
|
||||
|
||||
### Certificado HTTP
|
||||
|
||||
Un certificado validado por HTTP significa que los servidores de Let's Encrypt
|
||||
intentarán acceder a tus dominios a través de HTTP (¡no HTTPS!) y, si tienen éxito,
|
||||
emitirán tu certificado.
|
||||
|
||||
Para este método, deberás tener un _Host Proxy_ creado para tu(s) dominio(s) que
|
||||
sea accesible por HTTP y que apunte a esta instalación de Nginx. Después de que se
|
||||
haya emitido un certificado, puedes modificar el _Host Proxy_ para que también use
|
||||
este certificado para conexiones HTTPS. Sin embargo, el _Host Proxy_ seguirá
|
||||
necesitando estar configurado para acceso HTTP para que el certificado se renueve.
|
||||
|
||||
Este proceso _no_ admite dominios comodín.
|
||||
|
||||
### Certificado DNS
|
||||
|
||||
Un certificado validado por DNS requiere que uses un complemento de Proveedor de DNS.
|
||||
Este Proveedor de DNS se usará para crear registros temporales en tu dominio y luego
|
||||
Let's Encrypt consultará esos registros para asegurarse de que eres el propietario y,
|
||||
si tiene éxito, emitirá tu certificado.
|
||||
|
||||
No necesitas tener un _Host Proxy_ creado antes de solicitar este tipo de certificado.
|
||||
Tampoco necesitas tener tu _Host Proxy_ configurado para acceso HTTP.
|
||||
|
||||
Este proceso _sí_ admite dominios comodín.
|
||||
|
||||
### Certificado Personalizado
|
||||
|
||||
Usa esta opción para cargar tu propio Certificado SSL, proporcionado por tu propia
|
||||
Autoridad de Certificación.
|
||||
10
frontend/src/locale/src/HelpDoc/es/DeadHosts.md
Normal file
10
frontend/src/locale/src/HelpDoc/es/DeadHosts.md
Normal file
@@ -0,0 +1,10 @@
|
||||
## ¿Qué es un Host 404?
|
||||
|
||||
Un Host 404 es simplemente una configuración de host que muestra una página 404.
|
||||
|
||||
Esto puede ser útil cuando tu dominio está listado en los motores de búsqueda y deseas
|
||||
proporcionar una página de error más agradable o específicamente para indicar a los indexadores de búsqueda que
|
||||
las páginas del dominio ya no existen.
|
||||
|
||||
Otro beneficio de tener este host es rastrear los registros de visitas a él y
|
||||
ver los referentes.
|
||||
7
frontend/src/locale/src/HelpDoc/es/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/es/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## ¿Qué es un Host Proxy?
|
||||
|
||||
Un Host Proxy es el punto de entrada para un servicio web que deseas reenviar.
|
||||
|
||||
Proporciona terminación SSL opcional para tu servicio que podría no tener soporte SSL integrado.
|
||||
|
||||
Los Hosts Proxy son el uso más común del Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/es/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## ¿Qué es un Host de Redirección?
|
||||
|
||||
Un Host de Redirección redirigirá las solicitudes del dominio entrante e impulsará al
|
||||
visitante a otro dominio.
|
||||
|
||||
La razón más común para usar este tipo de host es cuando tu sitio web cambia de
|
||||
dominios pero aún tienes enlaces de motores de búsqueda o referencias apuntando al dominio anterior.
|
||||
6
frontend/src/locale/src/HelpDoc/es/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/es/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## ¿Qué es un Stream?
|
||||
|
||||
Una característica relativamente nueva para Nginx, un Stream servirá para reenviar tráfico TCP/UDP
|
||||
directamente a otra computadora en la red.
|
||||
|
||||
Si estás ejecutando servidores de juegos, FTP o servidores SSH esto puede ser muy útil.
|
||||
6
frontend/src/locale/src/HelpDoc/es/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/es/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
@@ -1,17 +1,30 @@
|
||||
// import * as de from "./de/index";
|
||||
// import * as fa from "./fa/index";
|
||||
import * as de from "./de/index";
|
||||
import * as en from "./en/index";
|
||||
import * as it from "./it/index";
|
||||
import * as ja from "./ja/index";
|
||||
import * as nl from "./nl/index";
|
||||
import * as pl from "./pl/index";
|
||||
import * as ru from "./ru/index";
|
||||
import * as sk from "./sk/index";
|
||||
import * as vi from "./vi/index";
|
||||
import * as zh from "./zh/index";
|
||||
|
||||
const items: any = { en };
|
||||
const items: any = { en, de, ja, sk, zh, pl, ru, it, vi, nl };
|
||||
|
||||
const fallbackLang = "en";
|
||||
|
||||
export const getHelpFile = (lang: string, section: string): string => {
|
||||
if (typeof items[lang] !== "undefined" && typeof items[lang][section] !== "undefined") {
|
||||
if (
|
||||
typeof items[lang] !== "undefined" &&
|
||||
typeof items[lang][section] !== "undefined"
|
||||
) {
|
||||
return items[lang][section].default;
|
||||
}
|
||||
// Fallback to English
|
||||
if (typeof items[fallbackLang] !== "undefined" && typeof items[fallbackLang][section] !== "undefined") {
|
||||
if (
|
||||
typeof items[fallbackLang] !== "undefined" &&
|
||||
typeof items[fallbackLang][section] !== "undefined"
|
||||
) {
|
||||
return items[fallbackLang][section].default;
|
||||
}
|
||||
throw new Error(`Cannot load help doc for ${lang}-${section}`);
|
||||
|
||||
7
frontend/src/locale/src/HelpDoc/it/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/it/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Che cos'è una Lista di Accesso?
|
||||
|
||||
La Lista di Accesso fornisce una blacklist o una whitelist di indirizzi IP specifici dei client insieme all'autenticazione per gli host proxy tramite autenticazione HTTP di base.
|
||||
|
||||
È possibile configurare più regole client, nomi utente e password per un singolo lista di accesso e quindi applicarlo a uno o più host proxy.
|
||||
|
||||
Ciò è particolarmente utile per i servizi web inoltrati che non dispongono di meccanismi di autenticazione integrati o quando si desidera proteggersi da client sconosciuti.
|
||||
24
frontend/src/locale/src/HelpDoc/it/Certificates.md
Normal file
24
frontend/src/locale/src/HelpDoc/it/Certificates.md
Normal file
@@ -0,0 +1,24 @@
|
||||
## Guida sui Certificati
|
||||
|
||||
### Certificato HTTP
|
||||
|
||||
Un certificato convalidato HTTP significa che i server Let's Encrypttenteranno di raggiungere i tuoi domini tramite HTTP (non HTTPS!) e, in caso di esito positivo, emetteranno il tuo certificato.
|
||||
|
||||
Per questo metodo, dovrai creare un _Proxy Host_ per i tuoi domini chesia accessibile con HTTP e che punti a questa installazione Nginx.
|
||||
Dopo che il certificato è stato rilasciato, puoi modificare il _Proxy Host_ per utilizzare questo certificato anche per le connessioni HTTPS.
|
||||
Tuttavia, il _Proxy Host_ dovrà comunque essere configurato per l'accesso HTTP affinché il certificato possa essere rinnovato.
|
||||
|
||||
Questo processo _non_ supporta i domini wildcard.
|
||||
|
||||
### Certificato DNS
|
||||
|
||||
Un certificato convalidato dal DNS richiede l'uso di un plugin DNS Provider. Questo DNS Provider verrà utilizzato per creare record temporanei sul tuo dominio,
|
||||
quindi Let's Encrypt interrogherà tali record per assicurarsi che tu sia il proprietario e, in caso di esito positivo,rilascerà il tuo certificato.
|
||||
|
||||
Non è necessario creare un _Proxy Host_ prima di richiedere questo tipo di certificato. Non è nemmeno necessario configurare il tuo _proxy host_ per l'accesso HTTP.
|
||||
|
||||
Questo processo _supporta_ i domini wildcard.
|
||||
|
||||
### Certificato personalizzato
|
||||
|
||||
Utilizza questa opzione per caricare il tuo certificato SSL, fornito dalla tua autorità di certificazione.
|
||||
9
frontend/src/locale/src/HelpDoc/it/DeadHosts.md
Normal file
9
frontend/src/locale/src/HelpDoc/it/DeadHosts.md
Normal file
@@ -0,0 +1,9 @@
|
||||
## Che cos'è un Host 404?
|
||||
|
||||
Un Host 404 è semplicemente una configurazione host che mostra una pagina 404.
|
||||
|
||||
Questo può essere utile quando il tuo dominio è elencato nei motori di ricerca e desideri fornire una pagina di errore più gradevole o specificare agli
|
||||
indicizzatori di ricerca che le pagine del dominio non esistono più.
|
||||
|
||||
Un altro vantaggio di avere questo host è quello di tracciare i log degli accessi e
|
||||
visualizzare i referrer.
|
||||
7
frontend/src/locale/src/HelpDoc/it/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/it/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Che cos'è un Proxy Host?
|
||||
|
||||
Un host proxy è l'endpoint in entrata per un servizio web che si desidera inoltrare.
|
||||
|
||||
Fornisce la terminazione SSL opzionale per il servizio che potrebbe non avere il supporto SSL integrato.
|
||||
|
||||
Gli host proxy sono l'uso più comune per Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/it/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/it/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Che cos'è un Host di reindirizzamento?
|
||||
|
||||
Un Host di reindirizzamento reindirizza le richieste provenienti dal dominio in entrata e indirizza il
|
||||
visitatore verso un altro dominio.
|
||||
|
||||
Il motivo più comune per utilizzare questo tipo di host è quando il tuo sito web cambia
|
||||
dominio, ma hai ancora link di motori di ricerca o referrer che puntano al vecchio dominio.
|
||||
6
frontend/src/locale/src/HelpDoc/it/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/it/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Che cos'è uno Stream?
|
||||
|
||||
Una funzionalità relativamente nuova per Nginx, uno Stream serve a inoltrare il traffico TCP/UDP
|
||||
direttamente a un altro computer sulla rete.
|
||||
|
||||
Se gestisci server di gioco, FTP o SSH, questa funzionalità può rivelarsi molto utile.
|
||||
6
frontend/src/locale/src/HelpDoc/it/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/it/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
8
frontend/src/locale/src/HelpDoc/ja/AccessLists.md
Normal file
8
frontend/src/locale/src/HelpDoc/ja/AccessLists.md
Normal file
@@ -0,0 +1,8 @@
|
||||
## アクセスリストとは
|
||||
|
||||
アクセスリストは特定のクライアントIPへのブラックリストとホワイトリストを提供し、ベーシック認証によるプロキシホストへの認証を可能にします。
|
||||
|
||||
複数のクライアントルールやユーザー名とパスワードを一つのアクセスリストに設定し、一つ以上の _プロキシホスト_ に適応することができます。
|
||||
|
||||
これは認証システムを持たないサービスや不明なクライアントからの保護が必要な場合に有効です。
|
||||
|
||||
21
frontend/src/locale/src/HelpDoc/ja/Certificates.md
Normal file
21
frontend/src/locale/src/HelpDoc/ja/Certificates.md
Normal file
@@ -0,0 +1,21 @@
|
||||
## 証明書
|
||||
|
||||
### HTTP 証明書
|
||||
|
||||
HTTPによって検証された証明書はLet's EncryptサーバーがHTTPでドメインにアクセスを試みサーバーを管理していることを確認できた場合に発行される証明書です。
|
||||
|
||||
この方法では、HTTPアクセス可能でこのNginxを指しているドメインに対して _プロキシホスト_ を作成する必要があります。証明書が発行された後は、 _プロキシホスト_ を編集してこの証明書をHTTPS接続に使用するように設定できます。ただし、証明書の更新には、_プロキシホスト_ がHTTP接続用に設定された状態を維持する必要があります。
|
||||
|
||||
この方法はワイルドカードのドメインをサポート _していません_ 。
|
||||
|
||||
### DNS 証明書
|
||||
|
||||
DNSによって検証された証明書にはDNSプロバイダープラグインが必要です。このプロバイダーはドメイン上に一時レコードを作成するために使用されます。その後Let's Encryptサーバーがそのレコードを参照し、あなたが所有していることを確認できると証明書が発行されます。
|
||||
|
||||
このタイプの証明書を作成する際に、 _プロキシホスト_ を作成する必要はありません。また、_プロキシホスト_ をHTTPアクセス用に設定する必要もありません。
|
||||
|
||||
この方法はワイルドカードのドメインをサポート _します_ 。
|
||||
|
||||
### カスタム証明書
|
||||
|
||||
このオプションでは、あなたの証明書認証局によって提供された自身の証明書をアップロードして使用できます。
|
||||
7
frontend/src/locale/src/HelpDoc/ja/DeadHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/ja/DeadHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## 404ホストとはなんですか?
|
||||
|
||||
404ホストとは、単に404ページを表示するよう設定されたホストです。
|
||||
|
||||
これは、検索エンジンに登録されたドメインに分かりやすいエラーページを提供したい場合や、検索エンジンのインデクサーにドメインページがもう存在しないことを伝えたい場合に便利です。
|
||||
|
||||
このホストを持つもう一つの利点は、アクセスログを追跡し、参照元を確認できることです。
|
||||
7
frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## プロキシホストとは何ですか?
|
||||
|
||||
プロキシホストは転送したいwebサービスの受信エンドポイントです。
|
||||
|
||||
サービスにSSLサーバーが組み込まれていない場合でも、オプションでSSL終端機能を提供します。
|
||||
|
||||
プロキシホストはNginx Proxy Managerのもっとも一般的な使用方法です。
|
||||
5
frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md
Normal file
5
frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## リダイレクトホストとは何ですか?
|
||||
|
||||
リダイレクトホストは受信したリクエストを別のドメインにリダイレクトして訪問者に表示します。
|
||||
|
||||
このタイプのもっとも一般的な使用理由は、webサイトのドメインが変更されたが検索エンジンやリンクが古いドメインを指し続けている場合です。
|
||||
5
frontend/src/locale/src/HelpDoc/ja/Streams.md
Normal file
5
frontend/src/locale/src/HelpDoc/ja/Streams.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## ストリームとは何ですか?
|
||||
|
||||
Nginxの比較的新しい機能であるストリームは、TCP/UDPトラフィックをネットワーク上の別のコンピュータに直接転送します。
|
||||
|
||||
ゲームサーバー、FTPサーバー、SSHサーバーを運用している場合に便利です。
|
||||
6
frontend/src/locale/src/HelpDoc/ja/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/ja/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
7
frontend/src/locale/src/HelpDoc/nl/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/nl/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Wat is een Toegangslijst?
|
||||
|
||||
Toeganslijsten bieden een zwarte- of witte lijst van specifieke client IP-adressen samen met authenticatie voor de Proxy Hosts via Basic HTTP Authenticatie.
|
||||
|
||||
Je kan meerdere client regels, gebruikersnamen en wachtwoorden voor een enkele Toegangslijst configureren en toepassen op één of meerdere _Proxy Hosts_.
|
||||
|
||||
Dit is het meest nuttig voor doorgestuurde webdiensten die geen authenticatiemechanismen hebben of wanneer je wilt beveiligen tegen onbekende bezoekers.
|
||||
31
frontend/src/locale/src/HelpDoc/nl/Certificates.md
Normal file
31
frontend/src/locale/src/HelpDoc/nl/Certificates.md
Normal file
@@ -0,0 +1,31 @@
|
||||
## Certificaten Hulp
|
||||
|
||||
### HTTP Certificaat
|
||||
|
||||
Een HTTP gevalideerd certificaat betekent dat Let's Encrypt servers
|
||||
zullen proberen om over HTTP te bereiken (niet HTTPS!) en als dat gelukt is, zal
|
||||
jouw certificaat worden uitgegeven.
|
||||
|
||||
Voor deze zal je een _Proxy Host_ moeten hebben die is toegankelijk via HTTP en
|
||||
die naar deze Nginx installatie wijst. Nadat een certificaat is uitgegeven kan je
|
||||
de _Proxy Host_ wijzigen om ook HTTPS toegang te geven. Maar de _Proxy Host_ zal
|
||||
nog moeten worden geconfigureerd voor HTTP toegang om het certificaat te verlengen.
|
||||
|
||||
Dit proces ondersteunt geen domeinen met wildcards.
|
||||
|
||||
### DNS Certificaat
|
||||
|
||||
Een DNS gevalideerd certificaat zal gebruik maken van een DNS Provider plugin. De
|
||||
DNS Provider zal tijdelijke records op jouw domein maken en Let's Encrypt zal deze
|
||||
records opvragen om te controleren of je de eigenaar bent. Als dat is gecontroleerd
|
||||
is zal Let's Encrypt het certificaat uitgeven.
|
||||
|
||||
Je hebt geen _Proxy Host_ nodig om dit soort certificaat aan te vragen. Je hebt dus
|
||||
geen HTTP _Proxy Host_ nodig.
|
||||
|
||||
Dit proces ondersteunt _wel_ domeinen met wildcards.
|
||||
|
||||
### Aangepast Certificaat
|
||||
|
||||
Gebruik deze optie om jouw eigen SSL Certificaat te uploaden, zoals
|
||||
geleverd door jouw eigen Certificate Authority.
|
||||
10
frontend/src/locale/src/HelpDoc/nl/DeadHosts.md
Normal file
10
frontend/src/locale/src/HelpDoc/nl/DeadHosts.md
Normal file
@@ -0,0 +1,10 @@
|
||||
## Wat is een 404 Host?
|
||||
|
||||
Simpel gezegd is een 404 Host een host setup die een 404 pagina weergeeft.
|
||||
|
||||
Dit kan nuttig zijn wanneer jouw domein is opgegeven in zoekmachines en je wil
|
||||
een betere foutpagina leveren of specifiek om te zeggen tegen de zoekmachines dat
|
||||
het domein niet langer bestaat.
|
||||
|
||||
Een ander voordeel van het hebben van een 404 Host is om de logs voor bezoeken
|
||||
te volgen en de referenties te bekijken.
|
||||
7
frontend/src/locale/src/HelpDoc/nl/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/nl/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Wat is een Proxy Host?
|
||||
|
||||
Een Proxy Host is de inkomende endpoint voor een webdienst dat je wilt doorsturen.
|
||||
|
||||
Het biedt optionele SSL voor je dienst die mogelijk geen SSL ondersteuning heeft.
|
||||
|
||||
Proxy Hosts worden het meest gebruikt in Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/nl/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/nl/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Wat is een Redirection Host?
|
||||
|
||||
Een Redirection Host zal verzoeken van de inkomende domeinnaam doorsturen, en de bezoeker
|
||||
omleiden naar een andere domeinnaam.
|
||||
|
||||
Het gebruik van een Redirection Host is vooral handig wanneer je jouw website verandert
|
||||
maar je nog zoekmachines of referenties naar de oude domeinnaam hebben.
|
||||
6
frontend/src/locale/src/HelpDoc/nl/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/nl/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Wat is een Stream?
|
||||
|
||||
Streams zijn een nieuwe toevoeging aan Nginx, die toelaat om TCP/UDP
|
||||
verkeer naar een ander computer op het netwerk te sturen.
|
||||
|
||||
Als je game servers, FTP of SSH servers draait kan dit handig zijn.
|
||||
6
frontend/src/locale/src/HelpDoc/nl/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/nl/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
7
frontend/src/locale/src/HelpDoc/pl/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/pl/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Czym jest lista dostępu?
|
||||
|
||||
Listy dostępu zapewniają czarną lub białą listę określonych adresów IP klientów wraz z uwierzytelnianiem dla hostów proxy za pomocą podstawowego uwierzytelniania HTTP.
|
||||
|
||||
Możesz skonfigurować wiele reguł klienta, nazw użytkowników i haseł dla pojedynczej listy dostępu, a następnie zastosować ją do jednego lub więcej hostów proxy.
|
||||
|
||||
Jest to najbardziej przydatne w przypadku przekierowywanych usług internetowych, które nie mają wbudowanych mechanizmów uwierzytelniania lub gdy chcesz zabezpieczyć się przed nieznanymi klientami.
|
||||
22
frontend/src/locale/src/HelpDoc/pl/Certificates.md
Normal file
22
frontend/src/locale/src/HelpDoc/pl/Certificates.md
Normal file
@@ -0,0 +1,22 @@
|
||||
## Pomoc dotycząca certyfikatów
|
||||
|
||||
### Certyfikat HTTP
|
||||
|
||||
Certyfikat weryfikowany przez HTTP oznacza, że serwery Let's Encrypt będą próbowały połączyć się z twoimi domenami przez HTTP (nie HTTPS!) i jeśli się to powiedzie, wydadzą twój certyfikat.
|
||||
|
||||
W przypadku tej metody musisz mieć utworzony Host proxy dla swoich domen, który jest dostępny przez HTTP i wskazuje na tę instalację Nginx.
|
||||
Po otrzymaniu certyfikatu możesz zmodyfikować Host proxy, aby używał również tego certyfikatu do połączeń HTTPS. Jednak Host proxy nadal będzie musiał być skonfigurowany do dostępu przez HTTP, aby certyfikat mógł być odnawiany.
|
||||
|
||||
Ten proces nie obsługuje domen wieloznacznych (wildcard).
|
||||
|
||||
### Certyfikat DNS
|
||||
|
||||
Certyfikat weryfikowany przez DNS wymaga użycia wtyczki dostawcy DNS. Ten dostawca DNS zostanie użyty do utworzenia tymczasowych rekordów w twojej domenie, a następnie Let's Encrypt sprawdzi te rekordy, aby upewnić się, że jesteś właścicielem i jeśli się powiedzie, wydadzą twój certyfikat.
|
||||
|
||||
Nie musisz mieć utworzonego Hosta proxy przed wystąpieniem o ten typ certyfikatu. Nie musisz również mieć skonfigurowanego Hosta proxy do dostępu przez HTTP.
|
||||
|
||||
Ten proces obsługuje domeny wieloznaczne (wildcard).
|
||||
|
||||
### Własny certyfikat
|
||||
|
||||
Użyj tej opcji, aby przesłać własny certyfikat SSL, dostarczony przez twój własny urząd certyfikacji.
|
||||
7
frontend/src/locale/src/HelpDoc/pl/DeadHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/pl/DeadHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Czym jest host 404?
|
||||
|
||||
Host 404 to po prostu konfiguracja hosta, która wyświetla stronę 404.
|
||||
|
||||
Może to być przydatne, gdy twoja domena jest indeksowana w wyszukiwarkach i chcesz zapewnić ładniejszą stronę błędu lub konkretnie poinformować roboty indeksujące, że strony domeny już nie istnieją.
|
||||
|
||||
Kolejną zaletą posiadania tego hosta jest możliwość śledzenia logów dla odwiedzin oraz przeglądania źródeł ruchu (referrerów).
|
||||
7
frontend/src/locale/src/HelpDoc/pl/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/pl/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Czym jest host proxy?
|
||||
|
||||
Host proxy to punkt wejściowy dla usługi internetowej, którą chcesz przekierować.
|
||||
|
||||
Zapewnia opcjonalne zakończenie SSL dla twojej usługi, która może nie mieć wbudowanej obsługi SSL.
|
||||
|
||||
Hosty proxy są najpopularniejszym zastosowaniem Nginx Proxy Manager
|
||||
5
frontend/src/locale/src/HelpDoc/pl/RedirectionHosts.md
Normal file
5
frontend/src/locale/src/HelpDoc/pl/RedirectionHosts.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Czym jest host przekierowania?
|
||||
|
||||
Host przekierowania przekierowuje żądania z domeny przychodzącej i przenosi odwiedzającego na inną domenę.
|
||||
|
||||
Najczęstszym powodem używania tego typu hosta jest sytuacja, gdy twoja strona internetowa zmienia domeny, ale nadal masz linki z wyszukiwarek lub odnośniki wskazujące na starą domenę.
|
||||
5
frontend/src/locale/src/HelpDoc/pl/Streams.md
Normal file
5
frontend/src/locale/src/HelpDoc/pl/Streams.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Czym jest strumień?
|
||||
|
||||
Stosunkowo nowa funkcja dla Nginx, strumień służy do przekazywania ruchu TCP/UDP bezpośrednio na inny komputer/serwer w sieci.
|
||||
|
||||
Jeśli prowadzisz serwery gier, FTP lub SSH, może się to okazać przydatne
|
||||
6
frontend/src/locale/src/HelpDoc/pl/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/pl/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
7
frontend/src/locale/src/HelpDoc/ru/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/ru/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Что такое список доступа?
|
||||
|
||||
Списки доступа позволяют задавать белый/чёрный список IP‑адресов клиентов и настраивать аутентификацию для прокси‑хостов через базовую HTTP‑аутентификацию.
|
||||
|
||||
Для одного списка доступа можно настроить несколько правил клиентов, логины и пароли, а затем применить его к одному или нескольким _прокси‑хостам_.
|
||||
|
||||
Это особенно полезно для проксируемых веб‑сервисов без встроенной аутентификации или когда нужно защититься от неизвестных клиентов.
|
||||
21
frontend/src/locale/src/HelpDoc/ru/Certificates.md
Normal file
21
frontend/src/locale/src/HelpDoc/ru/Certificates.md
Normal file
@@ -0,0 +1,21 @@
|
||||
## Справка по сертификатам
|
||||
|
||||
### HTTP-сертификат
|
||||
|
||||
Сертификат, подтверждённый по HTTP, означает, что серверы Let's Encrypt попытаются обратиться к вашим доменам по HTTP (не HTTPS!) и при успехе выпустят сертификат.
|
||||
|
||||
Для этого метода должен существовать _прокси‑хост_ для ваших доменов, доступный по HTTP и указывающий на эту установку Nginx. После выдачи сертификата вы можете настроить _прокси‑хост_ на использование этого сертификата для HTTPS‑подключений. Однако доступ по HTTP должен сохраняться, чтобы сертификат мог обновляться.
|
||||
|
||||
Этот способ _не_ поддерживает wildcard‑домены.
|
||||
|
||||
### DNS-сертификат
|
||||
|
||||
Сертификат, подтверждённый по DNS, требует использования плагина DNS‑провайдера. Такой провайдер создаст временные записи в вашем домене, затем Let's Encrypt проверит эти записи, чтобы убедиться, что вы владелец домена, и при успехе выпустит сертификат.
|
||||
|
||||
Для запроса такого сертификата предварительно создавать _прокси‑хост_ не требуется. Также не нужен доступ по HTTP для вашего _прокси‑хоста_.
|
||||
|
||||
Этот способ _поддерживает_ wildcard‑домены.
|
||||
|
||||
### Свой сертификат
|
||||
|
||||
Используйте этот вариант, чтобы загрузить собственный SSL‑сертификат, выданный вашим удостоверяющим центром (CA).
|
||||
7
frontend/src/locale/src/HelpDoc/ru/DeadHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/ru/DeadHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Что такое 404‑хост?
|
||||
|
||||
404‑хост — это конфигурация, которая показывает страницу 404.
|
||||
|
||||
Это полезно, когда ваш домен присутствует в поисковых системах и вы хотите показать более дружелюбную страницу ошибки или явно сообщить индексаторам, что страницы домена больше не существуют.
|
||||
|
||||
Ещё одно преимущество — можно отдельно отслеживать обращения в журналах и смотреть источники переходов.
|
||||
7
frontend/src/locale/src/HelpDoc/ru/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/ru/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Что такое прокси‑хост?
|
||||
|
||||
Прокси‑хост — это входная точка веб‑сервиса, который вы проксируете.
|
||||
|
||||
Он может выполнять терминaцию SSL для сервиса, у которого нет собственной поддержки SSL.
|
||||
|
||||
Прокси‑хосты — самый распространённый сценарий использования Nginx Proxy Manager.
|
||||
5
frontend/src/locale/src/HelpDoc/ru/RedirectionHosts.md
Normal file
5
frontend/src/locale/src/HelpDoc/ru/RedirectionHosts.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Что такое редирект‑хост?
|
||||
|
||||
Редирект‑хост перенаправляет запросы, поступающие на входящий домен, на другой домен.
|
||||
|
||||
Чаще всего это используют, когда сайт сменил домен, а в поиске или на сторонних ресурсах всё ещё остаются ссылки на старый домен.
|
||||
5
frontend/src/locale/src/HelpDoc/ru/Streams.md
Normal file
5
frontend/src/locale/src/HelpDoc/ru/Streams.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Что такое поток?
|
||||
|
||||
Относительно новая возможность Nginx: поток позволяет напрямую проксировать TCP/UDP‑трафик на другой компьютер в сети.
|
||||
|
||||
Полезно для игровых серверов, FTP или SSH‑серверов.
|
||||
6
frontend/src/locale/src/HelpDoc/ru/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/ru/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
7
frontend/src/locale/src/HelpDoc/sk/AccessLists.md
Normal file
7
frontend/src/locale/src/HelpDoc/sk/AccessLists.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Čo je zoznam prístupov?
|
||||
|
||||
Zoznamy prístupov poskytujú čiernu alebo bielu listinu konkrétnych IP adries klientov spolu s overovaním pre proxy hostiteľov prostredníctvom základného overovania HTTP.
|
||||
|
||||
Môžete nakonfigurovať viacero pravidiel pre klientov, používateľských mien a hesiel pre jeden zoznam prístupov a potom ho použiť na jeden alebo viacero proxy hostiteľov.
|
||||
|
||||
Toto je najužitočnejšie pre presmerované webové služby, ktoré nemajú zabudované overovacie mechanizmy, alebo ak sa chcete chrániť pred neznámymi klientmi.
|
||||
32
frontend/src/locale/src/HelpDoc/sk/Certificates.md
Normal file
32
frontend/src/locale/src/HelpDoc/sk/Certificates.md
Normal file
@@ -0,0 +1,32 @@
|
||||
## Pomoc s certifikátmi
|
||||
|
||||
### Certifikát HTTP
|
||||
|
||||
Certifikát overený protokolom HTTP znamená, že servery Let's Encrypt sa
|
||||
pokúsia pripojiť k vašim doménam cez protokol HTTP (nie HTTPS!) a v prípade úspechu
|
||||
vydajú váš certifikát.
|
||||
|
||||
Pre túto metódu budete musieť mať pre svoje domény vytvorený _Proxy Host_, ktorý
|
||||
je prístupný cez HTTP a smeruje na túto inštaláciu Nginx. Po vydaní certifikátu
|
||||
môžete zmeniť _Proxy Host_ tak, aby tento certifikát používal aj pre HTTPS
|
||||
pripojenia. _Proxy Host_ však bude stále potrebné nakonfigurovať pre prístup cez HTTP,
|
||||
aby sa certifikát mohol obnoviť.
|
||||
|
||||
Tento proces _nepodporuje_ domény s divokými kartami.
|
||||
|
||||
### Certifikát DNS
|
||||
|
||||
Certifikát overený DNS vyžaduje použitie pluginu DNS Provider. Tento DNS
|
||||
Provider sa použije na vytvorenie dočasných záznamov vo vašej doméne a potom Let's
|
||||
Encrypt overí tieto záznamy, aby sa uistil, že ste vlastníkom, a ak bude úspešný,
|
||||
vydá váš certifikát.
|
||||
|
||||
Pred požiadaním o tento typ certifikátu nie je potrebné vytvoriť _Proxy Host_.
|
||||
Tiež nie je potrebné mať _Proxy Host_ nakonfigurovaný pre prístup HTTP.
|
||||
|
||||
Tento proces _podporuje_ domény s divokými kartami.
|
||||
|
||||
### Vlastný certifikát
|
||||
|
||||
Túto možnosť použite na nahratie vlastného SSL certifikátu, ktorý vám poskytla vaša
|
||||
certifikačná autorita.
|
||||
10
frontend/src/locale/src/HelpDoc/sk/DeadHosts.md
Normal file
10
frontend/src/locale/src/HelpDoc/sk/DeadHosts.md
Normal file
@@ -0,0 +1,10 @@
|
||||
## Čo je to 404 Hostiteľ?
|
||||
|
||||
404 Hostiteľ je jednoducho nastavenie hostiteľa, ktoré zobrazuje stránku 404.
|
||||
|
||||
To môže byť užitočné, ak je vaša doména uvedená vo vyhľadávačoch a chcete
|
||||
poskytnúť krajšiu stránku s chybou alebo konkrétne oznámiť vyhľadávačom, že
|
||||
stránky domény už neexistujú.
|
||||
|
||||
Ďalšou výhodou tohto hostiteľa je sledovanie protokolov o návštevách a
|
||||
zobrazenie odkazov.
|
||||
7
frontend/src/locale/src/HelpDoc/sk/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/sk/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Čo je proxy hostiteľ?
|
||||
|
||||
Proxy hostiteľ je prichádzajúci koncový bod pre webovú službu, ktorú chcete presmerovať.
|
||||
|
||||
Poskytuje voliteľné ukončenie SSL pre vašu službu, ktorá nemusí mať zabudovanú podporu SSL.
|
||||
|
||||
Proxy hostitelia sú najbežnejším použitím pre Nginx Proxy Manager.
|
||||
7
frontend/src/locale/src/HelpDoc/sk/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/sk/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Čo je presmerovací hostiteľ?
|
||||
|
||||
Presmerovací hostiteľ presmeruje požiadavky z prichádzajúcej domény a presmeruje
|
||||
návštevníka na inú doménu.
|
||||
|
||||
Najčastejším dôvodom na použitie tohto typu hostiteľa je situácia, keď vaša webová stránka zmení
|
||||
doménu, ale stále máte odkazy vo vyhľadávačoch alebo referenčné odkazy smerujúce na starú doménu.
|
||||
6
frontend/src/locale/src/HelpDoc/sk/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/sk/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Čo je stream?
|
||||
|
||||
Stream je relatívne nová funkcia pre Nginx, ktorá slúži na presmerovanie TCP/UDP
|
||||
dátového toku priamo do iného počítača v sieti.
|
||||
|
||||
Ak prevádzkujete herné servery, FTP alebo SSH servery, táto funkcia sa vám môže hodiť.
|
||||
6
frontend/src/locale/src/HelpDoc/sk/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/sk/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
11
frontend/src/locale/src/HelpDoc/vi/AccessLists.md
Normal file
11
frontend/src/locale/src/HelpDoc/vi/AccessLists.md
Normal file
@@ -0,0 +1,11 @@
|
||||
## Khái niệm Access List là gì?
|
||||
|
||||
Access List (Danh sách truy cập) cung cấp cơ chế chặn (blacklist) hoặc cho phép (whitelist) các địa chỉ IP của client, đồng thời hỗ trợ xác thực Basic HTTP Authentication cho các Proxy Host.
|
||||
|
||||
Bạn có thể cấu hình nhiều quy tắc client, nhiều tên người dùng và mật khẩu trong một Access List duy nhất, sau đó áp dụng Access List đó cho một hoặc nhiều Proxy Host.
|
||||
|
||||
Tính năng này đặc biệt hữu ích đối với:
|
||||
|
||||
các dịch vụ web được forward mà không có cơ chế xác thực tích hợp, hoặc
|
||||
|
||||
khi bạn muốn bảo vệ tài nguyên khỏi những client không xác định.
|
||||
25
frontend/src/locale/src/HelpDoc/vi/Certificates.md
Normal file
25
frontend/src/locale/src/HelpDoc/vi/Certificates.md
Normal file
@@ -0,0 +1,25 @@
|
||||
## Hỗ trợ Chứng chỉ
|
||||
|
||||
### Chứng chỉ HTTP (HTTP Certificate)
|
||||
|
||||
Chứng chỉ được xác thực qua HTTP nghĩa là máy chủ của Let's Encrypt sẽ cố gắng truy cập vào tên miền của bạn thông qua HTTP (không phải HTTPS!). Nếu kiểm tra thành công, chứng chỉ sẽ được cấp.
|
||||
|
||||
Với phương thức này, bạn phải tạo trước một Proxy Host cho tên miền, có thể truy cập qua HTTP và trỏ về đúng cài đặt Nginx này.
|
||||
Sau khi chứng chỉ được cấp, bạn có thể chỉnh sửa Proxy Host để sử dụng chứng chỉ đó cho kết nối HTTPS.
|
||||
|
||||
Tuy nhiên, Proxy Host vẫn phải hỗ trợ truy cập HTTP để việc gia hạn chứng chỉ diễn ra bình thường.
|
||||
|
||||
Phương thức này _không hỗ trợ_ wildcard domain.
|
||||
|
||||
### Chứng chỉ DNS (DNS Certificate)
|
||||
|
||||
Chứng chỉ được xác thực qua DNS yêu cầu bạn sử dụng plugin của DNS Provider.
|
||||
Plugin này sẽ tạo các bản ghi tạm thời trong DNS của bạn để Let's Encrypt kiểm tra quyền sở hữu tên miền. Nếu hợp lệ, chứng chỉ sẽ được cấp.
|
||||
|
||||
Khi dùng phương thức này: Bạn không cần tạo sẵn Proxy Host trước và bạn không cần mở HTTP cho Proxy Host.
|
||||
|
||||
Phương thức DNS _có hỗ trợ_ wildcard domain.
|
||||
|
||||
### Chứng chỉ tùy chỉnh (Custom Certificate)
|
||||
|
||||
Tùy chọn này cho phép bạn tải lên chứng chỉ SSL của riêng mình, được cung cấp bởi Certificate Authority (CA) mà bạn tự chọn.
|
||||
8
frontend/src/locale/src/HelpDoc/vi/DeadHosts.md
Normal file
8
frontend/src/locale/src/HelpDoc/vi/DeadHosts.md
Normal file
@@ -0,0 +1,8 @@
|
||||
## 404 Host là gì?
|
||||
|
||||
404 Host đơn giản là một host được thiết lập để hiển thị trang 404.
|
||||
|
||||
Điều này có thể hữu ích khi tên miền của bạn vẫn xuất hiện trên các công cụ tìm kiếm và bạn muốn hiển thị một trang lỗi đẹp hơn, hoặc muốn thông báo rõ ràng cho các trình thu thập dữ liệu tìm kiếm rằng các trang thuộc tên miền đó không còn tồn tại.
|
||||
|
||||
Một lợi ích khác của việc có 404 Host là bạn có thể theo dõi nhật ký truy cập vào nó và
|
||||
xem các nguồn giới thiệu (referrers).
|
||||
7
frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## Proxy Host là gì?
|
||||
|
||||
Proxy Host là điểm truy cập đầu vào cho một dịch vụ web mà bạn muốn chuyển tiếp.
|
||||
|
||||
Nó cung cấp khả năng kết thúc SSL (SSL termination) tùy chọn cho các dịch vụ vốn không hỗ trợ SSL tích hợp.
|
||||
|
||||
Proxy Host là loại cấu hình phổ biến nhất trong Nginx Proxy Manager.
|
||||
5
frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md
Normal file
5
frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Redirection Host là gì?
|
||||
|
||||
Redirection Host sẽ chuyển hướng các yêu cầu từ tên miền truy cập vào và đưa người xem sang một tên miền khác
|
||||
|
||||
Lý do phổ biến nhất để sử dụng loại host này là khi trang web của bạn đổi sang tên miền mới nhưng vẫn còn các liên kết từ công cụ tìm kiếm hoặc nguồn giới thiệu trỏ về tên miền cũ.
|
||||
6
frontend/src/locale/src/HelpDoc/vi/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/vi/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## Stream là gì?
|
||||
|
||||
Stream là một tính năng tương đối mới của Nginx, dùng để chuyển tiếp lưu lượng
|
||||
TCP/UDP trực tiếp tới một máy khác trong mạng.
|
||||
|
||||
Nếu bạn đang vận hành các máy chủ game, FTP hoặc SSH thì tính năng này sẽ rất hữu ích.
|
||||
6
frontend/src/locale/src/HelpDoc/vi/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/vi/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * as AccessLists from "./AccessLists.md";
|
||||
export * as Certificates from "./Certificates.md";
|
||||
export * as DeadHosts from "./DeadHosts.md";
|
||||
export * as ProxyHosts from "./ProxyHosts.md";
|
||||
export * as RedirectionHosts from "./RedirectionHosts.md";
|
||||
export * as Streams from "./Streams.md";
|
||||
7
frontend/src/locale/src/HelpDoc/zh/AccessLists.md
Executable file
7
frontend/src/locale/src/HelpDoc/zh/AccessLists.md
Executable file
@@ -0,0 +1,7 @@
|
||||
## 什么是通信规则?
|
||||
|
||||
通信规则提供了一个特定客户IP地址的黑名单或白名单,以及通过基本HTTP认证对代理服务的认证。
|
||||
|
||||
你可以为一个通信规则配置多个客户规则、用户名和密码,然后将其应用于代理服务。
|
||||
|
||||
这对那些没有内置认证机制的转发网络服务或你想保护其免受未知客户的访问是最有用的。
|
||||
21
frontend/src/locale/src/HelpDoc/zh/Certificates.md
Executable file
21
frontend/src/locale/src/HelpDoc/zh/Certificates.md
Executable file
@@ -0,0 +1,21 @@
|
||||
## 证书帮助
|
||||
|
||||
### HTTP 证书
|
||||
|
||||
HTTP 验证的证书表示 Let's Encrypt 服务器将尝试通过 HTTP(而非 HTTPS!)访问您的域名,如果成功,它们将为您颁发证书。
|
||||
|
||||
使用此方法时,您必须为您的域名创建一个可通过 HTTP 访问并指向此 Nginx 安装的 代理主机。在获得证书后,您可以修改该 代理主机,使其也使用此证书处理 HTTPS 连接。然而,为了证书能够续期,该 代理主机 仍需配置为支持 HTTP 访问。
|
||||
|
||||
此过程_不支持_通配符域名。
|
||||
|
||||
### DNS 证书
|
||||
|
||||
DNS 验证的证书要求您使用一个 DNS 服务商插件。该 DNS 服务商将用于在您的域名下创建临时记录,随后 Let's Encrypt 将查询这些记录以确认您是域名所有者,如果成功,它们将为您颁发证书。
|
||||
|
||||
请求此类证书前,您无需预先创建 代理主机,也无需将您的 代理主机 配置为支持 HTTP 访问。
|
||||
|
||||
此过程_支持_通配符域名。
|
||||
|
||||
### 自定义证书
|
||||
|
||||
使用此选项上传您自己的 SSL 证书,该证书由您自己的证书颁发机构提供。
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user