295 lines
18 KiB
HTML
295 lines
18 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<base href="/">
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
<link rel="stylesheet" href="assets/css/app.min.css?v=COMMIT_HASH">
|
||
<link rel="icon" type="image/png" href="assets/img/favicon.png">
|
||
<title>nginxconfig.io</title>
|
||
<meta name="description" content="NGiИX configuration generator">
|
||
<meta name="keywords" content="nginx, config, configurator, /etc/nginx/nginx.conf, nginx performance, nginx tuning, nginx php, nginx, php fpm, wordpress, drupal, magento, python, django, Let's Encrypt, custom certificate, cdn, access_log, error_log, Laravel, Lumen, Symfony, Zend, CodeIgniter, Yii, CakePHP, Slim, Angular, React, Vue.js, Ember.js, reverse proxy, Node.js">
|
||
<meta property="og:title" content="nginxconfig.io">
|
||
<meta property="og:description" content="NGiИX configuration generator: HTTPS, HTTP2, CDN, PHP, HHVM, Frontend, Reverse proxy, Node.js, WordPress, Drupal, Magento, Python, Django, security headers, rate limiting, expiration by file types…">
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:url" content="https://nginxconfig.io">
|
||
<meta property="og:image" content="https://nginxconfig.io/assets/img/share.png">
|
||
<link rel="preload" as="font" href="https://fonts.gstatic.com/s/quicksand/v9/6xKtdSZaM9iE8KbpRA_hK1QNYuDyPw.woff2" type="font/woff2" crossorigin="anonymous">
|
||
<link rel="preload" as="font" href="https://fonts.gstatic.com/s/quicksand/v9/6xKodSZaM9iE8KbpRA_pkHEYT8L_FYzokA.woff2" type="font/woff2" crossorigin="anonymous">
|
||
</head>
|
||
<body ng-app="NginxConfigIoApp" ng-controller="NginxConfigIoController" ng-csp ng-class="['layout-' + layout]">
|
||
<header>
|
||
<div class="container">
|
||
<div class="loader" ng-if="!masonryInit">
|
||
<div class="spinner">
|
||
<div class="double-bounce1"></div>
|
||
<div class="double-bounce2"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<img src="assets/img/logo-light.svg" class="logo" alt="nginxconfig.io">
|
||
|
||
<div class="sites">
|
||
<div class="title">Sites:</div>
|
||
<div class="group">
|
||
<button class="btn btn-sm btn-outline-light" ng-repeat="(key, value) in data.sites" ng-click="setSite(key)" ng-class="{ 'active': site === key }" ng-cloak>
|
||
{{ getDomain(key) }}<small ng-cloak>({{ getSiteChanges(key) !== undefined ? getSiteChanges(key) : '?' }})</small>
|
||
<span class="close" ng-if="key > 0" ng-click="removeSite(key)">×</span>
|
||
</button>
|
||
<button class="btn btn-sm btn-outline-light" ng-click="addSite()">+ Add site</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="presets">
|
||
<div class="title">Presets:</div>
|
||
<div class="group">
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-click="setPreset('frontend')"
|
||
ng-class="{ 'active': !isPHP() && !isPython() && !isProxy() && isIndexHTML() && isFallbackHTML() }"
|
||
tooltips
|
||
tooltip-template="• disabled PHP<br>• index.html fallback routing"
|
||
tooltip-side="bottom"
|
||
>Frontend <span ng-include="'assets/img/brands/angular.svg'"></span> <span ng-include="'assets/img/brands/react.svg'"></span> <span ng-include="'assets/img/brands/vuejs.svg'"></span></button>
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-click="setPreset('backend')"
|
||
ng-class="{ 'active': isPHP() && isIndexPHP() && isFallbackPHP() && !isFallbackHTML() && !isWordPress() && !isDrupal() && !isMagento() }"
|
||
tooltips
|
||
tooltip-template="• enabled PHP<br>• index.php fallback routing"
|
||
tooltip-side="bottom"
|
||
>PHP <span ng-include="'assets/img/brands/php.svg'"></span> <span ng-include="'assets/img/brands/laravel.svg'"></span> <span ng-include="'assets/img/brands/symfony.svg'"></span> <span ng-include="'assets/img/brands/codeigniter.svg'""></span></button>
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-click="setPreset('django')"
|
||
ng-class="{ 'active': isPython() && isDjango() && !isRoot() }"
|
||
tooltips
|
||
tooltip-template="• enabled Python<br>• Django rules<br>• <code>root</code> disabled"
|
||
tooltip-side="bottom"
|
||
>Django <span ng-include="'assets/img/brands/python.svg'"></span><span ng-include="'assets/img/brands/django.svg'"></span></button>
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-class="{ 'active': isProxy() && !isRoot() }"
|
||
ng-click="setPreset('nodejs')"
|
||
tooltips
|
||
tooltip-template="• enabled reverse proxy"
|
||
tooltip-side="bottom"
|
||
>Node.js <span ng-include="'assets/img/brands/nodejs.svg'"></span></button>
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-class="{ 'active': isPHP() && isIndexHTML() && isFallbackHTML() }"
|
||
ng-click="setPreset('spa')"
|
||
tooltips
|
||
tooltip-template="• enabled PHP<br>• index.html fallback routing<br>• index.php API routing"
|
||
tooltip-side="bottom"
|
||
>Single-page application</button>
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-click="setPreset('wordpress')"
|
||
ng-class="{ 'active': isIndexPHP() && isFallbackPHP() && !isFallbackHTML() && isWordPress() && !isDrupal() && !isMagento() }"
|
||
tooltips
|
||
tooltip-template="• enabled PHP<br>• index.php fallback routing<br>• WordPress security rules"
|
||
tooltip-side="bottom"
|
||
><span ng-include="'assets/img/brands/wordpress.svg'"></span> WordPress</button>
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-click="setPreset('drupal')"
|
||
ng-class="{ 'active': isIndexPHP() && isFallbackPHP() && !isFallbackHTML() && !isWordPress() && isDrupal() && !isMagento() }"
|
||
tooltips
|
||
tooltip-template="• enabled PHP<br>• index.php fallback routing<br>• Drupal security rules"
|
||
tooltip-side="bottom"
|
||
><span ng-include="'assets/img/brands/drupal.svg'"></span> Drupal</button>
|
||
<button
|
||
type="button"
|
||
class="btn btn-sm btn-outline-light"
|
||
ng-click="setPreset('magento')"
|
||
ng-class="{ 'active': isIndexPHP() && isFallbackPHP() && !isFallbackHTML() && !isWordPress() && !isDrupal() && isMagento() }"
|
||
tooltips
|
||
tooltip-template="• enabled PHP<br>• index.php fallback routing<br>• Magento security rules"
|
||
tooltip-side="bottom"
|
||
><span ng-include="'assets/img/brands/magento.svg'"></span> Magento</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<section class="tabs">
|
||
<div class="container">
|
||
<div class="row">
|
||
<div class="col-lg-9">
|
||
<div class="sites" ng-include="'partials/config-site.html'"></div>
|
||
<div class="common" ng-include="'partials/config-global.html'"></div>
|
||
</div>
|
||
<div class="col-lg-3">
|
||
<aside class="sidebar">
|
||
<div class="github">
|
||
<div class="github-cover">
|
||
<div class="github-link">
|
||
<a href="https://github.com/digitalocean/nginxconfig.io" target="_blank" class="github-logo-link">
|
||
<ng-include src="'/assets/img/brands/github.svg'"></ng-include>
|
||
</a>
|
||
<br>
|
||
<a href="https://github.com/digitalocean/nginxconfig.io" target="_blank"><small>digitalocean /</small> <strong>nginxconfig.io</strong></a>
|
||
</div>
|
||
</div>
|
||
<div class="github-buttons">
|
||
<a class="github-button" href="https://github.com/digitalocean/nginxconfig.io" data-icon="octicon-star" data-size="large" data-show-count="true" aria-label="Star digitalocean/nginxconfig.io on GitHub">Star</a>
|
||
<a class="github-button" href="https://github.com/digitalocean/nginxconfig.io/issues" data-icon="octicon-issue-opened" data-size="large" data-show-count="true" aria-label="Issue digitalocean/nginxconfig.io on GitHub">Issue</a>
|
||
</div>
|
||
</div>
|
||
</aside>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="steps">
|
||
<div class="container">
|
||
<div class="row">
|
||
<div class="col-xl-10 offset-xl-1">
|
||
<div ng-include="'partials/steps.html'"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<main ng-class="{ 'active': masonryInit }">
|
||
<div class="container">
|
||
<div class="col-xl-10 offset-xl-1">
|
||
<div class="commands" ng-cloak>
|
||
<pre><code class="hljs bash" ng-include="'templates/commands.html?v=COMMIT_HASH'"></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="row grid">
|
||
<div class="grid-sizer col-xl-6"></div>
|
||
<div class="grid-item col-xl-12 mb-3 text-center" ng-cloak>
|
||
<button class="btn btn-primary btn-sm btn-download" ng-click="downloadZip()"><img src="assets/img/download.svg" alt="Download"> Generated config <small>(.zip)</small></button>
|
||
<button class="btn btn-success btn-sm btn-download btn-base64" ng-mouseenter="prepareBase64()" ng-click="copyAsBase64()" ngclipboard data-clipboard-target="#base64-zip-line" ngclipboard-success="clipboardSuccess('base64-zip-line')"><img src="assets/img/download.svg" alt="Download"> Copy Base64 <small>(inline)</small></button>
|
||
</div>
|
||
<div class="base64-zip-line-container">
|
||
<div id="base64-zip-line">{{ base64 }}</div>
|
||
</div>
|
||
<section class="file grid-item" ng-class="isModularized() || isWordPress() ? 'col-xl-6' : 'col-xl-12'" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginx.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-nginx" ngclipboard-success="clipboardSuccess('nginx.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginx.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginx.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-nginx" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="isModularized()" ng-repeat="(_site, _domain) in getDomains() track by $index" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}sites-{{ isSymlink() ? 'available' : 'enabled' }}/{{ _domain }}.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-domain-{{ $index }}" ngclipboard-success="clipboardSuccess('example.com')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="sites-{{ isSymlink() ? 'available' : 'enabled' }}/{{ _domain }}.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/sites-available/example.com.conf.html?v=COMMIT_HASH?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-domain-{{ $index }}" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="isModularized() && hasCertLetsEncrypt()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/letsencrypt.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-letsencrypt" ngclipboard-success="clipboardSuccess('letsencrypt.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/letsencrypt.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/letsencrypt.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-letsencrypt" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="isModularized()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/security.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-security" ngclipboard-success="clipboardSuccess('security.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/security.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/security.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-security" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="isModularized()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/general.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-general" ngclipboard-success="clipboardSuccess('general.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/general.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/general.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-general" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="hasPHP() && (isModularized() || hasWordPress())" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/php_fastcgi.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-php_fastcgi" ngclipboard-success="clipboardSuccess('php_fastcgi.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/php_fastcgi.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/php_fastcgi.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-php_fastcgi" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="hasPython() && isModularized()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/python_uwsgi.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-python_uwsgi" ngclipboard-success="clipboardSuccess('python_uwsgi.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/python_uwsgi.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/python_uwsgi.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-python_uwsgi" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="hasProxy() && isModularized()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/proxy.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-proxy" ngclipboard-success="clipboardSuccess('proxy.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/proxy.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/proxy.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-proxy" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="hasWordPress() && isModularized()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/wordpress.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-wordpress" ngclipboard-success="clipboardSuccess('wordpress.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/wordpress.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/wordpress.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-wordpress" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="hasDrupal() && isModularized()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/drupal.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-drupal" ngclipboard-success="clipboardSuccess('drupal.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/drupal.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/drupal.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-drupal" class="code highlighted"></div>
|
||
</section>
|
||
<section class="col-xl-6 grid-item file" ng-if="hasMagento() && isModularized()" ng-cloak>
|
||
<strong>{{ data.directory_nginx }}nginxconfig.io/magento.conf</strong>
|
||
<button class="btn btn-light btn-clipboard" ngclipboard data-clipboard-target="#file-magento" ngclipboard-success="clipboardSuccess('magento.conf')">
|
||
<img src="assets/img/clipboard-dark.svg" alt="Copy to clipboard">
|
||
</button>
|
||
<div class="code source" data-filename="nginxconfig.io/magento.conf">
|
||
<pre><code class="nginx" ng-include="'templates/conf/nginxconfig.io/magento.conf.html?v=COMMIT_HASH'" onload="refreshHighlighting()"></code></pre>
|
||
</div><div id="file-magento" class="code highlighted"></div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
<footer>
|
||
<div class="container-fluid">
|
||
Lovingly made by <a href="https://balint.szekeres.me" target="_blank">Bálint Szekeres</a>
|
||
</div>
|
||
</footer>
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-3084378-31"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag(){dataLayer.push(arguments);}
|
||
gtag('js', new Date());
|
||
gtag('config', 'UA-3084378-31');
|
||
</script>
|
||
<script src="assets/js/vendor.min.js?v=COMMIT_HASH"></script>
|
||
<script src="assets/js/app.min.js?v=COMMIT_HASH"></script>
|
||
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
||
</body>
|
||
</html>
|