mirror of
https://github.com/digitalocean/nginxconfig.io
synced 2024-11-10 12:34:12 +00:00
* #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>
This commit is contained in:
parent
ae322cf2c5
commit
3b00bda80e
4 changed files with 209 additions and 2 deletions
|
@ -73,8 +73,44 @@ export default (domains, global) => {
|
|||
config.http.push(['include', 'mime.types']);
|
||||
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(['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']);
|
||||
|
||||
if (global.security.limitReq.computed) {
|
||||
|
|
|
@ -184,7 +184,7 @@ export default (domain, domains, global) => {
|
|||
serverConfig.push(['# logging', '']);
|
||||
|
||||
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)
|
||||
serverConfig.push(['error_log', getErrorLogDomainPath(domain, global)]);
|
||||
|
|
|
@ -28,4 +28,14 @@ import common from '../../common';
|
|||
|
||||
export default {
|
||||
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 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>
|
||||
</template>
|
||||
|
||||
|
@ -99,6 +181,42 @@ THE SOFTWARE.
|
|||
default: false,
|
||||
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 {
|
||||
|
@ -118,5 +236,48 @@ THE SOFTWARE.
|
|||
};
|
||||
},
|
||||
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>
|
||||
|
|
Loading…
Reference in a new issue