Haproxy


پیکربندی HA Proxy🔗

اپلیکیشنی داریم با دو Endpoint:

Endpoint Status Code
/working 200
/not-working 500

اپلیکیشن در حالت Debug Mode اجرا شده است و در صورت وجود خطا Stack Trace کد را نمایش میدهد.

در جلوی اپلیکیشن HA Proxy داریم که به عنوان Reverse Proxy و Load Balancer عمل می کند.

شرح مسئله🔗

نیاز داریم در صورتی که اپلیکیشن خطایی داشت به کاربر صفحه ی 403 نشان بدهیم، اما به برنامه نویسان و DevOps صفحه ی Stack Trace را نشان بدهیم که بتوانند مشکل را پیدا و حل بکند. برنامه نویسان و DevOps یک Header مخصوص برای این کار دارند.

Header Value
staff f34ac726dd7486a22bc0

در صورت وجود این Header در ریکوئست باید به کاربر Stack Trace به صورت کامل نمایش داده شود.

- شرایط تست

تنظیمات HA Proxy به شرح زیر می باشد( فایل ها را از لینک انتهای صفحه دریافت نمایید): ‍‍‍‍‍

# haproxy.cfg

global
    user haproxy
    group haproxy
    daemon

defaults
    log    global
    mode    http
    option    httplog
    option    dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /usr/local/etc/haproxy/errors/400.http
    errorfile 403 /usr/local/etc/haproxy/errors/403.http
    errorfile 408 /usr/local/etc/haproxy/errors/408.http
    errorfile 500 /usr/local/etc/haproxy/errors/500.http
    errorfile 502 /usr/local/etc/haproxy/errors/502.http
    errorfile 503 /usr/local/etc/haproxy/errors/503.http
    errorfile 504 /usr/local/etc/haproxy/errors/504.http


frontend http
    bind *:8888
    use_backend app


backend app
    server app1 api:5000
Plain text

نکته: برای نمایش 403 از errorfile 403 در HA Proxy استفاده شود

دستور مربوط به انجام تست:

$ curl localhost:8888/working

It works
Plain text
$ curl localhost:8888/not-working

<html><body><h1>403
Forbidden</h1>

Request
forbidden by administrative rules.

</body></html>
Plain text
$ curl localhost:8888/not-working -H "staff: f34ac726dd7486a22bc0"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Exception: test // Werkzeug Debugger</title>
    <link rel="stylesheet" href="?__debugger__=yes&amp;cmd=resource&amp;f=style.css"
        type="text/css">
    <!-- We need to make sure this has a favicon so that the debugger does
         not by accident trigger a request to /favicon.ico which might
         change the application state. -->
    <link rel="shortcut icon"
        href="?__debugger__=yes&amp;cmd=resource&amp;f=console.png">
    <script src="?__debugger__=yes&amp;cmd=resource&amp;f=jquery.js"></script>
    <script src="?__debugger__=yes&amp;cmd=resource&amp;f=debugger.js"></script>
.
.
.
Plain text

نکته: ورژن HA Proxy 2.3.4 مورد استفاده است

نحوه ی ارسال جواب🔗

تغییرات خودتان را در محیط تست اعمال کنید و سپس فایل های خود را به صورت zip شده با ساختار زیر ارسال نمایید.( فایل ها را از لینک انتهای صفحه دریافت نمایید)

├── api
│   ├── api.py
│   ├── Dockerfile
│   └── requirements.txt
├── docker-compose.yml
├── haproxy
│   ├── errors
│   │   ├── 400.http
│   │   ├── 403.http
│   │   ├── 408.http
│   │   ├── 500.http
│   │   ├── 502.http
│   │   ├── 503.http
│   │   └── 504.http
│   └── haproxy.cfg
Plain text

نکته: هنگام ارسال در فایل haproxy.cfg بخش backend سرور را تغییر ندهید

server app1 api:5000
Plain text

دریافت فایل های محیط تست🔗

فایل های مورد نیاز تست از طریق این لینک قابل دسترسی می باشد.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.