From 1898a7b0884c99860bb56137ddac7f64b48a6f94 Mon Sep 17 00:00:00 2001 From: hrupi Date: Tue, 3 Sep 2024 21:00:49 +0300 Subject: [PATCH] init commit --- .gitignore | 4 ++++ Dockerfile | 12 +++++++++++ configuration/cache.conf | 12 +++++++++++ configuration/compression.conf | 7 ++++++ configuration/error_pages.conf | 13 +++++++++++ configuration/general.conf | 12 +++++++++++ configuration/includes.conf | 2 ++ configuration/security.conf | 10 +++++++++ docker-compose.yml | 33 ++++++++++++++++++++++++++++ error-pages/404/404.html | 2 ++ error-pages/502/502.html | 15 +++++++++++++ error-pages/502/502.jpg | Bin 0 -> 20267 bytes locations/acme_reverse.location | 8 +++++++ nginx.conf | 30 ++++++++++++++++++++++++++ readme.md | 0 resources/502.jpg | Bin 0 -> 20267 bytes sites-enabled/example.conf.tplm | 37 ++++++++++++++++++++++++++++++++ 17 files changed, 197 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 configuration/cache.conf create mode 100644 configuration/compression.conf create mode 100644 configuration/error_pages.conf create mode 100644 configuration/general.conf create mode 100644 configuration/includes.conf create mode 100644 configuration/security.conf create mode 100644 docker-compose.yml create mode 100644 error-pages/404/404.html create mode 100644 error-pages/502/502.html create mode 100644 error-pages/502/502.jpg create mode 100644 locations/acme_reverse.location create mode 100644 nginx.conf create mode 100644 readme.md create mode 100644 resources/502.jpg create mode 100644 sites-enabled/example.conf.tplm diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c30d935 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +logs/* +ssl/* +sites-enabled/* +!sites-enabled/example.conf.tplm diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d0a406a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +ARG ubu_tag +FROM ubuntu:${ubu_tag} +ENV TZ="Europe/Moscow" +ARG nginx_ssl_path +ARG nginx_config_path +ARG nginx_proxy_config_path +RUN apt-get update \ + && apt-get install nginx libnginx-mod-http-geoip2 nginx-common nginx-core curl tzdata -y \ + && apt-get clean \ + && rm -fr /var/lib/apt/lists/* +COPY ./nginx.conf ${nginx_config_path}/nginx.conf +ENTRYPOINT ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/configuration/cache.conf b/configuration/cache.conf new file mode 100644 index 0000000..500cc32 --- /dev/null +++ b/configuration/cache.conf @@ -0,0 +1,12 @@ +# proxy_cache all; +# proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=all:20m max_size=4096m; +# proxy_cache_key "$host$request_uri$cookie_user"; +# proxy_cache_valid 200 301 302 10m; +# proxy_cache_valid 502 404 10s; +# proxy_cache_lock on; +# proxy_cache_lock_age 10s; +# proxy_cache_lock_timeout 10s; +# proxy_ignore_headers "Set-Cookie"; +# proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; +#proxy_cache_bypass +#proxy_no_cache \ No newline at end of file diff --git a/configuration/compression.conf b/configuration/compression.conf new file mode 100644 index 0000000..27cba7e --- /dev/null +++ b/configuration/compression.conf @@ -0,0 +1,7 @@ +gzip on; +gzip_vary on; +gzip_proxied any; +gzip_buffers 64 4k; +gzip_comp_level 9; +gzip_min_length 200; +gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml; diff --git a/configuration/error_pages.conf b/configuration/error_pages.conf new file mode 100644 index 0000000..de1ab52 --- /dev/null +++ b/configuration/error_pages.conf @@ -0,0 +1,13 @@ +error_page 404 /404.html; +error_page 502 /502.html; + +location = /404.html { + root /etc/nginx/error-pages/404; + proxy_intercept_errors on; + internal; +} +location = /502.html { + root /etc/nginx/error-pages/502; + proxy_intercept_errors on; + internal; +} \ No newline at end of file diff --git a/configuration/general.conf b/configuration/general.conf new file mode 100644 index 0000000..6e51e96 --- /dev/null +++ b/configuration/general.conf @@ -0,0 +1,12 @@ +location = /favicon.ico { + log_not_found off; +} + +location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ { + expires 12h; +} + +location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ { + add_header Access-Control-Allow-Origin "*"; + expires 12h; +} \ No newline at end of file diff --git a/configuration/includes.conf b/configuration/includes.conf new file mode 100644 index 0000000..ffa31e0 --- /dev/null +++ b/configuration/includes.conf @@ -0,0 +1,2 @@ +include configuration/compression.conf; +include configuration/error_pages.conf; \ No newline at end of file diff --git a/configuration/security.conf b/configuration/security.conf new file mode 100644 index 0000000..e2d8b3d --- /dev/null +++ b/configuration/security.conf @@ -0,0 +1,10 @@ +add_header X-XSS-Protection "1; mode=block" always; +add_header X-Content-Type-Options "nosniff" always; +add_header Referrer-Policy "no-referrer-when-downgrade" always; +add_header Content-Security-Policy "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline'; frame-ancestors 'self';" always; +add_header Permissions-Policy "interest-cohort=()" always; +add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + +location ~ /\.(?!well-known) { + deny all; +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..43ec88f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +services: + reverse: + image: nginx:stable-alpine + container_name: reverse + hostname: reverse + restart: always + extra_hosts: + - "host.docker.internal=host-gateway" + volumes: + - "./nginx.conf:/etc/nginx/nginx.conf:ro" + - "./locations:/etc/nginx/locations:ro" + - "./configuration:/etc/nginx/configuration:ro" + - "./sites-enabled:/etc/nginx/sites-enabled:ro" + - "./error-pages:/etc/nginx/error-pages/" + - "./resources:/var/www/html/resources" + - "./ssl:/etc/nginx/ssl" + - "./logs:/var/log/nginx/" + networks: + local_net: {} + ports: + - 80:80 + - 443:443 + - 60180:60180 + - 60280:60280 + - 60380:60380 + - 60480:60480 + - 64443:64443 + +networks: + local_net: + external: true + driver: bridge + name: services diff --git a/error-pages/404/404.html b/error-pages/404/404.html new file mode 100644 index 0000000..e702b27 --- /dev/null +++ b/error-pages/404/404.html @@ -0,0 +1,2 @@ +

Error 404: Not found :-(

+

I have no idea where that file is, sorry. Are you sure you typed in the correct URL?

diff --git a/error-pages/502/502.html b/error-pages/502/502.html new file mode 100644 index 0000000..7091f7a --- /dev/null +++ b/error-pages/502/502.html @@ -0,0 +1,15 @@ + + + + + + + oh no... + + \ No newline at end of file diff --git a/error-pages/502/502.jpg b/error-pages/502/502.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33ecfc3b590b27b1cf22a0edb5844433ccf63caa GIT binary patch literal 20267 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