Commit 80984b5e authored by nanahira's avatar nanahira

add support for static and php

parent 216d91a7
Pipeline #21205 canceled with stages
in 6 minutes and 34 seconds
......@@ -20,18 +20,40 @@ export interface SiteRenderData {
https?: SiteHttps;
headers?: Header[];
normalizeDomain?: string;
minio?: boolean;
disableTop?: boolean;
serverExtra?: string[];
locationExtra?: string[];
}
export interface ProxyRenderData extends SiteRenderData {
proxy: true;
minio?: boolean;
timeout?: number;
upstream: string;
noVerifyCerts?: boolean;
noBuffer?: boolean;
sni?: boolean;
noCache?: boolean;
}
interface FileRenderData extends SiteRenderData {
root: string;
index: string;
expires: string;
}
export interface StaticRenderData extends FileRenderData {
static: true;
browse?: boolean;
}
export interface PhpRenderData extends FileRenderData {
php: true;
upstream: string;
timeout?: number;
serverExtra?: string[];
locationExtra?: string[];
}
export type SpecificRenderData = PhpRenderData | StaticRenderData | ProxyRenderData;
export interface RenderData {
purgeAllowed?: string[];
externalRealIp?: boolean;
......@@ -44,12 +66,13 @@ export interface RenderData {
certsPath: string;
sites: SiteRenderData[];
httpExtra?: string[];
nginxExtra?: string[];
}
async function getSiteData(
domain: string,
input: Record<string, string> = process.env,
): Promise<SiteRenderData> {
): Promise<SpecificRenderData> {
const parser = new Parser(`SITE_${domain}_`, input);
let https: SiteHttps;
const httpsCert = parser.getString('HTTPS');
......@@ -71,6 +94,38 @@ async function getSiteData(
};
}
}
const targetUrl = new URL(input[`SITE_${domain}`]);
let specificRenderData: SpecificRenderData;
if (targetUrl.protocol === 'static:') {
specificRenderData = {
static: true,
root: targetUrl.pathname,
index: parser.getString('INDEX') || 'index.html',
expires: parser.getString('EXPIRES') || '10m',
browse: parser.getBoolean('BROWSE'),
} as StaticRenderData;
} else if (targetUrl.protocol === 'php:') {
specificRenderData = {
php: true,
root: targetUrl.pathname,
index: parser.getString('INDEX') || 'index.php',
expires: parser.getString('EXPIRES') || '10m',
upstream: targetUrl.host,
} as PhpRenderData;
} else {
specificRenderData = {
proxy: true,
upstream: input[`SITE_${domain}`],
noVerifyCerts: parser.getBoolean('NO_VERIFY_CERTS'),
noBuffer: parser.getBoolean('NO_BUFFER'),
sni: parser.getBoolean('SNI'),
noCache: parser.getBoolean('NO_CACHE'),
minio: parser.getBoolean('MINIO'),
timeout: parser.getNumber('TIMEOUT'),
} as ProxyRenderData;
}
return {
domains: domains,
ports: parser.getArrayNumber('PORT') || [80],
......@@ -80,16 +135,10 @@ async function getSiteData(
value,
})),
normalizeDomain: parser.getString('NORMALIZE_DOMAIN'),
minio: parser.getBoolean('MINIO'),
disableTop: parser.getBoolean('DISABLE_TOP'),
noVerifyCerts: parser.getBoolean('NO_VERIFY_CERTS'),
noBuffer: parser.getBoolean('NO_BUFFER'),
sni: parser.getBoolean('SNI'),
noCache: parser.getBoolean('NO_CACHE'),
upstream: input[`SITE_${domain}`],
timeout: parser.getNumber('TIMEOUT'),
serverExtra: parser.getArray('SERVER_EXTRA'),
locationExtra: parser.getArray('LOCATION_EXTRA'),
...specificRenderData,
};
}
......@@ -113,5 +162,6 @@ export async function getData(
getSiteNames().map((domain) => getSiteData(domain, input)),
),
httpExtra: parser.getArray('HTTP_EXTRA'),
nginxExtra: parser.getArray('NGINX_EXTRA'),
};
}
......@@ -191,6 +191,7 @@ http {
{{/serverExtra}}
location / {
{{#proxy}}
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Forwarded "for=$remote_addr;by=$hostname";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
......@@ -227,10 +228,44 @@ http {
proxy_cache off;
{{/noCache}}
proxy_pass {{upstream}};
{{/proxy}}
{{#static}}
root {{root}};
expires {{expires}};
{{#browse}}
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
{{/browse}}
{{^browse}}
index {{index}};
try_files $uri $uri/ /{{index}};
{{/browse}}
{{/static}}
{{#php}}
root {{root}};
index {{index}};
expires {{expires}};
try_files $uri $uri/ /{{index}}?$query_string;
{{/php}}
{{#locationExtra}}
{{.}}
{{/locationExtra}}
}
{{#php}}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass {{upstream}};
fastcgi_index {{index}};
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
{{#https}}
fastcgi_param HTTPS on;
{{/https}}
}
{{/php}}
}
{{/sites}}
......@@ -244,3 +279,7 @@ http {
stream {
include /etc/nginx/stream/*.conf;
}
{{#nginxExtra}}
{{.}}
{{/nginxExtra}}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment