From 6ae390d858c5440b132add167f6a8bf2b3d896e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szekeres=20Ba=CC=81lint?= Date: Tue, 30 Oct 2018 22:08:49 +0100 Subject: [PATCH] readme.md update --- README.md | 139 ++++++++++++++++++++++++----------- public/assets/img/github.png | Bin 0 -> 23940 bytes 2 files changed, 95 insertions(+), 44 deletions(-) create mode 100644 public/assets/img/github.png diff --git a/README.md b/README.md index e8d18fa..7954c66 100644 --- a/README.md +++ b/README.md @@ -3,57 +3,108 @@ Online nginx configuration generator. ## Features -* HTTPS (with [Let's Encrypt](https://letsencrypt.org) or custom certificate) -* HTTP2 -* [SSL profiles](https://mozilla.github.io/server-side-tls/ssl-config-generator/) -* [HSTS](https://hstspreload.org) -* force HTTPS -* OCSP DNS resolvers - * Cloudflare Resolver - * Google Public DNS - * OpenDNS +### Site +* Domain +* Path +* Document root +* www subdomain * CDN -* www / non-www -* redirect subdomains -* IPv4, IPv6 -* PHP (TCP, 5.x FPM, 7.0 FPM, 7.1 FPM, 7.2 FPM, 7.3 FPM) -* Reverse proxy (e.g. Node.js) +* Redirect www to non-www or non-www to www +* Listen IPv4, IPv6 + +### HTTPS +* HTTPS +* HTTP2 +* Force HTTPS redirect +* [HSTS](https://hstspreload.org) +* [SSL profiles](https://mozilla.github.io/server-side-tls/ssl-config-generator/) +* Certification type + * [Let's Encrypt](https://letsencrypt.org) + * Custom certificate +* OCSP DNS resolvers + * [Cloudflare Resolver](https://www.cloudflare.com/dns/) + * [Google Public DNS](https://developers.google.com/speed/public-dns/) + * [OpenDNS](https://www.opendns.com) + +### Security +* Referrer-Policy + * `no-referrer` + * `no-referrer-when-downgrade` + * `origin` + * `origin-when-cross-origin` + * `same-origin` + * `strict-origin` + * `strict-origin-when-cross-origin` + * `unsafe-url` +* Content-Security-Policy +* X-Frame-Options +* X-XSS-Protection +* X-Content-Type-Options +* `server_tokens` +* `limit_req` (throttle WordPress login) + +### PHP +* PHP +* PHP connection + * TCP + * HHVM socket + * 5.x socket + * 7.x socket * WordPress security essentials * Drupal security essentials -* pass requests to index.php - * *[Laravel](https://laravel.com/docs/master/deployment#nginx)* - * *[Lumen](https://lumen.laravel.com/docs/5.1/installation#configuration)* - * *[Symfony](https://symfony.com/doc/current/setup/web_server_configuration.html#nginx)* - * *[Zend](https://www.nginx.com/resources/wiki/start/topics/recipes/zend/)* - * *[CodeIgniter](https://www.nginx.com/resources/wiki/start/topics/recipes/codeigniter/)* - * *[Yii](http://www.yiiframework.com/doc/guide/1.1/en/quickstart.apache-nginx-config#nginx)* - * *[CakePHP](https://book.cakephp.org/3.0/en/installation.html#nginx)* - * *[Slim](https://www.slimframework.com/docs/start/web-servers.html)* - * … -* pass requests to index.html - * *[Angular](https://angular.io/guide/deployment#production-servers)* - * *[React](https://github.com/react-boilerplate/react-boilerplate/blob/v3.5.0/app/.nginx.conf#L81)* - * *[Vue.js](https://stackoverflow.com/questions/47655869/how-to-use-vue-js-with-nginx)* - * *[Ember.js](https://discuss.emberjs.com/t/how-to-serve-all-routes-on-a-production-server-exactly/6372)* - * … -* unified (`nginx.conf`) / modularized file structure (ideal for multi-domain environment) -* security headers - * `X-Frame-Options` - * `X-XSS-Protection` - * `X-Content-Type-Options` - * `Referrer-Policy` - * `Content-Security-Policy` + +### Routing +* `index` +* Fallback routing + * index.php + * *[Laravel](https://laravel.com/docs/master/deployment#nginx)* + * *[Lumen](https://lumen.laravel.com/docs/5.1/installation#configuration)* + * *[Symfony](https://symfony.com/doc/current/setup/web_server_configuration.html#nginx)* + * *[Zend](https://www.nginx.com/resources/wiki/start/topics/recipes/zend/)* + * *[CodeIgniter](https://www.nginx.com/resources/wiki/start/topics/recipes/codeigniter/)* + * *[Yii](http://www.yiiframework.com/doc/guide/1.1/en/quickstart.apache-nginx-config#nginx)* + * *[CakePHP](https://book.cakephp.org/3.0/en/installation.html#nginx)* + * *[Slim](https://www.slimframework.com/docs/start/web-servers.html)* + * index.html + * *[Angular](https://angular.io/guide/deployment#production-servers)* + * *[React](https://github.com/react-boilerplate/react-boilerplate/blob/v3.5.0/app/.nginx.conf#L81)* + * *[Vue.js](https://stackoverflow.com/questions/47655869/how-to-use-vue-js-with-nginx)* + * *[Ember.js](https://discuss.emberjs.com/t/how-to-serve-all-routes-on-a-production-server-exactly/6372)* +* Fallback routing PHP (SPA + API support) + +### Cache +* Assets (`css(\.map)?|js(\.map)?`) +* Media + * Images (`jpe?g|png|gif|ico|cur|heic|webp|tiff?`) + * Audio (`mp3|m4a|aac|ogg|midi?|wav`) + * Video (`mp4|mov|webm|mpe?g|avi|ogv|flv|wmv`) +* SVG (`svgz?`) +* Fonts (`ttf|ttc|otf|eot|woff2?`) + +### Reverse proxy +* Reverse proxy +* Path +* `proxy_pass` +* Proxy headers + +### Logging +* `access_log` +* `error_log` +* `access_log` by domain +* `error_log` by domain +* `log_not_found` + +### nginx * `worker_processes` * `user` * `pid` -* `access_log` -* `error_log` * `client_max_body_size` -* `gzip` -* `server_tokens` -* `log_not_found` -* rate limiting (`limit_req`) -* expiration by file types (`expires`) + +### Tools +* Download generated config +* Modularized / unified structure (multiple or singe file(s)) +* Share settings +* Reset ## Built With * [Bootstrap](http://getbootstrap.com) - Grid, form controls diff --git a/public/assets/img/github.png b/public/assets/img/github.png new file mode 100644 index 0000000000000000000000000000000000000000..ccd6eacf597ffb8a1d713fc0453e895063d4d364 GIT binary patch literal 23940 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