diff options
author | crupest <crupest@outlook.com> | 2022-11-27 11:18:47 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-11-27 11:18:47 +0800 |
commit | 3be4d089dca831ec5e79eb457100a967b8a20398 (patch) | |
tree | a27aba4a7bbac9181ecb2e71994f8d3411b8975e | |
parent | b0a7c606af768b190d5541e407803bd4a30b1dac (diff) | |
download | crupest-3be4d089dca831ec5e79eb457100a967b8a20398.tar.gz crupest-3be4d089dca831ec5e79eb457100a967b8a20398.tar.bz2 crupest-3be4d089dca831ec5e79eb457100a967b8a20398.zip |
Nginx add redirect.
-rw-r--r-- | template/nginx/redirect.conf.template | 20 | ||||
-rw-r--r-- | template/nginx/server.json | 5 | ||||
-rw-r--r-- | template/nginx/server.schema.json | 47 | ||||
-rw-r--r-- | template/nginx/server.ts | 12 | ||||
-rwxr-xr-x | tool/modules/nginx.py | 9 |
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)) |