nginxconfig.io/public/partials/config-global.html

406 lines
21 KiB
HTML

<ul ng-if="layout === 'default'" class="nav nav-tabs nav-common" role="tablist">
<li class="nav-item disabled">
<a class="nav-link">Global:</a>
</li>
<li ng-repeat="(key, tab) in tabs_common" class="nav-item">
<a class="nav-link" ng-click="setTabCommon(key)" ng-class="{ 'active': tab_common === key, 'changed': commonChanges[tab.slug] }">{{ tab.name }}<small ng-cloak>({{ commonChanges[tab.slug] }})</small></a>
</li>
</ul>
<div class="tab-content common-content">
<ul ng-if="layout === 'do'" class="nav nav-pills nav-fill" role="tablist">
<li ng-repeat="(key, tab) in tabs_common" class="nav-item">
<a class="nav-link" ng-click="setTabCommon(key)" ng-class="{ 'active': tab_common === key, 'changed': commonChanges[tab.slug], 'visited': key < tab_common }">{{ tab.name }}<small ng-cloak>({{ commonChanges[tab.slug] }})</small></a>
</li>
</ul>
<div class="tab-pane tab-https" ng-class="{ 'active': tabs_common[tab_common].slug === 'https' }">
<fieldset class="form-group" ng-class="{ disabled: !hasHTTPS() }">
<div class="row">
<legend class="col-sm-3 col-form-label col-form-label-sm">SSL profile</legend>
<div class="col-sm-9">
<div class="form-check form-check-radio form-check-inline" ng-class="{ 'input-changed': data.ssl_profile !== defaultData.ssl_profile && data.ssl_profile === 'modern' }">
<input class="form-check-input" type="radio" id="ssl-modern" ng-model="data.ssl_profile" value="modern">
<label class="form-check-label col-form-label-sm" for="ssl-modern">
<span tooltips tooltip-template="Services with clients that support TLS 1.3 and don't need backward compatibility<br><br>Oldest compatible clients:<ul><li>{{ sslProfiles.modern.oldest_clients.join('</li><li>') }}</li></ul>" tooltip-side="top" tooltip-class="ssl">Mozilla Modern</span>
</label>
</div>
<div class="form-check form-check-radio form-check-inline" ng-class="{ 'input-changed': data.ssl_profile !== defaultData.ssl_profile && data.ssl_profile === 'intermediate' }">
<input class="form-check-input" type="radio" id="ssl-intermediate" ng-model="data.ssl_profile" value="intermediate">
<label class="form-check-label col-form-label-sm" for="ssl-intermediate">
<span tooltips tooltip-template="General-purpose servers with a variety of clients, recommended for almost all systems<br><br>Oldest compatible clients: <ul><li>{{ sslProfiles.intermediate.oldest_clients.join('</li><li>') }}</li></ul>" tooltip-side="top" tooltip-class="ssl">Mozilla Intermediate</span>
</label>
</div>
<div class="form-check form-check-radio form-check-inline" ng-class="{ 'input-changed': data.ssl_profile !== defaultData.ssl_profile && data.ssl_profile === 'old' }">
<input class="form-check-input" type="radio" id="ssl-old" ng-model="data.ssl_profile" value="old">
<label class="form-check-label col-form-label-sm" for="ssl-old">
<span tooltips tooltip-template="Compatible with a number of very old clients, and should be used only as a last resort<br><br>Oldest compatible clients: <ul><li>{{ sslProfiles.old.oldest_clients.join('</li><li>') }}</li></ul>" tooltip-side="top" tooltip-class="ssl">Mozilla Old</span>
</label>
</div>
</div>
</div>
</fieldset>
<div class="form-group row" ng-class="{ disabled: !hasHTTPS() }">
<label class="col-sm-3 col-form-label col-form-label-sm">
<span tooltips tooltip-template="DNS resolver for stapling">OCSP DNS resolvers</span>
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.resolver_cloudflare !== defaultData.resolver_cloudflare }">
<input class="form-check-input" type="checkbox" id="resolver_cloudflare" ng-model="data.resolver_cloudflare">
<label class="form-check-label col-form-label-sm" for="resolver_cloudflare">
<span tooltips tooltip-template="<code>1.1.1.1, 1.0.0.1</code>" tooltip-side="top">Cloudflare Resolver</span>
</label>
</div>
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.resolver_google !== defaultData.resolver_google }">
<input class="form-check-input" type="checkbox" id="resolver_google" ng-model="data.resolver_google">
<label class="form-check-label col-form-label-sm" for="resolver_google">
<span tooltips tooltip-template="<code>8.8.8.8, 8.8.4.4</code>" tooltip-side="top">Google Public DNS</span>
</label>
</div>
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.resolver_opendns !== defaultData.resolver_opendns }">
<input class="form-check-input" type="checkbox" id="resolver_opendns" ng-model="data.resolver_opendns">
<label class="form-check-label col-form-label-sm" for="resolver_opendns">
<span tooltips tooltip-template="<code>208.67.222.222, 208.67.220.220</code>" tooltip-side="top">OpenDNS</span>
</label>
</div>
</div>
</div>
<div class="form-group row" ng-class="{ disabled: !hasCertLetsEncrypt() }">
<label class="col-sm-3 col-form-label col-form-label-sm">
Let's Encrypt webroot
</label>
<div class="col-sm-9 col-xl-7">
<input type="text"
class="form-control form-control-sm"
ng-model="data.directory_letsencrypt"
ng-class="{ 'input-changed': data.directory_letsencrypt !== defaultData.directory_letsencrypt }">
</div>
</div>
</div>
<div class="tab-pane tab-security" ng-class="{ 'active': tabs_common[tab_common].slug === 'security' }">
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Referrer Policy is a new header that allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites.">Referrer-Policy</code>
</label>
<div class="col-sm-9">
<select class="custom-select form-control-sm" ng-model="data.referrer_policy" ng-class="{ 'input-changed': data.referrer_policy !== defaultData.referrer_policy }">
<option value="no-referrer">no-referrer</option>
<option value="no-referrer-when-downgrade">no-referrer-when-downgrade</option>
<option value="origin">origin</option>
<option value="origin-when-cross-origin">origin-when-cross-origin</option>
<option value="same-origin">same-origin</option>
<option value="strict-origin">strict-origin</option>
<option value="strict-origin-when-cross-origin">strict-origin-when-cross-origin</option>
<option value="unsafe-url">unsafe-url</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Content Security Policy is an effective measure to protect your site from XSS attacks. By whitelisting sources of approved content, you can prevent the browser from loading malicious assets.">Content-Security-Policy</code>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.content_security_policy"
ng-class="{ 'input-changed': data.content_security_policy !== defaultData.content_security_policy }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Emitting nginx version on error pages and in the “Server” response header field.">server_tokens</code>
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.server_tokens !== defaultData.server_tokens }">
<input class="form-check-input" type="checkbox" id="server_tokens" ng-model="data.server_tokens">
<label class="form-check-label col-form-label-sm" for="server_tokens">enabled</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Used to limit the request processing rate per a defined key, in particular, the processing rate of requests coming from a single IP address.">limit_req</code>
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.limit_req !== defaultData.limit_req }">
<input class="form-check-input" type="checkbox" id="limit_req" ng-model="data.limit_req">
<label class="form-check-label col-form-label-sm" for="limit_req">enabled</label>
</div>
</div>
</div>
</div>
<div class="tab-pane tab-php" ng-class="{ 'active': tabs_common[tab_common].slug === 'php' }">
<div class="form-group row" ng-class="{ disabled: !hasPHP() }">
<label class="col-sm-3 col-form-label col-form-label-sm">
PHP server
</label>
<div class="col-sm-9">
<select class="custom-select form-control-sm" ng-model="data.php_server" ng-class="{ 'input-changed': data.php_server !== defaultData.php_server }">
<option value="127.0.0.1:9000">TCP: 127.0.0.1:9000</option>
<option value="/var/run/hhvm/sock">HHVM socket: /var/run/hhvm/sock</option>
<option value="/var/run/hhvm/hhvm.sock">HHVM socket: /var/run/hhvm/hhvm.sock</option>
<option value="/var/run/php5-fpm.sock">5.x socket: /var/run/php5-fpm.sock</option>
<option value="/var/run/php/php7.0-fpm.sock">7.0 socket: /var/run/php/php7.0-fpm.sock</option>
<option value="/var/run/php/php7.1-fpm.sock">7.1 socket: /var/run/php/php7.1-fpm.sock</option>
<option value="/var/run/php/php7.2-fpm.sock">7.2 socket: /var/run/php/php7.2-fpm.sock</option>
<option value="/var/run/php/php7.3-fpm.sock">7.3 socket: /var/run/php/php7.3-fpm.sock</option>
</select>
</div>
</div>
<div class="form-group row" ng-class="{ disabled: !hasPHP() }">
<label class="col-sm-3 col-form-label col-form-label-sm">
PHP backup server
</label>
<div class="col-sm-9">
<select class="custom-select form-control-sm" ng-model="data.php_server_backup" ng-class="{ 'input-changed': data.php_server_backup !== defaultData.php_server_backup }">
<option value="">disabled</option>
<option value="127.0.0.1:9000">TCP: 127.0.0.1:9000</option>
<option value="/var/run/hhvm/sock">HHVM socket: /var/run/hhvm/sock</option>
<option value="/var/run/hhvm/hhvm.sock">HHVM socket: /var/run/hhvm/hhvm.sock</option>
<option value="/var/run/php5-fpm.sock">5.x socket: /var/run/php5-fpm.sock</option>
<option value="/var/run/php/php7.0-fpm.sock">7.0 socket: /var/run/php/php7.0-fpm.sock</option>
<option value="/var/run/php/php7.1-fpm.sock">7.1 socket: /var/run/php/php7.1-fpm.sock</option>
<option value="/var/run/php/php7.2-fpm.sock">7.2 socket: /var/run/php/php7.2-fpm.sock</option>
<option value="/var/run/php/php7.3-fpm.sock">7.3 socket: /var/run/php/php7.3-fpm.sock</option>
</select>
</div>
</div>
</div>
<div class="tab-pane tab-python" ng-class="{ 'active': tabs_common[tab_common].slug === 'python' }">
<div class="form-group row" ng-class="{ disabled: !hasPython() }">
<label class="col-sm-3 col-form-label col-form-label-sm">
Python server
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.python_server"
ng-class="{ 'input-changed': data.python_server !== defaultData.python_server }">
</div>
</div>
</div>
<div class="tab-pane tab-performance" ng-class="{ 'active': tabs_common[tab_common].slug === 'performance' }">
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
gzip compression
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.gzip !== defaultData.gzip }">
<input class="form-check-input" type="checkbox" id="gzip" ng-model="data.gzip">
<label class="form-check-label col-form-label-sm" for="gzip">enabled</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<a href="https://github.com/eustas/ngx_brotli" target="_blank">brotli</a> compression
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.brotli !== defaultData.brotli }">
<input class="form-check-input" type="checkbox" id="brotli" ng-model="data.brotli">
<label class="form-check-label col-form-label-sm" for="brotli">enabled</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<span tooltips tooltip-template="{{ extensions.assets }}">Expiration - assets</span>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.expires_assets"
ng-class="{ 'input-changed': data.expires_assets !== defaultData.expires_assets }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<span tooltips tooltip-template="{{ extensions.images }}|{{ extensions.audio }}|{{ extensions.video }}">Expiration - media</span>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.expires_media"
ng-class="{ 'input-changed': data.expires_media !== defaultData.expires_media }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<span tooltips tooltip-template="{{ extensions.svg }}">Expiration - svg</span>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.expires_svg"
ng-class="{ 'input-changed': data.expires_svg !== defaultData.expires_svg }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<span tooltips tooltip-template="{{ extensions.fonts }}">Expiration - fonts</span>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.expires_fonts"
ng-class="{ 'input-changed': data.expires_fonts !== defaultData.expires_fonts }">
</div>
</div>
</div>
<div class="tab-pane tab-logging" ng-class="{ 'active': tabs_common[tab_common].slug === 'logging' }">
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Sets the path, format, and configuration for a buffered log write.">access_log</code>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.access_log"
ng-class="{ 'input-changed': data.access_log !== defaultData.access_log }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Configures logging path (with warn level).">error_log</code>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.error_log"
ng-class="{ 'input-changed': data.error_log !== defaultData.error_log }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Logging of errors about not found files into error_log.">log_not_found</code>
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.log_not_found !== defaultData.log_not_found }">
<input class="form-check-input" type="checkbox" id="log_not_found" ng-model="data.log_not_found">
<label class="form-check-label col-form-label-sm" for="log_not_found">enabled</label>
</div>
</div>
</div>
</div>
<div class="tab-pane tab-nginx" ng-class="{ 'active': tabs_common[tab_common].slug === 'nginx' }">
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
NGINX config directory
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.directory_nginx"
ng-class="{ 'input-changed': data.directory_nginx !== defaultData.directory_nginx }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Defines the number of worker processes. ">worker_processes</code>
</label>
<div class="col-sm-9">
<select class="custom-select form-control-sm" ng-model="data.worker_processes" ng-class="{ 'input-changed': data.worker_processes !== defaultData.worker_processes }">
<option value="auto">auto</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Defines user and group credentials used by worker processes.<br>If group is omitted, a group whose name equals that of user is used.">user</code>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.user"
ng-class="{ 'input-changed': data.user !== defaultData.user }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Defines a file that will store the process ID of the main process.">pid</code>
</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
ng-model="data.pid"
ng-class="{ 'input-changed': data.pid !== defaultData.pid }">
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<code tooltips tooltip-template="Sets the maximum allowed size of the client request body.">client_max_body_size</code>
</label>
<div class="col-sm-9">
<div class="input-group input-group-sm">
<input type="number"
min="0"
step="1"
class="form-control form-control-sm"
ng-model="data.client_max_body_size"
ng-class="{ 'input-changed': data.client_max_body_size !== defaultData.client_max_body_size }">
<div class="input-group-append">
<div class="input-group-text">MB</div>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane tab-tools" ng-class="{ 'active': tabs_common[tab_common].slug === 'tools' }">
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">
<span tooltips tooltip-template="Multiple configuration files<br><br><i>(ideal for multi-domain environment)</i>">Modularized structure</span>
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.file_structure !== defaultData.file_structure }">
<input class="form-check-input" type="checkbox" id="file_structure" ng-model="data.file_structure" ng-true-value="'modularized'" ng-false-value="'unified'">
<label class="form-check-label col-form-label-sm" for="file_structure">enabled</label>
</div>
</div>
</div>
<div class="form-group row" ng-if="isModularized()">
<label class="col-sm-3 col-form-label col-form-label-sm">
<span tooltips tooltip-template="Symbolic link from sites-available/{{ getDomain() }}.conf to sites-enabled/{{ getDomain() }}.conf">Symlink vhost</span>
</label>
<div class="col-sm-9">
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.symlink !== defaultData.symlink }">
<input class="form-check-input" type="checkbox" id="symlink" ng-model="data.symlink">
<label class="form-check-label col-form-label-sm" for="symlink">enabled</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label col-form-label-sm">Share settings</label>
<div class="col-sm-9">
<input type="text"
class="form-control form-control-sm"
readonly
ng-value="getUrl()">
</div>
</div>
<div class="form-group row mt-4">
<label class="col-sm-3 col-form-label col-form-label-sm">Reset settings</label>
<div class="col-sm-9">
<button class="btn btn-danger btn-sm btn-reset" ng-click="reset()">Reset</button>
</div>
</div>
</div>
<div class="tab-navigation-buttons" ng-if="layout === 'do'">
<button class="btn btn-outline-secondary" ng-click="setTabCommonBack()" ng-class="{ disabled: tab_common === 0 }">Back</button>
<button class="btn btn-primary" ng-click="setTabCommonNext()" ng-class="{ disabled: tab_common === tabs_common.length - 1 }">Next</button>
</div>
</div>