aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-11-27 11:18:47 +0800
committercrupest <crupest@outlook.com>2022-11-27 11:18:47 +0800
commit3be4d089dca831ec5e79eb457100a967b8a20398 (patch)
treea27aba4a7bbac9181ecb2e71994f8d3411b8975e
parentb0a7c606af768b190d5541e407803bd4a30b1dac (diff)
downloadcrupest-3be4d089dca831ec5e79eb457100a967b8a20398.tar.gz
crupest-3be4d089dca831ec5e79eb457100a967b8a20398.tar.bz2
crupest-3be4d089dca831ec5e79eb457100a967b8a20398.zip
Nginx add redirect.
-rw-r--r--template/nginx/redirect.conf.template20
-rw-r--r--template/nginx/server.json5
-rw-r--r--template/nginx/server.schema.json47
-rw-r--r--template/nginx/server.ts12
-rwxr-xr-xtool/modules/nginx.py9
5 files changed, 78 insertions, 15 deletions
diff --git a/template/nginx/redirect.conf.template b/template/nginx/redirect.conf.template
new file mode 100644
index 0000000..e0323ea
--- /dev/null
+++ b/template/nginx/redirect.conf.template
@@ -0,0 +1,20 @@
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ server_name ${CRUPEST_NGINX_SUBDOMAIN}.${CRUPEST_DOMAIN};
+
+ return 301 ${CRUPEST_NGINX_URL}$request_uri;
+
+}
+
+server {
+ listen 80;
+ listen [::]:80;
+ server_name ${CRUPEST_NGINX_SUBDOMAIN}.${CRUPEST_DOMAIN};
+
+ return 301 ${CRUPEST_NGINX_URL}$request_uri;
+
+ location /.well-known/acme-challenge {
+ root /srv/acme;
+ }
+}
diff --git a/template/nginx/server.json b/template/nginx/server.json
index 56f3845..dc3904d 100644
--- a/template/nginx/server.json
+++ b/template/nginx/server.json
@@ -26,6 +26,11 @@
}
},
{
+ "type": "redirect",
+ "subdomain": "github",
+ "url": "https://github.com/crupest"
+ },
+ {
"type": "cert-only",
"subdomain": "mail"
}
diff --git a/template/nginx/server.schema.json b/template/nginx/server.schema.json
index 536fead..5923b0a 100644
--- a/template/nginx/server.schema.json
+++ b/template/nginx/server.schema.json
@@ -15,6 +15,23 @@
},
"type": "object"
},
+ "RedirectSite": {
+ "properties": {
+ "subdomain": {
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "redirect"
+ ],
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
"ReverseProxySite": {
"properties": {
"subdomain": {
@@ -40,6 +57,22 @@
},
"type": "object"
},
+ "Site": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/ReverseProxySite"
+ },
+ {
+ "$ref": "#/definitions/StaticFileSite"
+ },
+ {
+ "$ref": "#/definitions/RedirectSite"
+ },
+ {
+ "$ref": "#/definitions/CertOnlySite"
+ }
+ ]
+ },
"StaticFileSite": {
"properties": {
"root": {
@@ -61,20 +94,10 @@
"properties": {
"sites": {
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/ReverseProxySite"
- },
- {
- "$ref": "#/definitions/StaticFileSite"
- },
- {
- "$ref": "#/definitions/CertOnlySite"
- }
- ]
+ "$ref": "#/definitions/Site"
},
"type": "array"
}
},
"type": "object"
-} \ No newline at end of file
+}
diff --git a/template/nginx/server.ts b/template/nginx/server.ts
index 6a5d24d..0fad6f5 100644
--- a/template/nginx/server.ts
+++ b/template/nginx/server.ts
@@ -15,12 +15,22 @@ export interface StaticFileSite {
root: string;
}
+export interface RedirectSite {
+ type: "redirect";
+ subdomain: string;
+ url: string;
+}
+
export interface CertOnlySite {
type: "cert-only";
subdomain: string;
}
-export type Site = ReverseProxySite | StaticFileSite | CertOnlySite;
+export type Site =
+ | ReverseProxySite
+ | StaticFileSite
+ | RedirectSite
+ | CertOnlySite;
export type Sites = Site[];
diff --git a/tool/modules/nginx.py b/tool/modules/nginx.py
index 7aee923..08c8e1d 100755
--- a/tool/modules/nginx.py
+++ b/tool/modules/nginx.py
@@ -25,6 +25,8 @@ static_file_template = Template(os.path.join(
nginx_template_dir, 'static-file.conf.template'))
reverse_proxy_template = Template(os.path.join(
nginx_template_dir, 'reverse-proxy.conf.template'))
+redirect_template = Template(os.path.join(
+ nginx_template_dir, 'redirect.conf.template'))
cert_only_template = Template(os.path.join(
nginx_template_dir, 'cert-only.conf.template'))
@@ -50,8 +52,6 @@ def nginx_config_gen(domain: str, dest: str) -> None:
# generate nginx config for each site
sites: list = server["sites"]
for site in sites:
- if site["type"] not in ['static-file', 'reverse-proxy', "cert-only"]:
- continue
subdomain = site["subdomain"]
local_config = config.copy()
local_config['CRUPEST_NGINX_SUBDOMAIN'] = subdomain
@@ -62,8 +62,13 @@ def nginx_config_gen(domain: str, dest: str) -> None:
template = reverse_proxy_template
local_config['CRUPEST_NGINX_UPSTREAM_NAME'] = site["upstream"]["name"]
local_config['CRUPEST_NGINX_UPSTREAM_SERVER'] = site["upstream"]["server"]
+ elif site["type"] == 'redirect':
+ template = redirect_template
+ local_config['CRUPEST_NGINX_URL'] = site["url"]
elif site["type"] == 'cert-only':
template = cert_only_template
+ else:
+ raise Exception('Invalid site type')
with open(os.path.join(dest, f'{subdomain}.{domain}.conf'), 'w') as f:
f.write(template.generate(local_config))