{"id":13629363,"url":"https://github.com/tldr-devops/nginx-common-configuration","last_synced_at":"2025-04-05T04:12:14.206Z","repository":{"id":42524131,"uuid":"269429264","full_name":"tldr-devops/nginx-common-configuration","owner":"tldr-devops","description":"Nginx common useful configuration","archived":false,"fork":false,"pushed_at":"2023-07-17T10:04:59.000Z","size":138,"stargazers_count":584,"open_issues_count":0,"forks_count":21,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-29T03:07:45.133Z","etag":null,"topics":["codesandbox","configs","nginx","nginx-configuration","sandbox"],"latest_commit_sha":null,"homepage":"https://codesandbox.io/p/github/tldr-devops/nginx-common-configuration/master?file=/.codesandbox/README.md:1,1","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tldr-devops.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"ko_fi":"filipp_frizzy"}},"created_at":"2020-06-04T18:00:20.000Z","updated_at":"2025-03-27T16:09:55.000Z","dependencies_parsed_at":"2024-01-03T02:24:42.009Z","dependency_job_id":"ae1c2ecf-146c-4558-a541-8f6f340b59fa","html_url":"https://github.com/tldr-devops/nginx-common-configuration","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tldr-devops%2Fnginx-common-configuration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tldr-devops%2Fnginx-common-configuration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tldr-devops%2Fnginx-common-configuration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tldr-devops%2Fnginx-common-configuration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tldr-devops","download_url":"https://codeload.github.com/tldr-devops/nginx-common-configuration/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247284951,"owners_count":20913704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["codesandbox","configs","nginx","nginx-configuration","sandbox"],"created_at":"2024-08-01T22:01:08.570Z","updated_at":"2025-04-05T04:12:14.179Z","avatar_url":"https://github.com/tldr-devops.png","language":"Dockerfile","funding_links":["https://ko-fi.com/filipp_frizzy"],"categories":["Dockerfile","Configuration"],"sub_categories":[],"readme":"## Nginx common useful configuration\n\n[![#StandWithBelarus](https://img.shields.io/badge/Belarus-red?label=%23%20Stand%20With\u0026labelColor=white\u0026color=red)\n\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Presidential_Standard_of_Belarus_%28fictional%29.svg/240px-Presidential_Standard_of_Belarus_%28fictional%29.svg.png\" width=\"20\" height=\"20\" alt=\"Voices From Belarus\" /\u003e](https://bysol.org/en/) [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://vshymanskyy.github.io/StandWithUkraine)\n\n[![Try in Codesandbox.io](https://img.shields.io/badge/Try%20in%20Codesandbox.io-blue)](https://codesandbox.io/p/github/tldr-devops/nginx-common-configuration/master?file=/.codesandbox/README.md:1,1)\n\nNginx configs. Not the most powerful, productive or the best one. Just useful configs, which I would like to see in default nginx packages out of the box 😆\nBonus: fail2ban, filebeat, dockerfile and docker-compose configs for nginx :)\n\n**Motivation**: I have been using nginx since 2015, and I configured it really for hundreds setups of 30+ companies and startups: sites, apps, websockets, proxies, load balancing, from a few up to 1k rps, etc... And I'm a little bit disappointed by [the official nginx wiki](https://www.nginx.com/resources/wiki/).\nThe last drop was this [blog post in the official blog](https://www.nginx.com/blog/help-the-world-by-healing-your-nginx-configuration/):\nthis post doesn't provide a complete solution, half of these tips can be included into nginx configs or snippets by default,\nand some of the other tips, such as disabling access logging, in my opinion are the bad practice 😆\n\nAt the same time there are a lot good documentation and best practices:\n[nginx docs](https://nginx.org/en/docs/),\n[digitalocean config generator](https://www.digitalocean.com/community/tools/nginx),\n[mozilla ssl best practices](https://ssl-config.mozilla.org/#server=nginx\u0026version=1.17.7\u0026config=intermediate\u0026openssl=1.1.1d\u0026guideline=5.4),\netc...\n\nAnd there are also some more interesting projects and examples:\n- [nginx-admins-handbook](https://github.com/trimstray/nginx-admins-handbook)  \nHuge total guide, must read for any nginx admin.\n- [html5-boilerplate nginx configs](https://github.com/h5bp/server-configs-nginx)  \nMost popular collection of configuration snippets.\n- [nginx-boilerplate](https://github.com/nginx-boilerplate/nginx-boilerplate)  \nAnother one common boilerplate.\n- [elasticweb/nginx-configs](https://github.com/elasticweb/nginx-configs)  \nCollection of Nginx configs for most popular CMS/CMF/Frameworks based on PHP.\n- [openbridge/nginx](https://github.com/openbridge/nginx)  \nDocker image, but I haven't checked it properly yet, their configs require additional nginx modules and setup\nand it can't be just copied to the usual nginx setup. However, you can use it with docker.\nAlso I don't agree with nginx microcache for every site, see known traps.\n- [hub.docker.com/_/nginx](https://hub.docker.com/_/nginx/)  \nOfficial nginx docker image and docs.\n- [nginx-resources](https://github.com/fcambus/nginx-resources)  \nA collection of resources covering Nginx, Nginx + Lua, OpenResty and Tengine.\n\nSo here I'm trying to put together all (my) good patterns and knowledge, and organize it as simply as possible in comparison with complex examples above. So anyone will be able to copy this configs and get a good nginx setup out of the box :)\n\nYou can vote for my feature requests in official [docker-nginx](https://github.com/nginxinc/docker-nginx) repo:\n* [[Feature Request] Advanced default settings](https://github.com/nginxinc/docker-nginx/issues/593)\n* [[Feature Request] Custom envsubst for templating with default values](https://github.com/nginxinc/docker-nginx/issues/592)\n\nTime track:\n- [Filipp Frizzy](https://github.com/Friz-zy/) 55.64h\n\n### About the Author\n\nHello, everyone! My name is Filipp, and I have been working with high load distribution systems and services, security, monitoring, continuous deployment and release management (DevOps domain) since 2012.\n\nOne of my passions is developing DevOps solutions and contributing to the open-source community. By sharing my knowledge and experiences, I strive to save time for both myself and others while fostering a culture of collaboration and learning.\n\nI had to leave my home country, Belarus, due to my participation in [protests against the oppressive regime of dictator Lukashenko](https://en.wikipedia.org/wiki/2020%E2%80%932021_Belarusian_protests), who maintains a close affiliation with Putin. Since then, I'm trying to build my life from zero in other countries.\n\nIf you are seeking a skilled DevOps lead or architect to enhance your project, I invite you to connect with me on [LinkedIn](https://www.linkedin.com/in/filipp-frizzy-289a0360/) or explore my valuable contributions on [GitHub](https://github.com/Friz-zy/). Let's collaborate and create some cool solutions together :)\n\n### How You Can Support My Projects\n\nThere are a couple of ways you can support my projects:\n\n* **Sending Pull Requests (PRs)**:  \n    If you come across any improvements or suggestions for my configurations or texts, feel free to send me Pull Requests (PRs) with your proposed changes. I appreciate your contributions \u003c3\n\n* **Making Donations**:  \n    If you find my projects valuable and would like to support them financially, you can make a donation. Your contributions will go towards further development, maintenance, and improvement of the projects. Your support is greatly appreciated and helps to ensure the continued success of the projects.\n\n  - [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/filipp_frizzy)\n  - [donationalerts.com/r/filipp_frizzy](https://www.donationalerts.com/r/filipp_frizzy)\n  - ETH 0xCD9fC1719b9E174E911f343CA2B391060F931ff7\n  - BTC bc1q8fhsj24f5ncv3995zk9v3jhwwmscecc6w0tdw3\n\nThank you for considering supporting my work. Your involvement and contributions make a significant difference in the growth and success of my projects.\n\n### Configs\n\n#### Main configs\nAlmost all sections moved from main `nginx.conf` into `conf.d` directory:\n\n* `basic.conf`  \nBasic settings, mime types, charset, index, timeouts, open file cache, etc...\n* `cache.conf`  \nFastcgi, Proxy and Uwsgi cache setup, see known traps before using ;)\n* `gzip.conf`  \nGzip and gzip static\n* `log_format.conf`  \nExtended log formats\n* `real_ip.conf`  \nAllow X-Forwarded-For header from local networks and [cloudflare](https://www.cloudflare.com/)\n* `request_id.conf`  \nAdd X-Request-ID header into each request for tracing and debugging\n* `security.conf`  \nSecurity settings and headers\n* `ssl.conf`  \nSSL best practice from [mozilla](https://ssl-config.mozilla.org/#server=nginx\u0026version=1.17.7\u0026config=intermediate\u0026openssl=1.1.1d\u0026guideline=5.4)\n\n#### Snippets\nTemplates and includes. You can also use [config generator](https://www.digitalocean.com/community/tools/nginx) from digitalocean :)\n\n* `corps.include.template`  \nTemplate of corps politic for multiple subdomains setup\n* `default.conf`  \nExample of default config with nginx_status, let's encrypt check and redirect to https\n* `fastcgi.include`  \nInclude for php locations: fastcgi parameters, timeouts and cache example\n* `headers.include`  \nInclude with all headers, see known traps\n* `protected_locations.include`  \nInclude with protected locations with 'deny all'\n* `proxy.include`  \nInclude for proxy locations: proxy headers, parameters, timeouts and cache example\n* `referer.include.template`  \nTemplate of referer protection for cases when you concurents use your fail2ban protection against you, see known traps\n* `resolver.conf.template`  \nInclude for dynamic dns resolving, see known traps\n* `site.conf.template`  \nTemplate of common site configuration\n* `static_location.include`  \nInclude with location for static files\n\n#### Dockerfile\n`Dockerfile` example with build args, configs copying and custom envsubst template engine\n\n#### Docker-compose\n`docker-compose.yml` example for nginx\n\n#### Fail2ban\nYou can use fail2ban for banning some bots even behind load balancer.\n`nginx-deny` action will add `deny \u003cip\u003e;` into `/etc/nginx/conf.d/banned.conf` and reload nginx.\n\nWarning: your evil competitors can use your protection like fail2ban against you, check known traps ;)\n\nFiles for copying:\n```\nfail2ban/jail.local =\u003e /etc/fail2ban/jail.local\nfail2ban/action-nginx-deny.conf =\u003e /etc/fail2ban/action.d/nginx-deny.conf\nfail2ban/filter-magento.conf =\u003e /etc/fail2ban/filter.d/nginx-magento.conf\nfail2ban/filter-wordpress.conf =\u003e /etc/fail2ban/filter.d/nginx-wordpress.conf\nfail2ban/filter-nginx-noscript.conf =\u003e /etc/fail2ban/filter.d/nginx-noscript.conf\n```\n\n#### Filebeat\nFilebeat by default can't parse extended nginx access log formats, so you should override ingest json:\nCopy `filebeat/nginx_access_ingest.json` to `/usr/share/filebeat/module/nginx/access/ingest/default.json`\n\n### Known traps\n\n#### Cache with default settings break all client specific content\nIf you use fastcgi, proxy or uwsgi cache with default settings like\n```\nhttp {\n\n    proxy_cache_path /tmp/cache levels=1:2 keys_zone=mycache:10m max_size=10g \n                inactive=60m use_temp_path=off;\n\n    server {\n        listen 80;\n        proxy_cache mycache;\n\n        location / {\n            proxy_pass http://backend1;\n        }\n\n        location /some/path {\n            proxy_pass http://backend2;\n            proxy_cache_valid any 1m;\n            proxy_cache_min_uses 3;\n            proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;\n        }\n    }\n}\n```\nin both locations Nginx will cache every response. \nSo if your site has some login functionality or shopping cart or whatever, \nit will be mixed and most of clients will get response with content of some other clients.\n\nIn this configuration I suggest caches only as an additional tool for caching common non 200 status responses:\n```\nfastcgi_cache_valid 499 500 502 503 504 521 522 523 524 3s; # circuit breaker\nfastcgi_cache_valid 404 15m; # cache Not Found for decrease loading to backend\nfastcgi_cache_valid 301 308 1h; # cache Permanent Redirect for decrease loading to backend\nfastcgi_cache_valid 302 307 5s; # cache Temporary Redirect for decrease loading to backend\n\n# don't cache any other responses\nfastcgi_cache_valid 200 0;\nfastcgi_cache_valid any 0;\n```\nAnd even this one commented out in cache.conf, so you should choose yourself \nand enable it manually for whole site or some locations.\n\nHowever, how we can safely enable cache for all responses?.\nAnd use cache config like\n```\nfastcgi_cache_valid 401 0;\nfastcgi_cache_valid any 3s;\nfastcgi_cache_valid 404 15m;\nfastcgi_cache_valid 301 308 1h;\nfastcgi_cache_valid 200 5m;\n```\n\n1) *The easiest*  \nBy default, NGINX respects the Cache-Control headers from origin servers. \nIt does not cache responses with Cache-Control set to Private, No-Cache, or \nNo-Store or with Set-Cookie in the response header. So if your app can add `Cache-Control` \nheader into every response - we are done here :) [Example](https://serverfault.com/a/815990)\n\n```\nParameters of caching can also be set directly in the response header. This has higher priority than setting of caching time using the directive.\n- The “X-Accel-Expires” header field sets caching time of a response in seconds. The zero value disables caching for a response. If the value starts with the @ prefix, it sets an absolute time in seconds since Epoch, up to which the response may be cached.\n- If the header does not include the “X-Accel-Expires” field, parameters of caching may be set in the header fields “Expires” or “Cache-Control”.\n- If the header includes the “Set-Cookie” field, such a response will not be cached.\n- If the header includes the “Vary” field with the special value “*”, such a response will not be cached (1.7.7). If the header includes the “Vary” field with another value, such a response will be cached taking into account the corresponding request header fields (1.7.7).\nProcessing of one or more of these response header fields can be disabled using the fastcgi_ignore_headers directive.\n```\n[ngx_http_fastcgi_module](https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html)\n\n2) *The most correct*  \nIf you app can store cache in an external cache database \nlike redis or memcached, you can use Nginx \n[redis](https://github.com/openresty/redis2-nginx-module) or \n[memcached](https://nginx.org/en/docs/http/ngx_http_memcached_module.html) \nmodules instead of nginx cache for both caching and speeding up your site.\n\n3) *The most difficult*  \nYou can check URI and cookies by nginx itself, but this is hard \nand add a mess into your configs and risk of mistakes. There is a good example in \nthe [engintron](https://github.com/engintron/engintron/blob/master/nginx/proxy_params_dynamic) configs, \nbut it's under GPLv2 so I can't include it into my snippets. Also there is a little easier \n[example](https://dev.to/ale_ukr/how-to-make-nginx-cache-cookie-aware-2ffl) how to check only one cookie.\n\n4) *Bonus: the lucky one*  \nFor static content locations you can just enable cache without any dancing around :)\n\n#### [Adding add_header remove all add_header directives from parent sections](https://www.peterbe.com/plog/be-very-careful-with-your-add_header-in-nginx)\n\nConfiguration like\n```\nadd_header Name1 Value1;\n\nlocation / {\n    add_header Name2 Value2;\n```\nAfter all produce only `Name2` header in response. \nSo use add_header.conf include or copy all headers manually \ninto sections under HTTP one.\n```\ninclude /etc/nginx/snippets/headers.include\n```\n\n#### DNS resolving and cache in Docker, Kubernetes and other dynamic environments\n\nBy default, as NGINX starts up or reloads its configuration,\nit queries a DNS server to resolve backend dns records.\nThe DNS server returns the list of backend IPs,\nand NGINX uses the default Round Robin algorithm to load balance requests among them.\nNGINX chooses the DNS server from the OS configuration file /etc/resolv.conf.\nThis method is the least flexible way to do service discovery and has the following additional drawbacks:\n- If the domain name can’t be resolved, NGINX fails to start or reload its configuration.\n- NGINX caches the DNS records until the next restart or configuration reload, ignoring the records’ TTL values.\n\nFor dynamic dns resolving in docker, k8s and other dynamic environments,\nyou should set the Domain Name in a Variable and add resolver directive\nto explicitly specify the name server\nas NGINX does not refer to /etc/resolv.conf in this case.\n\n```\nresolver 127.0.0.1 valid=10s;\n\nserver {\n    location / {\n        set $backend backends.example.com;\n        proxy_pass http://$backend;\n    }\n}\n```\n\nYou can configure and include `resolver.conf` snippet for manage resolver options:\n```\ninclude /etc/nginx/snippets/resolver.conf\n```\n\n#### Fail2ban and any other protection can be used against you\n\nNot only that incorrectly configured protection will block valid users,\neven right configured protection like fail2ban, especially with `botsearch-common` filter,\ncan be used for attack to you. For example, you competitors can add to their sites something like\n```\n\u003cimg src=\"https://{{ your site }}/admin/1.jpg\"\u003e\n\u003cimg src=\"https://{{ your site }}/phpmyadmin/1.jpg\"\u003e\n\u003cimg src=\"https://{{ your site }}/roundcube/1.jpg\"\u003e\n```\n\nThen valid user after visit to the their site will be automatically blocked on your site 😆\nYou can fight with this practice using `http_referer`, see `snippets/referer.include.template` template ;)\nWarning: I have not tested this code yet\n\n#### Default templating engine in official docker image can't proceed variables with default values like `${var:-$DEFAULT}`\n\nBy default nginx in docker use [GNU envsubst](https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html)\nthat [can't proceed variables with default values](https://stackoverflow.com/questions/50230361/envsubst-default-values-for-unset-variables).\nYou can use instead [a8m envsubst](https://github.com/a8m/envsubst) or [stephenc envsub](https://github.com/stephenc/envsub),\nfirst one already has a prebuilded binary for x86_64 arch, check the `Dockerfile` in this repo ;)\n\n#### Includes like `\u003cdir\u003e/*.conf` are processed in the alphabetic order\n\nThis is important for nginx in docker as all configs are located in one dir\n\n#### Errors like ` failed (24: Too many open files)` or `worker_connections exceed open file resource limit`\n\nProblem with limit of open files (`ulimit -n`)\n\nYou can change it\n* systemd  \nAdd into `/etc/systemd/system/nginx.d/override.conf`\n```\n[Service]\nLimitNOFILE=100000\n```\n* old init system  \nChange `/etc/default/nginx`\n```\nULIMIT=\"-n 100000\"\n```\n* docker-compose\n```\nulimits:\n  nproc: 65535\n  nofile:\n    soft: 100000\n    hard: 100000\n```\n\nMaybe you should also change `/etc/security/limits.conf`\n```\nnginx           hard    nofile          100000\nnginx           soft    nofile          100000\nwww-data        hard    nofile          100000\nwww-data        soft    nofile          100000\n```\nand `/etc/sysctl.conf`\n```\nfs.file-max = 394257\n```\n\n### Nginx build info\n\n#### Docker\n```\nnginx version: nginx/1.17.9\nbuilt by gcc 8.3.0 (Debian 8.3.0-6)\nbuilt with OpenSSL 1.1.1d  10 Sep 2019\nTLS SNI support enabled\nconfigure arguments: \n--prefix=/etc/nginx \n--sbin-path=/usr/sbin/nginx \n--modules-path=/usr/lib/nginx/modules \n--conf-path=/etc/nginx/nginx.conf \n--error-log-path=/var/log/nginx/error.log \n--http-log-path=/var/log/nginx/access.log \n--pid-path=/var/run/nginx.pid \n--lock-path=/var/run/nginx.lock \n--http-client-body-temp-path=/var/cache/nginx/client_temp \n--http-proxy-temp-path=/var/cache/nginx/proxy_temp \n--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \n--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \n--http-scgi-temp-path=/var/cache/nginx/scgi_temp \n--user=nginx \n--group=nginx \n--with-compat \n--with-file-aio \n--with-threads \n--with-http_addition_module \n--with-http_auth_request_module \n--with-http_dav_module \n--with-http_flv_module \n--with-http_gunzip_module \n--with-http_gzip_static_module \n--with-http_mp4_module \n--with-http_random_index_module \n--with-http_realip_module \n--with-http_secure_link_module \n--with-http_slice_module \n--with-http_ssl_module \n--with-http_stub_status_module \n--with-http_sub_module \n--with-http_v2_module \n--with-mail \n--with-mail_ssl_module \n--with-stream \n--with-stream_realip_module \n--with-stream_ssl_module \n--with-stream_ssl_preread_module \n--with-cc-opt='-g -O2 \n-fdebug-prefix-map=/data/builder/debuild/nginx-1.17.9/debian/debuild-base/nginx-1.17.9=. \n-fstack-protector-strong -Wformat -Werror=format-security \n-Wp,-D_FORTIFY_SOURCE=2 -fPIC' \n--with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'\n```\n\n#### Ubuntu 18.04 build info\n```\nnginx version: nginx/1.14.0 (Ubuntu)\nbuilt with OpenSSL 1.1.1  11 Sep 2018\nTLS SNI support enabled\nconfigure arguments: \n--with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-GkiujU/nginx-1.14.0=. \n-fstack-protector-strong -Wformat -Werror=format-security \n-fPIC -Wdate-time -D_FORTIFY_SOURCE=2' \n--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' \n--prefix=/usr/share/nginx \n--conf-path=/etc/nginx/nginx.conf \n--http-log-path=/var/log/nginx/access.log \n--error-log-path=/var/log/nginx/error.log \n--lock-path=/var/lock/nginx.lock \n--pid-path=/run/nginx.pid \n--modules-path=/usr/lib/nginx/modules \n--http-client-body-temp-path=/var/lib/nginx/body \n--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \n--http-proxy-temp-path=/var/lib/nginx/proxy \n--http-scgi-temp-path=/var/lib/nginx/scgi \n--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \n--with-debug \n--with-pcre-jit \n--with-http_ssl_module \n--with-http_stub_status_module \n--with-http_realip_module \n--with-http_auth_request_module \n--with-http_v2_module \n--with-http_dav_module \n--with-http_slice_module \n--with-threads \n--with-http_addition_module \n--with-http_geoip_module=dynamic \n--with-http_gunzip_module \n--with-http_gzip_static_module \n--with-http_image_filter_module=dynamic \n--with-http_sub_module \n--with-http_xslt_module=dynamic \n--with-stream=dynamic \n--with-stream_ssl_module \n--with-mail=dynamic \n--with-mail_ssl_module\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftldr-devops%2Fnginx-common-configuration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftldr-devops%2Fnginx-common-configuration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftldr-devops%2Fnginx-common-configuration/lists"}