پیکربندی 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
نکته: برای نمایش 403 از errorfile 403 در HA Proxy استفاده شود
دستور مربوط به انجام تست:
$ curl localhost:8888/working
It works
$ curl localhost:8888/not-working
<html><body><h1>403
Forbidden</h1>
Request
forbidden by administrative rules.
</body></html>
$ 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&cmd=resource&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&cmd=resource&f=console.png">
    <script src="?__debugger__=yes&cmd=resource&f=jquery.js"></script>
    <script src="?__debugger__=yes&cmd=resource&f=debugger.js"></script>
.
.
.
نکته: ورژن 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
نکته: هنگام ارسال در فایل haproxy.cfg بخش backend سرور را تغییر ندهید
server app1 api:5000
دریافت فایل های محیط تست
فایل های مورد نیاز تست از طریق این لینک قابل دسترسی می باشد.
ارسال پاسخ برای این سؤال