From ef8ba84ebc42775b5df934950f96a955a90c32b1 Mon Sep 17 00:00:00 2001
From: reqwizz <vladroshu2005@gmail.com>
Date: Sun, 17 Nov 2024 18:46:24 +0300
Subject: [PATCH] add failsites

---
 ansible/roles/nginx_proxy/tasks/main.yml      | 16 ++++++++-
 .../roles/nginx_proxy/templates/proxy.conf.j2 | 12 +++++--
 .../nginx_proxy/templates/site_down.html.j2   | 35 +++++++++++++++++++
 3 files changed, 60 insertions(+), 3 deletions(-)
 create mode 100644 ansible/roles/nginx_proxy/templates/site_down.html.j2

diff --git a/ansible/roles/nginx_proxy/tasks/main.yml b/ansible/roles/nginx_proxy/tasks/main.yml
index ec44e69..ebe481d 100644
--- a/ansible/roles/nginx_proxy/tasks/main.yml
+++ b/ansible/roles/nginx_proxy/tasks/main.yml
@@ -9,6 +9,20 @@
     enabled: yes
     state: started
 
+- name: Create directory for error pages
+  file:
+    path: /var/www/errors
+    state: directory
+    owner: nginx
+    group: nginx
+    mode: '0755'
+
+- name: Deploy custom error page
+  template:
+    src: site_down.html.j2
+    dest: /var/www/errors/site_down.html
+    mode: '0644'
+
 - name: Deploy Proxy Configuration
   template:
     src: proxy.conf.j2
@@ -17,4 +31,4 @@
 - name: Reload Nginx
   systemd:
     name: nginx
-    state: reloaded
\ No newline at end of file
+    state: reloaded
diff --git a/ansible/roles/nginx_proxy/templates/proxy.conf.j2 b/ansible/roles/nginx_proxy/templates/proxy.conf.j2
index 4572c22..1de783b 100644
--- a/ansible/roles/nginx_proxy/templates/proxy.conf.j2
+++ b/ansible/roles/nginx_proxy/templates/proxy.conf.j2
@@ -1,6 +1,6 @@
 upstream backend {
     {% for server in upstream_servers %}
-    server {{ server }} max_fails=1 fail_timeout=1s;
+    server {{ server }} max_fails=1 fail_timeout=5s;
     {% endfor %}
 }
 
@@ -12,12 +12,20 @@ server {
     ssl_certificate /etc/nginx/ssl/{{ ssl_cert_file }};
     ssl_certificate_key /etc/nginx/ssl/{{ ssl_key_file }};
 
+    error_page 502 503 504 /custom_50x.html;
+
+    location = /custom_50x.html {
+        root /var/www/errors;
+        internal;
+    }
+
     location / {
         proxy_pass http://backend;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
+        proxy_intercept_errors on;
     }
 
     location /health {
@@ -26,4 +34,4 @@ server {
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
-}
+}
\ No newline at end of file
diff --git a/ansible/roles/nginx_proxy/templates/site_down.html.j2 b/ansible/roles/nginx_proxy/templates/site_down.html.j2
new file mode 100644
index 0000000..efcae73
--- /dev/null
+++ b/ansible/roles/nginx_proxy/templates/site_down.html.j2
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="ru">
+<head>
+    <meta charset="UTF-8">
+    <title>Сайт не работает</title>
+    <style>
+        body { 
+            font-family: Arial, sans-serif; 
+            background-color: #f8d7da; 
+            color: #721c24; 
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            height: 100vh;
+            margin: 0;
+        }
+        .message {
+            text-align: center;
+        }
+        h1 { 
+            font-size: 48px; 
+            margin-bottom: 20px; 
+        }
+        p { 
+            font-size: 18px; 
+        }
+    </style>
+</head>
+<body>
+    <div class="message">
+        <h1>Сайт не работает</h1>
+        <p>Просьба обратиться в техподдержку или на сервере в данный момент техработы.</p>
+    </div>
+</body>
+</html>