2018-03-09 22:27:39 +00:00
|
|
|
server {<!--
|
2018-02-27 07:47:27 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✘ HTTPS || ✘ forceHTTPS --><span ng-if="!isHTTPS(_site) || !isForceHTTPS(_site)">
|
|
|
|
listen {{ data.sites[_site].ipv4 !== '*' ? data.sites[_site].ipv4 + ':' : '' }}80;<!--
|
2018-03-09 22:27:39 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ IPv6 --><span ng-if="isIPv6(_site)">
|
|
|
|
listen [{{ data.sites[_site].ipv6 }}]:80;</span></span><!--
|
2018-03-09 22:27:39 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ HTTPS --><span ng-if="isHTTPS(_site)">
|
|
|
|
listen {{ data.sites[_site].ipv4 !== '*' ? data.sites[_site].ipv4 + ':' : '' }}443 ssl{{ isHTTP2() ? ' http2' : '' }};<!--
|
2018-03-09 22:27:39 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ IPv6 --><span ng-if="isIPv6(_site)">
|
|
|
|
listen [{{ data.sites[_site].ipv6 }}]:443 ssl{{ isHTTP2() ? ' http2' : '' }};</span></span>
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
server_name {{ isWWW() ? 'www.' : '' }}{{ _domain }};<!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ PHP || ✔ Django --><span ng-if="isPHP(_site) || isDjango(_site)">
|
|
|
|
set $base {{ getPath(_site) }};<!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ root --><span ng-if="isRoot(_site)">
|
|
|
|
root $base{{ data.sites[_site].document_root }};</span></span><!--
|
2018-02-27 07:47:27 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✘ PHP && ✘ Django--><span ng-if="!isPHP(_site) && !isDjango(_site) && isRoot(_site)">
|
|
|
|
root {{ getPath(_site) }}{{ data.sites[_site].document_root }};</span><!--
|
|
|
|
|
|
|
|
✔ HTTPS --><span ng-if="isHTTPS(_site)">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2018-02-22 23:20:21 +00:00
|
|
|
# SSL
|
2019-01-06 14:48:28 +00:00
|
|
|
ssl_certificate {{ getSslCertificate(_site) }};
|
|
|
|
ssl_certificate_key {{ getSslCertificateKey(_site) }};<!--
|
|
|
|
|
|
|
|
✔ Let's Encrypt --><span ng-if="isCertLetsEncrypt(_site)">
|
2019-01-16 16:02:30 +00:00
|
|
|
ssl_trusted_certificate /etc/letsencrypt/live/{{ _domain }}/chain.pem;</span></span><!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ HSTS --><span ng-if="!hasCommonHSTS() && isHSTS(_site)">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
# HSTS
|
|
|
|
add_header Strict-Transport-Security "max-age=31536000{{ isHSTSSubdomains(_site) ? '; includeSubDomains' : '' }}{{ isHSTSPreload(_site) ? '; preload' : '' }}" always;</span><!--
|
|
|
|
|
|
|
|
✔ access log domain || error log domain --><span ng-if="isAccessLogDomain(_site) || isErrorLogDomain(_site)">
|
2018-09-03 20:53:56 +00:00
|
|
|
|
|
|
|
# logging<!--
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ access log domain --><span ng-if="isAccessLogDomain(_site)">
|
|
|
|
access_log {{ getAccessLogDomainPath(_site) }};</span><!--
|
|
|
|
✔ error log domain --><span ng-if="isErrorLogDomain(_site)">
|
|
|
|
error_log {{ getErrorLogDomainPath(_site) }};</span></span><!--
|
2018-09-03 20:53:56 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ index.php --><span ng-if="isIndexPHP(_site)">
|
2018-09-03 20:53:56 +00:00
|
|
|
|
|
|
|
# index.php
|
|
|
|
index index.php;</span><!--
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ Fallback HTML || ✔ Fallback PHP --><span ng-if="(isFallbackHTML(_site) || isFallbackPHP(_site)) && (!isProxy(_site) || data.proxy_path !== '/')">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
# {{ isFallbackHTML(_site) ? 'index.html' : ( isFallbackPHP(_site) ? 'index.php' : '' ) }} fallback
|
2018-02-18 13:02:11 +00:00
|
|
|
location / {
|
2019-01-06 14:48:28 +00:00
|
|
|
try_files $uri $uri/ {{ isFallbackHTML(_site) ? '/index.html' : ( isFallbackPHP(_site) ? '/index.php?$query_string' : '' ) }};
|
2018-06-11 22:41:57 +00:00
|
|
|
}</span><!--
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ Fallback HTML && ✔ Fallback PHP --><span ng-if="isFallbackHTML(_site) && isFallbackPHP(_site)">
|
2018-06-11 22:41:57 +00:00
|
|
|
|
|
|
|
# index.php fallback
|
2019-01-06 14:48:28 +00:00
|
|
|
location ~ ^{{ data.sites[_site].fallback_php_path }} {
|
2018-06-11 22:41:57 +00:00
|
|
|
try_files $uri $uri/ /index.php?$query_string;
|
|
|
|
}</span><!--
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ Python --><span ng-if="isPython(_site)">
|
2018-12-02 20:36:18 +00:00
|
|
|
|
|
|
|
# Python
|
|
|
|
location / {<!--
|
|
|
|
|
|
|
|
✔ modularized --><span ng-if="isModularized()">
|
|
|
|
include nginxconfig.io/python_uwsgi.conf;</span><!--
|
|
|
|
|
|
|
|
✔ unified --><span ng-if="isUnified()">
|
|
|
|
<!-- --> <ng-include ng-include-tabs="3" src="'templates/conf/nginxconfig.io/python_uwsgi.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span>
|
2019-01-06 14:48:28 +00:00
|
|
|
}<!--
|
|
|
|
|
|
|
|
✔ Django --><span ng-if="isDjango(_site)">
|
|
|
|
|
|
|
|
# Django media
|
|
|
|
location /media/ {
|
|
|
|
alias $base/media/;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Django static
|
|
|
|
location /static/ {
|
|
|
|
alias $base/static/;
|
|
|
|
}</span></span><!--
|
2018-12-02 20:36:18 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ Reverse proxy --><span ng-if="isProxy(_site)">
|
2018-08-20 14:04:34 +00:00
|
|
|
|
|
|
|
# reverse proxy
|
2019-01-06 14:48:28 +00:00
|
|
|
location {{ data.sites[_site].proxy_path }} {
|
|
|
|
proxy_pass {{ data.sites[_site].proxy_pass }};<!--
|
2018-08-20 14:04:34 +00:00
|
|
|
|
|
|
|
✔ modularized --><span ng-if="isModularized()">
|
|
|
|
include nginxconfig.io/proxy.conf;</span><!--
|
|
|
|
|
|
|
|
✔ unified --><span ng-if="isUnified()">
|
|
|
|
<!-- --> <ng-include ng-include-tabs="3" src="'templates/conf/nginxconfig.io/proxy.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span>
|
|
|
|
}</span><!--
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ PHP --><span ng-if="isPHP(_site)">
|
2018-06-11 22:41:57 +00:00
|
|
|
|
|
|
|
# handle .php
|
2019-01-06 14:48:28 +00:00
|
|
|
location ~ {{ isLegacyPHPRouting(_site) ? '[^/]\\.php(/|$)' : '\\.php$' }} {<!--
|
2018-06-11 22:41:57 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ modularized || ✔ WordPress --><span ng-if="isModularized() || isWordPress(_site)">
|
2018-08-19 21:17:07 +00:00
|
|
|
include nginxconfig.io/php_fastcgi.conf;</span><!--
|
2018-06-11 22:41:57 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ unified && ✘ WordPress --><span ng-if="isUnified() && !isWordPress(_site)">
|
2018-08-19 21:17:07 +00:00
|
|
|
<ng-include ng-include-tabs="{{ isUnified() ? 3 : 1 }}" src="'templates/conf/nginxconfig.io/php_fastcgi.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span>
|
2018-02-18 13:02:11 +00:00
|
|
|
}</span><!--
|
|
|
|
|
|
|
|
✔ unified --><span ng-if="isModularized()">
|
|
|
|
</span><!--
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
✔ modularized --><span ng-if="isModularized()">
|
2018-08-19 21:17:07 +00:00
|
|
|
include nginxconfig.io/general.conf;</span><!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ modularized && ✔ WordPress --><span ng-if="isModularized() && isWordPress(_site)">
|
2018-08-19 21:17:07 +00:00
|
|
|
include nginxconfig.io/wordpress.conf;</span><!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ modularized && ✔ Drupal --><span ng-if="isModularized() && isDrupal(_site)">
|
2018-08-19 21:17:07 +00:00
|
|
|
include nginxconfig.io/drupal.conf;</span><!--
|
2018-07-26 13:29:19 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ modularized && ✔ Magento --><span ng-if="isModularized() && isMagento(_site)">
|
2018-12-02 19:28:18 +00:00
|
|
|
include nginxconfig.io/magento.conf;</span><!--
|
|
|
|
|
2018-02-18 13:02:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
✔ unified --><span ng-if="isUnified()">
|
|
|
|
|
2018-08-19 21:17:07 +00:00
|
|
|
<!-- --><ng-include ng-include-tabs="2" src="'templates/conf/nginxconfig.io/general.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span><!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ unified && ✔ WordPress --><span ng-if="isUnified() && isWordPress(_site)">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2018-08-19 21:17:07 +00:00
|
|
|
<!-- --><ng-include ng-include-tabs="2" src="'templates/conf/nginxconfig.io/wordpress.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span><!--
|
2018-07-26 11:24:00 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ unified && ✔ Drupal --><span ng-if="isUnified() && isDrupal(_site)">
|
2018-07-26 11:24:00 +00:00
|
|
|
|
2018-12-02 19:28:18 +00:00
|
|
|
<!-- --><ng-include ng-include-tabs="2" src="'templates/conf/nginxconfig.io/drupal.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span><!--
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ unified && ✔ Magento --><span ng-if="isUnified() && isMagento(_site)">
|
2018-12-02 19:28:18 +00:00
|
|
|
|
|
|
|
<!-- --><ng-include ng-include-tabs="2" src="'templates/conf/nginxconfig.io/magento.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span>
|
2018-02-18 13:02:11 +00:00
|
|
|
}<!--
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ CDN --><span ng-if="isCDN(_site)">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
|
|
|
# CDN
|
|
|
|
server {
|
2019-01-06 14:48:28 +00:00
|
|
|
listen {{ data.sites[_site].ipv4 !== '*' ? data.sites[_site].ipv4 + ':' : '' }}{{ isHTTPS(_site) ? '443 ssl' : '80' }}{{ isHTTP2(_site) ? ' http2' : '' }};<!--
|
2018-02-27 07:47:27 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ IPv6 --><span ng-if="isIPv6(_site)">
|
|
|
|
listen [{{ data.sites[_site].ipv6 }}]:{{ isHTTPS(_site) ? '443 ssl' : '80' }}{{ isHTTP2(_site) ? ' http2' : '' }};</span>
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
server_name cdn.{{ _domain }};
|
|
|
|
root /var/www/{{ _domain }}{{ data.sites[_site].document_root }};<span ng-if="!isAccessLog()">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
|
|
|
access_log off;</span><!--
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ HTTPS --><span ng-if="isHTTPS(_site)">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2018-02-22 23:20:21 +00:00
|
|
|
# SSL
|
2019-01-06 14:48:28 +00:00
|
|
|
ssl_certificate {{ getSslCertificate(_site) }};
|
|
|
|
ssl_certificate_key {{ getSslCertificateKey(_site) }};<!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ Let's Encrypt --><span ng-if="isCertLetsEncrypt(_site)">
|
2019-01-16 16:02:30 +00:00
|
|
|
ssl_trusted_certificate /etc/letsencrypt/live/{{ _domain }}/chain.pem;</span></span>
|
2018-02-18 13:02:11 +00:00
|
|
|
|
|
|
|
# disable access_log
|
|
|
|
access_log off;<!--
|
|
|
|
|
|
|
|
✔ Gzip --><span ng-if="isGzip()">
|
|
|
|
|
|
|
|
# gzip
|
|
|
|
gzip on;
|
|
|
|
gzip_vary on;
|
|
|
|
gzip_proxied any;
|
|
|
|
gzip_comp_level 6;
|
|
|
|
gzip_types {{ gzipTypes }};</span>
|
|
|
|
|
|
|
|
# allow safe files
|
|
|
|
location ~* \.(?:{{ extensions.assets }}|{{ extensions.fonts }}|{{ extensions.svg }}|{{ extensions.images }}|{{ extensions.audio }}|{{ extensions.video }}|{{ extensions.docs }})$ {
|
|
|
|
add_header Access-Control-Allow-Origin "*";
|
|
|
|
add_header Cache-Control "public";
|
|
|
|
expires 30d;
|
|
|
|
}
|
|
|
|
|
|
|
|
# deny everything else
|
|
|
|
location / {
|
|
|
|
deny all;
|
|
|
|
}
|
2018-03-09 22:38:32 +00:00
|
|
|
}</span><!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ redirect --><span ng-if="isRedirect(_site)">
|
2018-03-09 22:38:32 +00:00
|
|
|
|
2018-02-18 13:02:11 +00:00
|
|
|
# {{ isWWW() ? 'non-www, ' : '' }}subdomains redirect
|
|
|
|
server {
|
2019-01-06 14:48:28 +00:00
|
|
|
listen {{ data.sites[_site].ipv4 !== '*' ? data.sites[_site].ipv4 + ':' : '' }}{{ isHTTPS() ? '443 ssl' : '80' }}{{ isHTTP2() ? ' http2' : '' }};<!--
|
2018-02-27 07:47:27 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ IPv6 --><span ng-if="isIPv6(_site)">
|
|
|
|
listen [{{ data.sites[_site].ipv6 }}]:{{ isHTTPS() ? '443 ssl' : '80' }}{{ isHTTP2() ? ' http2' : '' }};</span>
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
server_name {{ isWWW() ? ('.' + _domain) : ('*.' + _domain) }};<!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ HTTPS --><span ng-if="isHTTPS(_site)">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2018-02-22 23:20:21 +00:00
|
|
|
# SSL
|
2019-01-06 14:48:28 +00:00
|
|
|
ssl_certificate {{ getSslCertificate(_site) }};
|
|
|
|
ssl_certificate_key {{ getSslCertificateKey(_site) }};<!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ Let's Encrypt --><span ng-if="isCertLetsEncrypt(_site)">
|
2019-01-16 16:02:30 +00:00
|
|
|
ssl_trusted_certificate /etc/letsencrypt/live/{{ _domain }}/chain.pem;</span></span>
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
return 301 http{{ isHTTPS() ? 's' : '' }}://{{ isWWW() ? 'www.' : '' }}{{ _domain }}$request_uri;
|
2018-02-18 13:02:11 +00:00
|
|
|
}</span><!--
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ forceHTTPS --><span ng-if="isForceHTTPS(_site)">
|
2018-02-18 13:02:11 +00:00
|
|
|
|
|
|
|
# HTTP redirect
|
|
|
|
server {
|
2019-01-06 14:48:28 +00:00
|
|
|
listen {{ data.sites[_site].ipv4 !== '*' ? data.sites[_site].ipv4 + ':' : '' }}80;<!--
|
2018-02-27 07:47:27 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ IPv6 --><span ng-if="isIPv6(_site)">
|
|
|
|
listen [{{ data.sites[_site].ipv6 }}]:80;</span>
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
server_name .{{ _domain }};<!--
|
2018-02-18 13:02:11 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ modularized && ✔ Let's Encrypt --><span ng-if="isModularized() && isCertLetsEncrypt(_site)">
|
2018-02-22 23:20:21 +00:00
|
|
|
|
2018-08-19 21:17:07 +00:00
|
|
|
include nginxconfig.io/letsencrypt.conf;</span><!--
|
2018-02-22 23:20:21 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ unified && ✔ Let's Encrypt --><span ng-if="isUnified() && isCertLetsEncrypt(_site)">
|
2018-02-22 23:20:21 +00:00
|
|
|
|
2018-08-19 21:17:07 +00:00
|
|
|
<ng-include ng-include-tabs="2" src="'templates/conf/nginxconfig.io/letsencrypt.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></ng-include></span><!--
|
2018-02-22 23:20:21 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✔ Let's Encrypt --><span ng-if="isCertLetsEncrypt(_site)">
|
2018-02-22 23:20:21 +00:00
|
|
|
|
|
|
|
location / {
|
2019-01-06 14:48:28 +00:00
|
|
|
return 301 https://{{ isWWW(_site) ? 'www.' : '' }}{{ _domain }}$request_uri;
|
2018-02-22 23:20:21 +00:00
|
|
|
}</span><!--
|
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
✘ Let's Encrypt --><span ng-if="!isCertLetsEncrypt(_site)">
|
2018-02-22 23:20:21 +00:00
|
|
|
|
2019-01-06 14:48:28 +00:00
|
|
|
return 301 https://{{ isWWW(_site) ? 'www.' : '' }}{{ _domain }}$request_uri;</span>
|
2018-02-18 13:02:11 +00:00
|
|
|
}</span>
|