diff --git a/src/nginxconfig/generators/conf/nginx.conf.js b/src/nginxconfig/generators/conf/nginx.conf.js index d2308b7..b0b5c33 100644 --- a/src/nginxconfig/generators/conf/nginx.conf.js +++ b/src/nginxconfig/generators/conf/nginx.conf.js @@ -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) { diff --git a/src/nginxconfig/generators/conf/website.conf.js b/src/nginxconfig/generators/conf/website.conf.js index ace36e4..c4730b6 100644 --- a/src/nginxconfig/generators/conf/website.conf.js +++ b/src/nginxconfig/generators/conf/website.conf.js @@ -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)]); diff --git a/src/nginxconfig/i18n/en/templates/global_sections/logging.js b/src/nginxconfig/i18n/en/templates/global_sections/logging.js index 2e33375..26e6db9 100644 --- a/src/nginxconfig/i18n/en/templates/global_sections/logging.js +++ b/src/nginxconfig/i18n/en/templates/global_sections/logging.js @@ -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', }; diff --git a/src/nginxconfig/templates/global_sections/logging.vue b/src/nginxconfig/templates/global_sections/logging.vue index 45044a4..b9a7934 100644 --- a/src/nginxconfig/templates/global_sections/logging.vue +++ b/src/nginxconfig/templates/global_sections/logging.vue @@ -77,6 +77,88 @@ THE SOFTWARE. + +