* #116 Log Cloudflare headers * #116 Log Cloudflare headers * #116 Log Cloudflare headers * #163 Fix linting * Update src/nginxconfig/generators/conf/website.conf.js Co-authored-by: Matt (IPv4) Cowley <me@mattcowley.co.uk> * Update src/nginxconfig/generators/conf/website.conf.js Co-authored-by: Matt (IPv4) Cowley <me@mattcowley.co.uk> * Update src/nginxconfig/generators/conf/website.conf.js Co-authored-by: Matt (IPv4) Cowley <me@mattcowley.co.uk> * Update src/nginxconfig/generators/conf/nginx.conf.js Co-authored-by: Matt (IPv4) Cowley <me@mattcowley.co.uk> * Remove extra div + incorrect if check, revert linebreak removal * handle custom log formats as an array * Update src/nginxconfig/generators/conf/nginx.conf.js Co-authored-by: Matt (IPv4) Cowley <me@mattcowley.co.uk> * remove curly braces, move default log format array definition inside if statement Co-authored-by: Matt (IPv4) Cowley <me@mattcowley.co.uk>pull/189/head
parent
ae322cf2c5
commit
3b00bda80e
|
@ -73,8 +73,44 @@ export default (domains, global) => {
|
||||||
config.http.push(['include', 'mime.types']);
|
config.http.push(['include', 'mime.types']);
|
||||||
config.http.push(['default_type', 'application/octet-stream']);
|
config.http.push(['default_type', 'application/octet-stream']);
|
||||||
|
|
||||||
|
// Append Cloudflare request headers to the default log format
|
||||||
|
if (global.logging.cloudflare.computed) {
|
||||||
|
config.http.push(['# Log Format', '']);
|
||||||
|
|
||||||
|
// Define default log format as an array
|
||||||
|
let logging = ['$remote_addr', '-', '$remote_user', '[$time_local]',
|
||||||
|
'"$request"', '$status', '$body_bytes_sent',
|
||||||
|
'"$http_referer"', '"$http_user_agent"'];
|
||||||
|
|
||||||
|
if (global.logging.cfRay.computed)
|
||||||
|
logging.push('$http_cf_ray');
|
||||||
|
|
||||||
|
if (global.logging.cfConnectingIp.computed)
|
||||||
|
logging.push('$http_cf_connecting_ip');
|
||||||
|
|
||||||
|
if (global.logging.xForwardedFor.computed)
|
||||||
|
logging.push('$http_x_forwarded_for');
|
||||||
|
|
||||||
|
if (global.logging.xForwardedProto.computed)
|
||||||
|
logging.push('$http_x_forwarded_proto');
|
||||||
|
|
||||||
|
if (global.logging.trueClientIp.computed)
|
||||||
|
logging.push('$http_true_client_ip');
|
||||||
|
|
||||||
|
if (global.logging.cfIpCountry.computed)
|
||||||
|
logging.push('$http_cf_ipcountry');
|
||||||
|
|
||||||
|
if (global.logging.cfVisitor.computed)
|
||||||
|
logging.push('$http_cf_visitor');
|
||||||
|
|
||||||
|
if (global.logging.cdnLoop.computed)
|
||||||
|
logging.push('$http_cdn_loop');
|
||||||
|
|
||||||
|
config.http.push(['log_format', `cloudflare '${logging.join(' ')}'`]);
|
||||||
|
}
|
||||||
|
|
||||||
config.http.push(['# Logging', '']);
|
config.http.push(['# Logging', '']);
|
||||||
config.http.push(['access_log', global.logging.accessLog.computed.trim() || 'off']);
|
config.http.push(['access_log', (global.logging.accessLog.computed.trim() + (global.logging.cloudflare.computed ? ' cloudflare' : '')) || 'off']);
|
||||||
config.http.push(['error_log', global.logging.errorLog.computed.trim() || '/dev/null']);
|
config.http.push(['error_log', global.logging.errorLog.computed.trim() || '/dev/null']);
|
||||||
|
|
||||||
if (global.security.limitReq.computed) {
|
if (global.security.limitReq.computed) {
|
||||||
|
|
|
@ -184,7 +184,7 @@ export default (domain, domains, global) => {
|
||||||
serverConfig.push(['# logging', '']);
|
serverConfig.push(['# logging', '']);
|
||||||
|
|
||||||
if (domain.logging.accessLog.computed)
|
if (domain.logging.accessLog.computed)
|
||||||
serverConfig.push(['access_log', getAccessLogDomainPath(domain, global)]);
|
serverConfig.push(['access_log', getAccessLogDomainPath(domain, global) + (global.logging.cloudflare.computed ? ' cloudflare' : '')]);
|
||||||
|
|
||||||
if (domain.logging.errorLog.computed)
|
if (domain.logging.errorLog.computed)
|
||||||
serverConfig.push(['error_log', getErrorLogDomainPath(domain, global)]);
|
serverConfig.push(['error_log', getErrorLogDomainPath(domain, global)]);
|
||||||
|
|
|
@ -28,4 +28,14 @@ import common from '../../common';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
enableFileNotFoundErrorLogging: `${common.enable} file not found error logging in`,
|
enableFileNotFoundErrorLogging: `${common.enable} file not found error logging in`,
|
||||||
|
logformat: 'log_format',
|
||||||
|
enableCloudflare: 'add Cloudflare request headers to the default log format',
|
||||||
|
cfRay: 'CF-Ray',
|
||||||
|
cfConnectingIp: 'CF-Connecting-IP',
|
||||||
|
xForwardedFor: 'X-Forwarded-For',
|
||||||
|
xForwardedProto: 'X-Forwarded-Proto',
|
||||||
|
trueClientIp: 'True-Client-IP',
|
||||||
|
cfIpCountry: 'CF-IPCountry',
|
||||||
|
cfVisitor: 'CF-Visitor',
|
||||||
|
cdnLoop: 'CDN-Loop',
|
||||||
};
|
};
|
||||||
|
|
|
@ -77,6 +77,88 @@ THE SOFTWARE.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="field is-horizontal is-aligned-top">
|
||||||
|
<div class="field-label">
|
||||||
|
<label class="label">{{ i18n.templates.globalSections.logging.logformat }}</label>
|
||||||
|
</div>
|
||||||
|
<div class="field-body">
|
||||||
|
<div class="field">
|
||||||
|
<div v-if="cloudflareEnabled" :class="`control${cloudflareChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="cloudflare" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.enableCloudflare }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="cfRayEnabled" :class="`control${cfRayChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="cfRay" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.cfRay }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="cfConnectingIpEnabled" :class="`control${cfConnectingIpChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="cfConnectingIp" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.cfConnectingIp }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="xForwardedForEnabled" :class="`control${xForwardedForChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="xForwardedFor" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.xForwardedFor }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="xForwardedProtoEnabled" :class="`control${xForwardedProtoChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="xForwardedProto" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.xForwardedProto }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="trueClientIpEnabled" :class="`control${trueClientIpChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="trueClientIp" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.trueClientIp }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="cfIpCountryEnabled" :class="`control${cfIpCountryChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="cfIpCountry" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.cfIpCountry }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="cfVisitorEnabled" :class="`control${cfVisitorChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="cfVisitor" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.cfVisitor }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="cdnLoopEnabled" :class="`control${cdnLoopChanged ? ' is-changed' : ''}`">
|
||||||
|
<div class="checkbox">
|
||||||
|
<PrettyCheck v-model="cdnLoop" class="p-default p-curve p-fill p-icon">
|
||||||
|
<i slot="extra" class="icon fas fa-check"></i>
|
||||||
|
{{ i18n.templates.globalSections.logging.cdnLoop }}
|
||||||
|
</PrettyCheck>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -99,6 +181,42 @@ THE SOFTWARE.
|
||||||
default: false,
|
default: false,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
},
|
},
|
||||||
|
cloudflare: {
|
||||||
|
default: false,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
cfRay: {
|
||||||
|
default: true,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
cfConnectingIp: {
|
||||||
|
default: true,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
xForwardedFor: {
|
||||||
|
default: false,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
xForwardedProto: {
|
||||||
|
default: false,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
trueClientIp: {
|
||||||
|
default: false,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
cfIpCountry: {
|
||||||
|
default: false,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
cfVisitor: {
|
||||||
|
default: false,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
cdnLoop: {
|
||||||
|
default: false,
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -118,5 +236,48 @@ THE SOFTWARE.
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: computedFromDefaults(defaults, 'logging'), // Getters & setters for the delegated data
|
computed: computedFromDefaults(defaults, 'logging'), // Getters & setters for the delegated data
|
||||||
|
watch: {
|
||||||
|
// Show Cloudflare header options if Cloudflare is enabled
|
||||||
|
'$props.data.cloudflare': {
|
||||||
|
handler(data) {
|
||||||
|
if (data.computed) {
|
||||||
|
this.$props.data.cfRay.enabled = true;
|
||||||
|
this.$props.data.cfRay.computed = this.$props.data.cfRay.value;
|
||||||
|
this.$props.data.cfConnectingIp.enabled = true;
|
||||||
|
this.$props.data.cfConnectingIp.computed = this.$props.data.cfConnectingIp.value;
|
||||||
|
this.$props.data.xForwardedFor.enabled = true;
|
||||||
|
this.$props.data.xForwardedFor.computed = this.$props.data.xForwardedFor.value;
|
||||||
|
this.$props.data.xForwardedProto.enabled = true;
|
||||||
|
this.$props.data.xForwardedProto.computed = this.$props.data.xForwardedProto.value;
|
||||||
|
this.$props.data.trueClientIp.enabled = true;
|
||||||
|
this.$props.data.trueClientIp.computed = this.$props.data.trueClientIp.value;
|
||||||
|
this.$props.data.cfIpCountry.enabled = true;
|
||||||
|
this.$props.data.cfIpCountry.computed = this.$props.data.cfIpCountry.value;
|
||||||
|
this.$props.data.cfVisitor.enabled = true;
|
||||||
|
this.$props.data.cfVisitor.computed = this.$props.data.cfVisitor.value;
|
||||||
|
this.$props.data.cdnLoop.enabled = true;
|
||||||
|
this.$props.data.cdnLoop.computed = this.$props.data.cdnLoop.value;
|
||||||
|
} else {
|
||||||
|
this.$props.data.cfRay.enabled = false;
|
||||||
|
this.$props.data.cfRay.computed = false;
|
||||||
|
this.$props.data.cfConnectingIp.enabled = false;
|
||||||
|
this.$props.data.cfConnectingIp.computed = false;
|
||||||
|
this.$props.data.xForwardedFor.enabled = false;
|
||||||
|
this.$props.data.xForwardedFor.computed = false;
|
||||||
|
this.$props.data.xForwardedProto.enabled = false;
|
||||||
|
this.$props.data.xForwardedProto.computed = false;
|
||||||
|
this.$props.data.trueClientIp.enabled = false;
|
||||||
|
this.$props.data.trueClientIp.computed = false;
|
||||||
|
this.$props.data.cfIpCountry.enabled = false;
|
||||||
|
this.$props.data.cfIpCountry.computed = false;
|
||||||
|
this.$props.data.cfVisitor.enabled = false;
|
||||||
|
this.$props.data.cfVisitor.computed = false;
|
||||||
|
this.$props.data.cdnLoop.enabled = false;
|
||||||
|
this.$props.data.cdnLoop.computed = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue